nvme-rdma: use nr_phys_segments when map rq to sgl
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Thu, 21 Feb 2019 04:13:34 +0000 (20:13 -0800)
committerChristoph Hellwig <hch@lst.de>
Thu, 21 Feb 2019 13:39:20 +0000 (06:39 -0700)
Use blk_rq_nr_phys_segments() instead of blk_rq_payload_bytes() to check
if a command contains data to be mapped.  This fixes the case where
a struct request contains LBAs, but it has no payload, such as
Write Zeroes support.

Fixes: 6e02318eaea5 ("nvme: add support for the Write Zeroes command")
Reported-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tested-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/rdma.c

index 7c0d291852496538c96cce29e43c66d231557e96..11a5ecae78c8dab960503f22b76a7705d72fe40c 100644 (file)
@@ -1142,7 +1142,7 @@ static void nvme_rdma_unmap_data(struct nvme_rdma_queue *queue,
        struct nvme_rdma_device *dev = queue->device;
        struct ib_device *ibdev = dev->dev;
 
-       if (!blk_rq_payload_bytes(rq))
+       if (!blk_rq_nr_phys_segments(rq))
                return;
 
        if (req->mr) {
@@ -1265,7 +1265,7 @@ static int nvme_rdma_map_data(struct nvme_rdma_queue *queue,
 
        c->common.flags |= NVME_CMD_SGL_METABUF;
 
-       if (!blk_rq_payload_bytes(rq))
+       if (!blk_rq_nr_phys_segments(rq))
                return nvme_rdma_set_sg_null(c);
 
        req->sg_table.sgl = req->first_sgl;