From cde4afbf5efd9b40decbe8e1b9182a64e6bafbf1 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Sun, 21 Mar 2021 23:05:03 -0400 Subject: [PATCH] Fixes for 4.14 Signed-off-by: Sasha Levin --- ...ssible-hang-when-failing-to-set-io-q.patch | 46 +++++++++++++++++++ queue-4.14/series | 1 + 2 files changed, 47 insertions(+) create mode 100644 queue-4.14/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch 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 index 00000000000..2052a78e6ee --- /dev/null +++ b/queue-4.14/nvme-rdma-fix-possible-hang-when-failing-to-set-io-q.patch @@ -0,0 +1,46 @@ +From 1ad29ec4ce404e48c59fea4769eef6b8199851e0 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Mar 2021 14:04:27 -0700 +Subject: nvme-rdma: fix possible hang when failing to set io queues + +From: Sagi Grimberg + +[ 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 +Fixes: 711023071960 ("nvme-rdma: add a NVMe over Fabrics RDMA host driver") +Signed-off-by: Sagi Grimberg +Reviewed-by: Chao Leng +Signed-off-by: Christoph Hellwig +Signed-off-by: Sasha Levin +--- + 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 + diff --git a/queue-4.14/series b/queue-4.14/series index 97951cb543f..2c2c71ef68f 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -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 -- 2.47.3