diff mbox series

nvme: fix write zeroes offset and count

Message ID 20190311151153.10516-1-keith.busch@intel.com (mailing list archive)
State New, archived
Headers show
Series nvme: fix write zeroes offset and count | expand

Commit Message

Keith Busch March 11, 2019, 3:11 p.m. UTC
The implementation used blocks units rather than the expected bytes.

Fixes: c03e7ef12a9 ("nvme: Implement Write Zeroes")
Reported-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Keith Busch <keith.busch@intel.com>
---
 hw/block/nvme.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Christoph Hellwig March 12, 2019, 2:48 p.m. UTC | #1
On Mon, Mar 11, 2019 at 09:11:53AM -0600, Keith Busch wrote:
> The implementation used blocks units rather than the expected bytes.

Thank,

looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

And sorry for causing this mess.
Kevin Wolf March 12, 2019, 3:05 p.m. UTC | #2
Am 11.03.2019 um 16:11 hat Keith Busch geschrieben:
> The implementation used blocks units rather than the expected bytes.
> 
> Fixes: c03e7ef12a9 ("nvme: Implement Write Zeroes")
> Reported-by: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Keith Busch <keith.busch@intel.com>

Thanks, applied to the block branch.

Kevin
diff mbox series

Patch

diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 7c8c63e8f5..e8fe8f1ddd 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -324,8 +324,8 @@  static uint16_t nvme_write_zeros(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd,
     const uint8_t data_shift = ns->id_ns.lbaf[lba_index].ds;
     uint64_t slba = le64_to_cpu(rw->slba);
     uint32_t nlb  = le16_to_cpu(rw->nlb) + 1;
-    uint64_t aio_slba = slba << (data_shift - BDRV_SECTOR_BITS);
-    uint32_t aio_nlb = nlb << (data_shift - BDRV_SECTOR_BITS);
+    uint64_t offset = slba << data_shift;
+    uint32_t count = nlb << data_shift;
 
     if (unlikely(slba + nlb > ns->id_ns.nsze)) {
         trace_nvme_err_invalid_lba_range(slba, nlb, ns->id_ns.nsze);
@@ -335,7 +335,7 @@  static uint16_t nvme_write_zeros(NvmeCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd,
     req->has_sg = false;
     block_acct_start(blk_get_stats(n->conf.blk), &req->acct, 0,
                      BLOCK_ACCT_WRITE);
-    req->aiocb = blk_aio_pwrite_zeroes(n->conf.blk, aio_slba, aio_nlb,
+    req->aiocb = blk_aio_pwrite_zeroes(n->conf.blk, offset, count,
                                         BDRV_REQ_MAY_UNMAP, nvme_rw_cb, req);
     return NVME_NO_COMPLETE;
 }