]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
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.19/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch b/queue-4.19/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch
new file mode 100644 (file)
index 0000000..8fcb952
--- /dev/null
@@ -0,0 +1,46 @@
+From 3778c4de96af4d1405cf2cb37b977be768dda4ed 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 134e14e778f8..8798274dc3ba 100644
+--- a/drivers/nvme/host/rdma.c
++++ b/drivers/nvme/host/rdma.c
+@@ -644,8 +644,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 270d7b9cf4a38012fe9c32b94718a89a67ad16e5..2d867bcaa19ed1492cdee87745416af4435cae0d 100644 (file)
@@ -17,3 +17,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