mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
4244140d7b
commit
7756f72ccd
|
@ -105,10 +105,13 @@ static void nvmet_execute_flush(struct nvmet_req *req)
|
||||||
static u16 nvmet_discard_range(struct nvmet_ns *ns,
|
static u16 nvmet_discard_range(struct nvmet_ns *ns,
|
||||||
struct nvme_dsm_range *range, struct bio **bio)
|
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),
|
le64_to_cpu(range->slba) << (ns->blksize_shift - 9),
|
||||||
le32_to_cpu(range->nlb) << (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 NVME_SC_INTERNAL | NVME_SC_DNR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue