lkml.org 
[lkml]   [2018]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.18 52/88] nvmet: fix file discard return status
    Date
    From: Sagi Grimberg <sagi@grimberg.me>

    [ Upstream commit 1b72b71faccee986e2128a271125177dfe91f7b7 ]

    If nvmet_copy_from_sgl failed, we falsly return successful
    completion status.

    Fixes: d5eff33ee6f8 ("nvmet: add simple file backed ns support")
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/nvme/target/io-cmd-file.c | 18 ++++++++++--------
    1 file changed, 10 insertions(+), 8 deletions(-)

    diff --git a/drivers/nvme/target/io-cmd-file.c b/drivers/nvme/target/io-cmd-file.c
    index 8c42b3a8c420..64c7596a46a1 100644
    --- a/drivers/nvme/target/io-cmd-file.c
    +++ b/drivers/nvme/target/io-cmd-file.c
    @@ -209,22 +209,24 @@ static void nvmet_file_execute_discard(struct nvmet_req *req)
    {
    int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
    struct nvme_dsm_range range;
    - loff_t offset;
    - loff_t len;
    - int i, ret;
    + loff_t offset, len;
    + u16 ret;
    + int i;

    for (i = 0; i <= le32_to_cpu(req->cmd->dsm.nr); i++) {
    - if (nvmet_copy_from_sgl(req, i * sizeof(range), &range,
    - sizeof(range)))
    + ret = nvmet_copy_from_sgl(req, i * sizeof(range), &range,
    + sizeof(range));
    + if (ret)
    break;
    offset = le64_to_cpu(range.slba) << req->ns->blksize_shift;
    len = le32_to_cpu(range.nlb) << req->ns->blksize_shift;
    - ret = vfs_fallocate(req->ns->file, mode, offset, len);
    - if (ret)
    + if (vfs_fallocate(req->ns->file, mode, offset, len)) {
    + ret = NVME_SC_INTERNAL | NVME_SC_DNR;
    break;
    + }
    }

    - nvmet_req_complete(req, ret < 0 ? NVME_SC_INTERNAL | NVME_SC_DNR : 0);
    + nvmet_req_complete(req, ret);
    }

    static void nvmet_file_dsm_work(struct work_struct *w)
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-07 02:55    [W:4.061 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site