]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
nvmet: ignore EOPNOTSUPP for discard
authorChristoph Hellwig <hch@lst.de>
Wed, 13 Mar 2019 17:55:09 +0000 (18:55 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 13 Mar 2019 18:57:34 +0000 (12:57 -0600)
NVMe DSM is a pure hint, so if the underlying device / file system
does not support discard-like operations we should not fail the
operation but rather return success.

Fixes: 3b031d15995f ("nvmet: add error log support for bdev backend")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tested-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/target/io-cmd-bdev.c
drivers/nvme/target/io-cmd-file.c

index 71dfedbadc262f8a5512f32eb3d4d67b1c2cb3c9..a065dbfc43b19895defa7788ce3b1858bb75739d 100644 (file)
@@ -194,11 +194,11 @@ static u16 nvmet_bdev_discard_range(struct nvmet_req *req,
                        le64_to_cpu(range->slba) << (ns->blksize_shift - 9),
                        le32_to_cpu(range->nlb) << (ns->blksize_shift - 9),
                        GFP_KERNEL, 0, bio);
-
-       if (ret)
+       if (ret && ret != -EOPNOTSUPP) {
                req->error_slba = le64_to_cpu(range->slba);
-
-       return blk_to_nvme_status(req, errno_to_blk_status(ret));
+               return blk_to_nvme_status(req, errno_to_blk_status(ret));
+       }
+       return NVME_SC_SUCCESS;
 }
 
 static void nvmet_bdev_execute_discard(struct nvmet_req *req)
index 517522305e5cbcd1d548a8e79176eef35f90b8a6..3e43212d3c1c6bba5a6d553dc2a965188c5ccbf5 100644 (file)
@@ -297,7 +297,7 @@ static void nvmet_file_execute_discard(struct nvmet_req *req)
                }
 
                ret = vfs_fallocate(req->ns->file, mode, offset, len);
-               if (ret) {
+               if (ret && ret != -EOPNOTSUPP) {
                        req->error_slba = le64_to_cpu(range.slba);
                        status = errno_to_nvme_status(req, ret);
                        break;