NVMe: Do not cancel command multiple times
Cancelling an already cancelled command does not do anything, so check the command context before cancelling it, continuing if had already been cancelled so we do not log the same problem every second if a device stops responding. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
This commit is contained in:
Родитель
1287dabd34
Коммит
053ab702cc
|
@ -978,6 +978,8 @@ static void nvme_cancel_ios(struct nvme_queue *nvmeq, bool timeout)
|
||||||
|
|
||||||
if (timeout && !time_after(now, info[cmdid].timeout))
|
if (timeout && !time_after(now, info[cmdid].timeout))
|
||||||
continue;
|
continue;
|
||||||
|
if (info[cmdid].ctx == CMD_CTX_CANCELLED)
|
||||||
|
continue;
|
||||||
dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid);
|
dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid);
|
||||||
ctx = cancel_cmdid(nvmeq, cmdid, &fn);
|
ctx = cancel_cmdid(nvmeq, cmdid, &fn);
|
||||||
fn(nvmeq->dev, ctx, &cqe);
|
fn(nvmeq->dev, ctx, &cqe);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче