From: Martin K. Petersen Date: Wed, 13 Jun 2012 04:11:35 +0000 (-0400) Subject: SCSI: Fix two bugs in DIX retry handling X-Git-Tag: v2.6.39-400.9.0~516^2~18^2~4 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c2333891a6d3aa7fed50f9fb65662b6301bad83a;p=users%2Fjedix%2Flinux-maple.git SCSI: Fix two bugs in DIX retry handling 1. When a bio has already been remapped skip it but advance the physical sector count so subsequent bios get mapped correctly. 2. BIO_MAPPED_INTEGRITY was set incorrectly. Fixed upstream as part of 9354f1b8e. Signed-off-by: Martin K. Petersen --- diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c index 1c47fa4ee1cf..b8a00eeefb20 100644 --- a/drivers/scsi/sd_dif.c +++ b/drivers/scsi/sd_dif.c @@ -387,8 +387,10 @@ void sd_dif_prepare(struct request *rq, sector_t hw_sector, struct bio_vec *iv; /* Already remapped? */ - if (bio_flagged(bio, BIO_MAPPED_INTEGRITY)) - break; + if (bio_flagged(bio, BIO_MAPPED_INTEGRITY)) { + phys += bio_sectors(bio); + continue; + } virt = bio->bi_integrity->bip_sector & 0xffffffff; @@ -408,7 +410,7 @@ void sd_dif_prepare(struct request *rq, sector_t hw_sector, kunmap_atomic(sdt, KM_USER0); } - bio->bi_flags |= BIO_MAPPED_INTEGRITY; + bio->bi_flags |= (1 << BIO_MAPPED_INTEGRITY); } }