Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Apr 2026 15:28:52 +0000
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: d37cbfe3ef55 - stable/15 - nvme: Abstract out function to obtain a disk ident string from cdata
Message-ID:  <69eb8c34.35f4e.1ebd07b7@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch stable/15 has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=d37cbfe3ef550aa36693d859bc4580891d16701a

commit d37cbfe3ef550aa36693d859bc4580891d16701a
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-11-17 18:21:39 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2026-04-24 15:26:37 +0000

    nvme: Abstract out function to obtain a disk ident string from cdata
    
    This will permit sharing the code with nvmf(4).
    
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D53338
    
    (cherry picked from commit 8d2a50bb38051fefeb1427fdbfd249f2829310d8)
---
 sys/dev/nvme/nvme.h         | 19 +++++++++++++++++++
 sys/dev/nvme/nvme_ctrlr.c   | 21 +--------------------
 sys/dev/nvme/nvme_ns.c      |  2 +-
 sys/dev/nvme/nvme_private.h |  1 -
 4 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 8e69c0ffe339..85b9658b755a 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -1912,6 +1912,7 @@ void	nvme_sc_sbuf(const struct nvme_completion *cpl, struct sbuf *sbuf);
 void	nvme_strvis(uint8_t *dst, const uint8_t *src, int dstlen, int srclen);
 
 #ifdef _KERNEL
+#include <sys/disk.h>
 
 struct bio;
 struct thread;
@@ -2000,6 +2001,24 @@ nvme_ctrlr_has_dataset_mgmt(const struct nvme_controller_data *cd)
 	return (NVMEV(NVME_CTRLR_DATA_ONCS_DSM, cd->oncs) != 0);
 }
 
+/*
+ * Copy the NVME device's serial number to the provided buffer, which must be
+ * at least DISK_IDENT_SIZE bytes large.
+ */
+static inline void
+nvme_cdata_get_disk_ident(const struct nvme_controller_data *cdata, uint8_t *sn)
+{
+	_Static_assert(NVME_SERIAL_NUMBER_LENGTH < DISK_IDENT_SIZE,
+		"NVME serial number too big for disk ident");
+
+	memmove(sn, cdata->sn, NVME_SERIAL_NUMBER_LENGTH);
+	sn[NVME_SERIAL_NUMBER_LENGTH] = '\0';
+	for (int i = 0; sn[i] != '\0'; i++) {
+		if (sn[i] < 0x20 || sn[i] >= 0x80)
+			sn[i] = ' ';
+	}
+}
+
 /* Namespace helper functions */
 uint32_t	nvme_ns_get_max_io_xfer_size(struct nvme_namespace *ns);
 uint32_t	nvme_ns_get_sector_size(struct nvme_namespace *ns);
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index 12b39ce3b3ac..16e67b127c9c 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -33,7 +33,6 @@
 #include <sys/buf.h>
 #include <sys/bus.h>
 #include <sys/conf.h>
-#include <sys/disk.h>
 #include <sys/ioccom.h>
 #include <sys/proc.h>
 #include <sys/smp.h>
@@ -1264,24 +1263,6 @@ nvme_ctrlr_poll(struct nvme_controller *ctrlr)
 			nvme_qpair_process_completions(&ctrlr->ioq[i]);
 }
 
-/*
- * Copy the NVME device's serial number to the provided buffer, which must be
- * at least DISK_IDENT_SIZE bytes large.
- */
-void
-nvme_ctrlr_get_ident(const struct nvme_controller *ctrlr, uint8_t *sn)
-{
-	_Static_assert(NVME_SERIAL_NUMBER_LENGTH < DISK_IDENT_SIZE,
-		"NVME serial number too big for disk ident");
-
-	memmove(sn, ctrlr->cdata.sn, NVME_SERIAL_NUMBER_LENGTH);
-	sn[NVME_SERIAL_NUMBER_LENGTH] = '\0';
-	for (int i = 0; sn[i] != '\0'; i++) {
-		if (sn[i] < 0x20 || sn[i] >= 0x80)
-			sn[i] = ' ';
-	}
-}
-
 /*
  * Poll the single-vector interrupt case: num_io_queues will be 1 and
  * there's only a single vector. While we're polling, we mask further
@@ -1534,7 +1515,7 @@ nvme_ctrlr_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag,
 		break;
 	case DIOCGIDENT: {
 		uint8_t *sn = arg;
-		nvme_ctrlr_get_ident(ctrlr, sn);
+		nvme_cdata_get_disk_ident(&ctrlr->cdata, sn);
 		break;
 	}
 	/* Linux Compatible (see nvme_linux.h) */
diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c
index f50b8993a362..170fab34ad81 100644
--- a/sys/dev/nvme/nvme_ns.c
+++ b/sys/dev/nvme/nvme_ns.c
@@ -90,7 +90,7 @@ nvme_ns_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int flag,
 	}
 	case DIOCGIDENT: {
 		uint8_t *sn = arg;
-		nvme_ctrlr_get_ident(ctrlr, sn);
+		nvme_cdata_get_disk_ident(&ctrlr->cdata, sn);
 		break;
 	}
 	case DIOCGMEDIASIZE:
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index d499c6f34ca8..52f84f899c6e 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -560,7 +560,6 @@ void	nvme_notify_new_controller(struct nvme_controller *ctrlr);
 void	nvme_notify_ns(struct nvme_controller *ctrlr, int nsid);
 
 void	nvme_ctrlr_shared_handler(void *arg);
-void	nvme_ctrlr_get_ident(const struct nvme_controller *ctrlr, uint8_t *sn);
 void	nvme_ctrlr_poll(struct nvme_controller *ctrlr);
 
 int	nvme_ctrlr_suspend(struct nvme_controller *ctrlr);


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69eb8c34.35f4e.1ebd07b7>