diff options
author | Israel Rukshin <israelr@mellanox.com> | 2018-01-30 10:07:01 +0000 |
---|---|---|
committer | Sagi Grimberg <sagi@grimberg.me> | 2018-02-14 15:38:59 +0200 |
commit | 7756f72ccd4359c6df61fc431cd3b5b0a8639837 (patch) | |
tree | 98b3c060942721672531a75b56971ad9f695341d /drivers/nvme | |
parent | 4244140d7b8f406b7edfd01c050dea783aa1efc5 (diff) | |
download | linux-7756f72ccd4359c6df61fc431cd3b5b0a8639837.tar.bz2 |
nvmet: Change return code of discard command if not supported
Execute discard command on block device that doesn't support it
should return success.
Returning internal error while using multi-path fails the path.
Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
Signed-off-by: Israel Rukshin <israelr@mellanox.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Diffstat (limited to 'drivers/nvme')
-rw-r--r-- | drivers/nvme/target/io-cmd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/nvme/target/io-cmd.c b/drivers/nvme/target/io-cmd.c index 0a4372a016f2..28bbdff4a88b 100644 --- a/drivers/nvme/target/io-cmd.c +++ b/drivers/nvme/target/io-cmd.c @@ -105,10 +105,13 @@ static void nvmet_execute_flush(struct nvmet_req *req) static u16 nvmet_discard_range(struct nvmet_ns *ns, struct nvme_dsm_range *range, struct bio **bio) { - if (__blkdev_issue_discard(ns->bdev, + int ret; + + ret = __blkdev_issue_discard(ns->bdev, le64_to_cpu(range->slba) << (ns->blksize_shift - 9), le32_to_cpu(range->nlb) << (ns->blksize_shift - 9), - GFP_KERNEL, 0, bio)) + GFP_KERNEL, 0, bio); + if (ret && ret != -EOPNOTSUPP) return NVME_SC_INTERNAL | NVME_SC_DNR; return 0; } |