Hannes Reinecke 23bd3a
From: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
Hannes Reinecke 23bd3a
Date: Wed, 26 Feb 2020 18:53:43 -0800
Hannes Reinecke 23bd3a
Subject: [PATCH] nvme-pci: Hold cq_poll_lock while completing CQEs
Hannes Reinecke 23bd3a
Git-commit: 9515743bfb39c61aaf3d4f3219a645c8d1fe9a0e
Hannes Reinecke 23bd3a
Patch-mainline: v5.6-rc4
Hannes Reinecke 23bd3a
References: bsc#1169045
Hannes Reinecke 23bd3a
Hannes Reinecke 23bd3a
Completions need to consumed in the same order the controller submitted
Hannes Reinecke 23bd3a
them, otherwise future completion entries may overwrite ones we haven't
Hannes Reinecke 23bd3a
handled yet. Hold the nvme queue's poll lock while completing new CQEs to
Hannes Reinecke 23bd3a
prevent another thread from freeing command tags for reuse out-of-order.
Hannes Reinecke 23bd3a
Hannes Reinecke 23bd3a
Fixes: dabcefab45d3 ("nvme: provide optimized poll function for separate poll queues")
Hannes Reinecke 23bd3a
Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
Hannes Reinecke 23bd3a
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Hannes Reinecke 23bd3a
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Hannes Reinecke 23bd3a
Signed-off-by: Keith Busch <kbusch@kernel.org>
Hannes Reinecke 23bd3a
Acked-by: Hannes Reinecke <hare@suse.com>
Hannes Reinecke 23bd3a
---
Hannes Reinecke 23bd3a
 drivers/nvme/host/pci.c | 2 +-
Hannes Reinecke 23bd3a
 1 file changed, 1 insertion(+), 1 deletion(-)
Hannes Reinecke 23bd3a
Hannes Reinecke 23bd3a
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
Hannes Reinecke 23bd3a
index ace4dd9e953c..d3f23d6254e4 100644
Hannes Reinecke 23bd3a
--- a/drivers/nvme/host/pci.c
Hannes Reinecke 23bd3a
+++ b/drivers/nvme/host/pci.c
Hannes Reinecke 23bd3a
@@ -1078,9 +1078,9 @@ static int nvme_poll(struct blk_mq_hw_ctx *hctx)
Hannes Reinecke 23bd3a
 
Hannes Reinecke 23bd3a
 	spin_lock(&nvmeq->cq_poll_lock);
Hannes Reinecke 23bd3a
 	found = nvme_process_cq(nvmeq, &start, &end, -1);
Hannes Reinecke 23bd3a
+	nvme_complete_cqes(nvmeq, start, end);
Hannes Reinecke 23bd3a
 	spin_unlock(&nvmeq->cq_poll_lock);
Hannes Reinecke 23bd3a
 
Hannes Reinecke 23bd3a
-	nvme_complete_cqes(nvmeq, start, end);
Hannes Reinecke 23bd3a
 	return found;
Hannes Reinecke 23bd3a
 }
Hannes Reinecke 23bd3a
 
Hannes Reinecke 23bd3a
-- 
Hannes Reinecke 23bd3a
2.16.4
Hannes Reinecke 23bd3a