public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] nvme/scsi: Consider LBA format in IO splitting calculation
@ 2017-04-25  0:02 Jon Derrick
  2017-04-25  4:00 ` Jens Axboe
  2017-04-25 17:57 ` Christoph Hellwig
  0 siblings, 2 replies; 6+ messages in thread
From: Jon Derrick @ 2017-04-25  0:02 UTC (permalink / raw)
  To: axboe
  Cc: linux-nvme, linux-scsi, linux-block, keith.busch, hch, sagi,
	Jon Derrick

The current command submission code uses a sector-based value when
considering the maximum number of blocks per command. With a
4k-formatted namespace and a command exceeding max hardware limits, this
calculation doesn't split IOs which should be split and fails in the
nvme layer. This patch fixes that calculation and enables IO splitting
in these circumstances.

Signed-off-by: Jon Derrick <jonathan.derrick@intel.com>
---
 drivers/nvme/host/scsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvme/host/scsi.c b/drivers/nvme/host/scsi.c
index f49ae27..988da61 100644
--- a/drivers/nvme/host/scsi.c
+++ b/drivers/nvme/host/scsi.c
@@ -1609,7 +1609,7 @@ static int nvme_trans_do_nvme_io(struct nvme_ns *ns, struct sg_io_hdr *hdr,
 	struct nvme_command c;
 	u8 opcode = (is_write ? nvme_cmd_write : nvme_cmd_read);
 	u16 control;
-	u32 max_blocks = queue_max_hw_sectors(ns->queue);
+	u32 max_blocks = queue_max_hw_sectors(ns->queue) >> (ns->lba_shift - 9);
 
 	num_cmds = nvme_trans_io_get_num_cmds(hdr, cdb_info, max_blocks);
 
-- 
2.9.3

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

end of thread, other threads:[~2017-04-25 17:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-25  0:02 [PATCH] nvme/scsi: Consider LBA format in IO splitting calculation Jon Derrick
2017-04-25  4:00 ` Jens Axboe
2017-04-25  4:27   ` Damien Le Moal
2017-04-25  4:32     ` Jens Axboe
2017-04-25  4:43       ` Damien Le Moal
2017-04-25 17:57 ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox