public inbox for linux-nvme@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection
@ 2024-12-03 12:57 Maurizio Lombardi
  2024-12-04  0:19 ` Christoph Hellwig
  2024-12-04 17:20 ` Keith Busch
  0 siblings, 2 replies; 3+ messages in thread
From: Maurizio Lombardi @ 2024-12-03 12:57 UTC (permalink / raw)
  To: kbusch; +Cc: axboe, hch, sagi, linux-nvme, kanie, kch, loberman, emilne,
	jmeneghi

The NVMe specification states that MAXCMD is mandatory
for NVMe-over-Fabrics implementations. However, some NVMe/TCP
and NVMe/FC arrays from major vendors have buggy firmware
that reports MAXCMD as zero in the Identify Controller data structure.

Currently, the host implementation returns an error in such cases,
completely preventing the host from connecting to the target.

Fix the issue by printing a clear warning message about the firmware bug
and allowing the connection to proceed. It assumes that the
target supports a MAXCMD value of SQSIZE + 1. If any issues arise,
the user can manually adjust SQSIZE to mitigate them.

Fixes: 4999568184e5 ("nvme-fabrics: check max outstanding commands")
Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
---

V2: replace dev_err() with dev_warn()

 drivers/nvme/host/core.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 52b01a15aad1..30327e3b2662 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -3260,8 +3260,9 @@ static int nvme_check_ctrl_fabric_info(struct nvme_ctrl *ctrl, struct nvme_id_ct
 	}
 
 	if (!ctrl->maxcmd) {
-		dev_err(ctrl->device, "Maximum outstanding commands is 0\n");
-		return -EINVAL;
+		dev_warn(ctrl->device,
+			"Firmware bug: maximum outstanding commands is 0\n");
+		ctrl->maxcmd = ctrl->sqsize + 1;
 	}
 
 	return 0;
-- 
2.43.5



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection
  2024-12-03 12:57 [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection Maurizio Lombardi
@ 2024-12-04  0:19 ` Christoph Hellwig
  2024-12-04 17:20 ` Keith Busch
  1 sibling, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2024-12-04  0:19 UTC (permalink / raw)
  To: Maurizio Lombardi
  Cc: kbusch, axboe, hch, sagi, linux-nvme, kanie, kch, loberman,
	emilne, jmeneghi

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection
  2024-12-03 12:57 [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection Maurizio Lombardi
  2024-12-04  0:19 ` Christoph Hellwig
@ 2024-12-04 17:20 ` Keith Busch
  1 sibling, 0 replies; 3+ messages in thread
From: Keith Busch @ 2024-12-04 17:20 UTC (permalink / raw)
  To: Maurizio Lombardi
  Cc: axboe, hch, sagi, linux-nvme, kanie, kch, loberman, emilne,
	jmeneghi

On Tue, Dec 03, 2024 at 01:57:32PM +0100, Maurizio Lombardi wrote:
> The NVMe specification states that MAXCMD is mandatory
> for NVMe-over-Fabrics implementations. However, some NVMe/TCP
> and NVMe/FC arrays from major vendors have buggy firmware
> that reports MAXCMD as zero in the Identify Controller data structure.
> 
> Currently, the host implementation returns an error in such cases,
> completely preventing the host from connecting to the target.
> 
> Fix the issue by printing a clear warning message about the firmware bug
> and allowing the connection to proceed. It assumes that the
> target supports a MAXCMD value of SQSIZE + 1. If any issues arise,
> the user can manually adjust SQSIZE to mitigate them.

Thanks, applied to nvme-6.13.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-12-04 17:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-03 12:57 [PATCH V2] nvme-fabrics: handle zero MAXCMD without closing the connection Maurizio Lombardi
2024-12-04  0:19 ` Christoph Hellwig
2024-12-04 17:20 ` Keith Busch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox