[PATCH] nvmet: Change error code of discard command if not supported
Max Gurtovoy
maxg at mellanox.com
Mon Jan 29 15:56:21 PST 2018
On 1/29/2018 8:30 PM, Sagi Grimberg wrote:
>
>> Execute discard command on block device that doesn't support it
>> should return not supported error.
>> Returning internal error while using multi-path fails the path.
>>
>> Reviewed-by: Max Gurtovoy <maxg at mellanox.com>
>> Signed-off-by: Israel Rukshin <israelr at mellanox.com>
>> ---
>> drivers/nvme/target/io-cmd.c | 9 +++++++--
>> 1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/nvme/target/io-cmd.c b/drivers/nvme/target/io-cmd.c
>> index 0a4372a..00d4607a 100644
>> --- a/drivers/nvme/target/io-cmd.c
>> +++ b/drivers/nvme/target/io-cmd.c
>> @@ -105,10 +105,15 @@ 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 == -EOPNOTSUPP)
>> + return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
>
> Actually I don't think we are allowed to fail with this status. We claim
> we support dsm regardless of the underlying backend device (because we
> can expose different devices in the same subsystem), so we can't fail
> a valid dsm command on invalid opcode. Either we keep the existing
> behavior or we simply return success as dsm is a hint anyways...
we can't fail a path in case the backend device doesn't support dsm. The
avarage user that will try to create a fs using mkfs.ext4, for example,
on top of a multipath device, without the appropriate flags will fail.
I'm fine with returning successful value, we'll test it and send a V2.
>
>> + else if (ret)
>> return NVME_SC_INTERNAL | NVME_SC_DNR;
>> return 0;
>> }
>>
More information about the Linux-nvme
mailing list