From nobody Thu Jul 23 21:00:13 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h5k6B62tZz6mRN3 for ; Thu, 23 Jul 2026 21:00:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h5k6B58Vqz3xB6 for ; Thu, 23 Jul 2026 21:00:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784840418; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pcEV3wCLxmSxaYgrRRHy/dZ03VsSCZoLRwekB/E9rnM=; b=xVaopUx4fwTHeZVtPjOm6k/jKhHoHTOwulFi4vHViWwv/g6VZdmbD7kxMp3885786d5vF1 suXNOgZyujTgqc5j4fRYM8c1LvetOn2I9ab0XuWljWMKfZXChEEAhl7Kq70AyaF5KAUkXF gc76F17VvE37gY/KIWAd429xUIq1DL2zADpsRBQP5d+oW6yD/XnJ0yXHTNxXmb2ycI/RJU 2c1brtJRP9y1fyt+P5Ft7fWSAM+jiKxgxCULwrd4oU8Gd0GMcn698fO+MXZVPZDKcGOxJX msDGPO6Yg1ZhuHTGBLwO/W26NuoecG80VOTo7fnon7yQIWgnx2kWKTTfsucCew== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784840418; a=rsa-sha256; cv=none; b=ah2/+u6vmtGTByMmVxqeeJ+OYUYQcr4a7nMYjjp2JC35ucWIhPjSBPWrrJSFV6cxfIxqvb qX/OKIFJTUzFhEcWoMVe5ZmjIrF7osS+/ELRjgb0+6BgKscBqmb0MbcH0MQI44mQTMETnx Pl9jQgYz6X6JOmuprhNi55nT4iteQz4RaAgRMIe/lsJLKVGKX7c3XHe5re3zF6oX21wWTO 8ySYGjjAM2C7birc5OxY8q6COPtjPEkE0rRw/WrSLFchJYo7uqoDrVEVXeOUPV2RvfxKDp 5Q+dydJaEvXZeBCfjOECBGoRgjcHND3Ow1mmzWRUDw4uufVlpe0n5LrPz8RVLQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784840418; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=pcEV3wCLxmSxaYgrRRHy/dZ03VsSCZoLRwekB/E9rnM=; b=y2LYa8oHcGefFGGqD+kC2UIZKThon+DJ8rteuO9EqymT0BstZmJmQPnATSTypcmuqZVwGW WXsYXysrzTTQdCyotldZG0X1a9q6mp8dfozFTqGtzexa8zeRBqAQH4OEo/DcOgCKtCI0+V funFSULzh/1jrMJWweJXLXm7qaYmQOikBezx7JY/V6nEVqMP8+n1In01flHu59KkJ6zHde ND/EcDMMm8JqH+hhmCZGCLYKyqeMnLwTBJE8Kz/j6vZ2antDn5nfq09uyO+jiV6qXYZ6A8 +c92nsLhkN3PjS/gWApTedLRARhsJoCHR6SeH2IKuRL+f0OetuPmzNkuMpasjg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5k6B48JKz6Dq for ; Thu, 23 Jul 2026 21:00:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30747 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 23 Jul 2026 21:00:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Motin Subject: git: 86182d890201 - main - Fix namespace listing for old NVMe devices List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 86182d89020159697391375cf475893d4cd859c0 Auto-Submitted: auto-generated Date: Thu, 23 Jul 2026 21:00:13 +0000 Message-Id: <6a6280dd.30747.71b81461@gitrepo.freebsd.org> The branch main has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=86182d89020159697391375cf475893d4cd859c0 commit 86182d89020159697391375cf475893d4cd859c0 Author: Alexander Motin AuthorDate: 2026-07-23 20:57:07 +0000 Commit: Alexander Motin CommitDate: 2026-07-23 20:57:07 +0000 Fix namespace listing for old NVMe devices Commit 9e1db51d4b5fc made nvmecontrol devlist get list of active namespaces from the device instead of iterating through all possible IDs. The problem is that this request is not supported before NVMe 1.1, and in particular by Intel Optane 905P drives. This change reintroduces iteration for devices before NVMe 1.2. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58010 --- sbin/nvmecontrol/devlist.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/sbin/nvmecontrol/devlist.c b/sbin/nvmecontrol/devlist.c index 7bf6bc6f097c..ff492591197c 100644 --- a/sbin/nvmecontrol/devlist.c +++ b/sbin/nvmecontrol/devlist.c @@ -117,7 +117,8 @@ scan_namespace(int fd, int ctrlr, uint32_t nsid) } static bool -print_controller_info(const char *name, int fd) +print_controller_info(const char *name, int fd, + struct nvme_controller_data *cdatap) { static struct timespec now; struct nvme_controller_data cdata; @@ -150,6 +151,7 @@ print_controller_info(const char *name, int fd) } } + *cdatap = cdata; nvme_strvis(mn, cdata.mn, sizeof(mn), NVME_MODEL_NUMBER_LENGTH); printf("%6s: %s", name, mn); if (connected) { @@ -187,6 +189,7 @@ print_controller_info(const char *name, int fd) static bool scan_controller(int ctrlr) { + struct nvme_controller_data cdata; struct nvme_ns_list nslist; char name[64]; uint32_t nsid; @@ -202,25 +205,34 @@ scan_controller(int ctrlr) } else if (ret != 0) return (false); - if (!print_controller_info(name, fd)) { + if (!print_controller_info(name, fd, &cdata)) { close(fd); return (true); } - nsid = 0; - for (;;) { - if (read_active_namespaces(fd, nsid, &nslist) != 0) - break; - for (u_int i = 0; i < nitems(nslist.ns); i++) { - nsid = nslist.ns[i]; - if (nsid == 0) { + /* + * Active Namespace ID List (CNS=2) was introduced in NVMe 1.1. + * The cdata.ver field was added in NVMe 1.2; for older devices it + * is reported as 0. Use CNS=2 only when we know the device is at + * least NVMe 1.1, and fall back to iterating cdata.nn otherwise. + */ + if (cdata.ver == 0) { + for (nsid = 1; nsid <= cdata.nn; nsid++) + scan_namespace(fd, ctrlr, nsid); + } else { + nsid = 0; + for (;;) { + if (read_active_namespaces(fd, nsid, &nslist) != 0) break; + for (u_int i = 0; i < nitems(nslist.ns); i++) { + nsid = nslist.ns[i]; + if (nsid == 0) + break; + scan_namespace(fd, ctrlr, nsid); } - - scan_namespace(fd, ctrlr, nsid); + if (nsid == 0 || nsid >= NVME_GLOBAL_NAMESPACE_TAG - 1) + break; } - if (nsid == 0 || nsid >= NVME_GLOBAL_NAMESPACE_TAG - 1) - break; } close(fd);