nvmet: fix a wrong error status returned in error log page
authorAmit <amit.engel@emc.com>
Thu, 12 Sep 2019 05:29:39 +0000 (08:29 +0300)
committerSagi Grimberg <sagi@grimberg.me>
Thu, 12 Sep 2019 15:50:46 +0000 (08:50 -0700)
When the command data_len cannot hold all the controller errors,
we should simply return as much errors as we can fit
instead of failing the command.

Signed-off-by: Amit Engel <amit.engel@dell.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/target/admin-cmd.c

index 51800a9ce9a912d7a22eb6a25f7a29990e9f5bb9..831a062d27cbccdc26a7cbdf5e3d17c2d159f385 100644 (file)
@@ -37,7 +37,6 @@ static void nvmet_execute_get_log_page_noop(struct nvmet_req *req)
 static void nvmet_execute_get_log_page_error(struct nvmet_req *req)
 {
        struct nvmet_ctrl *ctrl = req->sq->ctrl;
-       u16 status = NVME_SC_SUCCESS;
        unsigned long flags;
        off_t offset = 0;
        u64 slot;
@@ -47,9 +46,8 @@ static void nvmet_execute_get_log_page_error(struct nvmet_req *req)
        slot = ctrl->err_counter % NVMET_ERROR_LOG_SLOTS;
 
        for (i = 0; i < NVMET_ERROR_LOG_SLOTS; i++) {
-               status = nvmet_copy_to_sgl(req, offset, &ctrl->slots[slot],
-                               sizeof(struct nvme_error_slot));
-               if (status)
+               if (nvmet_copy_to_sgl(req, offset, &ctrl->slots[slot],
+                               sizeof(struct nvme_error_slot)))
                        break;
 
                if (slot == 0)
@@ -59,7 +57,7 @@ static void nvmet_execute_get_log_page_error(struct nvmet_req *req)
                offset += sizeof(struct nvme_error_slot);
        }
        spin_unlock_irqrestore(&ctrl->error_lock, flags);
-       nvmet_req_complete(req, status);
+       nvmet_req_complete(req, 0);
 }
 
 static u16 nvmet_get_smart_log_nsid(struct nvmet_req *req,