]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.14
authorSasha Levin <sashal@kernel.org>
Mon, 22 Mar 2021 03:05:03 +0000 (23:05 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 22 Mar 2021 03:05:03 +0000 (23:05 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.14/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch b/queue-4.14/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch
new file mode 100644 (file)
index 0000000..2052a78
--- /dev/null
@@ -0,0 +1,46 @@
+From 1ad29ec4ce404e48c59fea4769eef6b8199851e0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Mar 2021 14:04:27 -0700
+Subject: nvme-rdma: fix possible hang when failing to set io queues
+
+From: Sagi Grimberg <sagi@grimberg.me>
+
+[ Upstream commit c4c6df5fc84659690d4391d1fba155cd94185295 ]
+
+We only setup io queues for nvme controllers, and it makes absolutely no
+sense to allow a controller (re)connect without any I/O queues.  If we
+happen to fail setting the queue count for any reason, we should not allow
+this to be a successful reconnect as I/O has no chance in going through.
+Instead just fail and schedule another reconnect.
+
+Reported-by: Chao Leng <lengchao@huawei.com>
+Fixes: 711023071960 ("nvme-rdma: add a NVMe over Fabrics RDMA host driver")
+Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
+Reviewed-by: Chao Leng <lengchao@huawei.com>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/rdma.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
+index 564e457f1345..57e1c0dd63c4 100644
+--- a/drivers/nvme/host/rdma.c
++++ b/drivers/nvme/host/rdma.c
+@@ -655,8 +655,11 @@ static int nvme_rdma_alloc_io_queues(struct nvme_rdma_ctrl *ctrl)
+               return ret;
+       ctrl->ctrl.queue_count = nr_io_queues + 1;
+-      if (ctrl->ctrl.queue_count < 2)
+-              return 0;
++      if (ctrl->ctrl.queue_count < 2) {
++              dev_err(ctrl->ctrl.device,
++                      "unable to set any I/O queues\n");
++              return -ENOMEM;
++      }
+       dev_info(ctrl->ctrl.device,
+               "creating %d I/O queues.\n", nr_io_queues);
+-- 
+2.30.1
+
index 97951cb543f9bff6d9f74257c9980b7d2ae8cb84..2c2c71ef68ff8fce46234b554195bb7ce28f86d5 100644 (file)
@@ -20,3 +20,4 @@ svcrdma-disable-timeouts-on-rdma-backchannel.patch
 sunrpc-fix-refcount-leak-for-rpc-auth-modules.patch
 net-qrtr-fix-__netdev_alloc_skb-call.patch
 scsi-lpfc-fix-some-error-codes-in-debugfs.patch
+nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch