From nobody Thu Jul 23 21:00:13 2026 X-Original-To: dev-commits-src-main@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 4h5k6560Nhz6mRVb for ; Thu, 23 Jul 2026 21:00:13 +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 4h5k6557N2z3x5D for ; Thu, 23 Jul 2026 21:00:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784840413; 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=oZY0ltSyIk1iPbO4H2vXTp+G5gl9zhki0qAlDQA9545nn6+FEu9J9XRKqb5rbnw1fIjhY1 vH/VY2naR+pWntrhpT8ABnlY1NJHhkndNbFWiBG3G5hOzHw3xwrOfz+nsqb58LUSr86ixE Rv5fM4Je/CI5Oj50E2nvVVB3Cf5PwWV9FFQ4LnKRBE2EAOBBoOs1/Bo+lWCBW1doS+16nP I7OK9nAacKld0cO2uNOzC4OS4a9YDf7fduP3Pg61tpQrFnWe7i6Q6LY9yz9jQ79HkCvpmL c4WcnS79KCYJ681ZbnS52s28ufmvDP+woFFMyK7lDdHlAZmCnWrbusQz/QWK5g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784840413; a=rsa-sha256; cv=none; b=l5PeVaCDGWAScAUKamSNUJoaCvkX9eFVpavIyNF5lzUkj9gaDB80FMAhRhVbpS21koUtst j/2YV/s0fex9Jo+inJ6rvreneNtUMrNikrpSFpBozoQloxtQXa5TZBLKVqVLkvziIAJCi2 mmj187NF/AkR48rBeU2BKiVtHocTP8J37ciZAruKtiQbOByxR6L8YayDikLr4z3xwkfJnf 3lA2fMvvjxiCeNjQYHRmqaUwscHjcuSqpydyODkyN3SMxMaHlaFzRwDFKr+Xx9ojdwuOh7 sBVdjb1u2jWoHc0duYxUeoKeFnJYGcqjom3cMvX3LYlerQJ1AD8ZtFtQZD6pew== 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=1784840413; 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=ZFn+85b+I+LRnbfDelg04nuIq0GCT4yQJXgmBBo9jZ4jcPUZm4+K7wqJ08zJNyqCaR0F97 dLPgnvL8HJUwT+vgB3heFeY+TLTG6rYvcwCDlzQKKMGXmzjGIQAAeCn8fB86HxgCIPxt86 SA/oM8u/+FOyyRDCs0bCtSHOvguNTWhZo9pGhDUbeV+QfCjSlkGDktBtJe+cyKwMzfwlvr 0kBYXtrCDHX57bZSFRPDMdvUe66x530Tol+qM5Q33PjJ72cOW36WVx3pEbLGixKFH2DWrl Ce6FtbQKA7fnD9RkFgJ9j8WcUeqYCz2Ne+XZ0CjcycgVrM//OALxf9KKhpJbjQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h5k6548Zfz5mg for ; Thu, 23 Jul 2026 21:00:13 +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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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);