linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B
@ 2019-12-11 15:36 Israel Rukshin
  2019-12-18 17:28 ` Sagi Grimberg
  2019-12-19 23:51 ` Martin K. Petersen
  0 siblings, 2 replies; 3+ messages in thread
From: Israel Rukshin @ 2019-12-11 15:36 UTC (permalink / raw)
  To: Target-devel, Linux-scsi
  Cc: Israel Rukshin, Max Gurtovoy, Sagi Grimberg, Christoph Hellwig,
	Martin K. Petersen

The sector size of the block layer is 512 bytes, but integrity interval
size might be different (in case of 4K block size of the media). At the
initiator side the virtual start sector is the one that was originally
submitted by the block layer (512 bytes) for the Reftag usage. The
initiator converts the Reftag to integrity interval units and sends it to
the target. So the target virtual start sector should be calculated at
integrity interval units. prepare_fn() and complete_fn() don't remap
correctly the Reftag when using incorrect units of the virtual start
sector, which leads to the following protection error at the device:

"blk_update_request: protection error, dev sdb, sector 2048 op 0x0:(READ)
flags 0x10000 phys_seg 1 prio class 0"

To fix that, set the seed in integrity interval units.

Signed-off-by: Israel Rukshin <israelr@mellanox.com>
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
---
 drivers/target/target_core_iblock.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
index 6949ea8..51ffd5c 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -646,7 +646,9 @@ static ssize_t iblock_show_configfs_dev_params(struct se_device *dev, char *b)
 	}
 
 	bip->bip_iter.bi_size = bio_integrity_bytes(bi, bio_sectors(bio));
-	bip_set_seed(bip, bio->bi_iter.bi_sector);
+	/* virtual start sector must be in integrity interval units */
+	bip_set_seed(bip, bio->bi_iter.bi_sector >>
+				  (bi->interval_exp - SECTOR_SHIFT));
 
 	pr_debug("IBLOCK BIP Size: %u Sector: %llu\n", bip->bip_iter.bi_size,
 		 (unsigned long long)bip->bip_iter.bi_sector);
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B
  2019-12-11 15:36 [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B Israel Rukshin
@ 2019-12-18 17:28 ` Sagi Grimberg
  2019-12-19 23:51 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Sagi Grimberg @ 2019-12-18 17:28 UTC (permalink / raw)
  To: Israel Rukshin, Target-devel, Linux-scsi
  Cc: Max Gurtovoy, Christoph Hellwig, Martin K. Petersen

Reviewed-by: Sagi Grimberg <sagi@grimberg.me>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B
  2019-12-11 15:36 [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B Israel Rukshin
  2019-12-18 17:28 ` Sagi Grimberg
@ 2019-12-19 23:51 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2019-12-19 23:51 UTC (permalink / raw)
  To: Israel Rukshin
  Cc: Target-devel, Linux-scsi, Max Gurtovoy, Sagi Grimberg,
	Christoph Hellwig, Martin K. Petersen


Israel,

> The sector size of the block layer is 512 bytes, but integrity
> interval size might be different (in case of 4K block size of the
> media). At the initiator side the virtual start sector is the one that
> was originally submitted by the block layer (512 bytes) for the Reftag
> usage. The initiator converts the Reftag to integrity interval units
> and sends it to the target. So the target virtual start sector should
> be calculated at integrity interval units. prepare_fn() and
> complete_fn() don't remap correctly the Reftag when using incorrect
> units of the virtual start sector, which leads to the following
> protection error at the device:

Applied to 5.5/scsi-fixes, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-12-19 23:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-11 15:36 [PATCH] scsi: target/iblock: Fix protection error with sectors greater than 512B Israel Rukshin
2019-12-18 17:28 ` Sagi Grimberg
2019-12-19 23:51 ` Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).