mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 02:01:29 +00:00
nvme-scsi: Consider LBA format in IO splitting calculation
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> Reviewed-by: Jens Axboe <axboe@fb.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
de41447aac
commit
7fad1fd46c
@ -1609,7 +1609,7 @@ static int nvme_trans_do_nvme_io(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
|||||||
struct nvme_command c;
|
struct nvme_command c;
|
||||||
u8 opcode = (is_write ? nvme_cmd_write : nvme_cmd_read);
|
u8 opcode = (is_write ? nvme_cmd_write : nvme_cmd_read);
|
||||||
u16 control;
|
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);
|
num_cmds = nvme_trans_io_get_num_cmds(hdr, cdb_info, max_blocks);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user