The branch main has been updated by jhb:

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

commit 8a082ca89fc007850b302f4eead2f9b6eb2ccbe0
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2024-06-05 19:52:24 +0000
Commit:     John Baldwin <j...@freebsd.org>
CommitDate: 2024-06-05 19:52:24 +0000

    nvmf: Factor out most of nvmf_rescan_ns into a helper routine
    
    This function accepts a namespace ID and associated namespace data
    from IDENTIFY and takes care of updating nvmeXnY and ndaZ.
    
    Reviewed by:    imp
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D45459
---
 sys/dev/nvmf/host/nvmf.c | 52 ++++++++++++++++++++++++++++--------------------
 1 file changed, 30 insertions(+), 22 deletions(-)

diff --git a/sys/dev/nvmf/host/nvmf.c b/sys/dev/nvmf/host/nvmf.c
index df07d70b6c86..086df5f637c9 100644
--- a/sys/dev/nvmf/host/nvmf.c
+++ b/sys/dev/nvmf/host/nvmf.c
@@ -733,12 +733,40 @@ nvmf_detach(device_t dev)
        return (0);
 }
 
+static void
+nvmf_rescan_ns_1(struct nvmf_softc *sc, uint32_t nsid,
+    const struct nvme_namespace_data *data)
+{
+       struct nvmf_namespace *ns;
+
+       /* XXX: Needs locking around sc->ns[]. */
+       ns = sc->ns[nsid - 1];
+       if (data->nsze == 0) {
+               /* XXX: Needs locking */
+               if (ns != NULL) {
+                       nvmf_destroy_ns(ns);
+                       sc->ns[nsid - 1] = NULL;
+               }
+       } else {
+               /* XXX: Needs locking */
+               if (ns == NULL) {
+                       sc->ns[nsid - 1] = nvmf_init_ns(sc, nsid, data);
+               } else {
+                       if (!nvmf_update_ns(ns, data)) {
+                               nvmf_destroy_ns(ns);
+                               sc->ns[nsid - 1] = NULL;
+                       }
+               }
+       }
+
+       nvmf_sim_rescan_ns(sc, nsid);
+}
+
 void
 nvmf_rescan_ns(struct nvmf_softc *sc, uint32_t nsid)
 {
        struct nvmf_completion_status status;
        struct nvme_namespace_data *data;
-       struct nvmf_namespace *ns;
 
        data = malloc(sizeof(*data), M_NVMF, M_WAITOK);
 
@@ -771,29 +799,9 @@ nvmf_rescan_ns(struct nvmf_softc *sc, uint32_t nsid)
 
        nvme_namespace_data_swapbytes(data);
 
-       /* XXX: Needs locking around sc->ns[]. */
-       ns = sc->ns[nsid - 1];
-       if (data->nsze == 0) {
-               /* XXX: Needs locking */
-               if (ns != NULL) {
-                       nvmf_destroy_ns(ns);
-                       sc->ns[nsid - 1] = NULL;
-               }
-       } else {
-               /* XXX: Needs locking */
-               if (ns == NULL) {
-                       sc->ns[nsid - 1] = nvmf_init_ns(sc, nsid, data);
-               } else {
-                       if (!nvmf_update_ns(ns, data)) {
-                               nvmf_destroy_ns(ns);
-                               sc->ns[nsid - 1] = NULL;
-                       }
-               }
-       }
+       nvmf_rescan_ns_1(sc, nsid, data);
 
        free(data, M_NVMF);
-
-       nvmf_sim_rescan_ns(sc, nsid);
 }
 
 int

Reply via email to