diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index da7d81b24..1aaad755c 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1030,6 +1030,17 @@ static void nvme_ctrlr_depopulate_namespace(struct nvme_bdev_ctrlr *ctrlr, struc g_depopulate_namespace_fn[ns->type](ns); } +void +nvme_ctrlr_populate_namespace_done(struct nvme_async_probe_ctx *ctx, + struct nvme_bdev_ns *ns, int rc) +{ + if (rc == 0) { + ns->populated = true; + } else { + memset(ns, 0, sizeof(*ns)); + } +} + static void nvme_ctrlr_populate_namespaces(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_async_probe_ctx *ctx) @@ -1055,11 +1066,7 @@ nvme_ctrlr_populate_namespaces(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, TAILQ_INIT(&ns->bdevs); rc = nvme_ctrlr_populate_namespace(nvme_bdev_ctrlr, ns, ctx); - if (rc == 0) { - ns->populated = true; - } else { - memset(ns, 0, sizeof(*ns)); - } + nvme_ctrlr_populate_namespace_done(ctx, ns, rc); } if (ns->populated && !spdk_nvme_ctrlr_is_active_ns(ctrlr, nsid)) { diff --git a/module/bdev/nvme/common.h b/module/bdev/nvme/common.h index 573492ecf..85e426f17 100644 --- a/module/bdev/nvme/common.h +++ b/module/bdev/nvme/common.h @@ -112,6 +112,9 @@ struct nvme_async_probe_ctx { void *cb_ctx; }; +void nvme_ctrlr_populate_namespace_done(struct nvme_async_probe_ctx *ctx, + struct nvme_bdev_ns *ns, int rc); + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr_get(const struct spdk_nvme_transport_id *trid); struct nvme_bdev_ctrlr *nvme_bdev_ctrlr_get_by_name(const char *name); struct nvme_bdev_ctrlr *nvme_bdev_first_ctrlr(void);