summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2013-04-30 11:19:38 -0600
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2013-05-17 09:18:38 -0400
commit053ab702cc2702f25a97ead087ed344b864785b7 (patch)
treec1e37538f307692c5a1bb885bde58be6282b6378
parent1287dabd345f447bbe0f7a99fc95ab89bcfc0f5d (diff)
downloadop-kernel-dev-053ab702cc2702f25a97ead087ed344b864785b7.zip
op-kernel-dev-053ab702cc2702f25a97ead087ed344b864785b7.tar.gz
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>
-rw-r--r--drivers/block/nvme-core.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index d783f15..42abf72 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -978,6 +978,8 @@ static void nvme_cancel_ios(struct nvme_queue *nvmeq, bool timeout)
if (timeout && !time_after(now, info[cmdid].timeout))
continue;
+ if (info[cmdid].ctx == CMD_CTX_CANCELLED)
+ continue;
dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid);
ctx = cancel_cmdid(nvmeq, cmdid, &fn);
fn(nvmeq->dev, ctx, &cqe);
OpenPOWER on IntegriCloud