bdev/nvme: Refactor code to create a controller
This new function will get used from elsewhere. Change-Id: I53d3fa1e7eb9ab322a794dd2728aba287017b36a Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/415541 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
cd82151eba
commit
c5b861fcec
@ -850,14 +850,62 @@ timeout_cb(void *cb_arg, struct spdk_nvme_ctrlr *ctrlr,
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
create_ctrlr(struct spdk_nvme_ctrlr *ctrlr,
|
||||
char *name,
|
||||
const struct spdk_nvme_transport_id *trid)
|
||||
{
|
||||
struct nvme_ctrlr *nvme_ctrlr;
|
||||
|
||||
nvme_ctrlr = calloc(1, sizeof(*nvme_ctrlr));
|
||||
if (nvme_ctrlr == NULL) {
|
||||
SPDK_ERRLOG("Failed to allocate device struct\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
nvme_ctrlr->num_ns = spdk_nvme_ctrlr_get_num_ns(ctrlr);
|
||||
nvme_ctrlr->bdevs = calloc(nvme_ctrlr->num_ns, sizeof(struct nvme_bdev));
|
||||
if (!nvme_ctrlr->bdevs) {
|
||||
SPDK_ERRLOG("Failed to allocate block devices struct\n");
|
||||
free(nvme_ctrlr);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
nvme_ctrlr->adminq_timer_poller = NULL;
|
||||
nvme_ctrlr->ctrlr = ctrlr;
|
||||
nvme_ctrlr->ref = 0;
|
||||
nvme_ctrlr->trid = *trid;
|
||||
nvme_ctrlr->name = name;
|
||||
|
||||
spdk_io_device_register(ctrlr, bdev_nvme_create_cb, bdev_nvme_destroy_cb,
|
||||
sizeof(struct nvme_io_channel));
|
||||
|
||||
if (nvme_ctrlr_create_bdevs(nvme_ctrlr) != 0) {
|
||||
spdk_io_device_unregister(ctrlr, NULL);
|
||||
free(nvme_ctrlr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
nvme_ctrlr->adminq_timer_poller = spdk_poller_register(bdev_nvme_poll_adminq, ctrlr,
|
||||
g_nvme_adminq_poll_timeout_us);
|
||||
|
||||
TAILQ_INSERT_TAIL(&g_nvme_ctrlrs, nvme_ctrlr, tailq);
|
||||
|
||||
if (g_action_on_timeout != TIMEOUT_ACTION_NONE) {
|
||||
spdk_nvme_ctrlr_register_timeout_callback(ctrlr, g_timeout,
|
||||
timeout_cb, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_ctrlr_opts *opts)
|
||||
{
|
||||
struct nvme_ctrlr *nvme_ctrlr;
|
||||
struct nvme_probe_ctx *ctx = cb_ctx;
|
||||
char *name = NULL;
|
||||
size_t i;
|
||||
int rc;
|
||||
|
||||
if (ctx) {
|
||||
for (i = 0; i < ctx->count; i++) {
|
||||
@ -876,46 +924,11 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
||||
|
||||
SPDK_DEBUGLOG(SPDK_LOG_BDEV_NVME, "Attached to %s (%s)\n", trid->traddr, name);
|
||||
|
||||
nvme_ctrlr = calloc(1, sizeof(*nvme_ctrlr));
|
||||
if (nvme_ctrlr == NULL) {
|
||||
SPDK_ERRLOG("Failed to allocate device struct\n");
|
||||
free((void *)name);
|
||||
rc = create_ctrlr(ctrlr, name, trid);
|
||||
if (rc) {
|
||||
free(name);
|
||||
return;
|
||||
}
|
||||
nvme_ctrlr->num_ns = spdk_nvme_ctrlr_get_num_ns(ctrlr);
|
||||
nvme_ctrlr->bdevs = calloc(nvme_ctrlr->num_ns, sizeof(struct nvme_bdev));
|
||||
if (!nvme_ctrlr->bdevs) {
|
||||
SPDK_ERRLOG("Failed to allocate block devices struct\n");
|
||||
free(nvme_ctrlr);
|
||||
free((void *)name);
|
||||
return;
|
||||
}
|
||||
|
||||
nvme_ctrlr->adminq_timer_poller = NULL;
|
||||
nvme_ctrlr->ctrlr = ctrlr;
|
||||
nvme_ctrlr->ref = 0;
|
||||
nvme_ctrlr->trid = *trid;
|
||||
nvme_ctrlr->name = name;
|
||||
|
||||
spdk_io_device_register(ctrlr, bdev_nvme_create_cb, bdev_nvme_destroy_cb,
|
||||
sizeof(struct nvme_io_channel));
|
||||
|
||||
if (nvme_ctrlr_create_bdevs(nvme_ctrlr) != 0) {
|
||||
spdk_io_device_unregister(ctrlr, NULL);
|
||||
free(nvme_ctrlr->name);
|
||||
free(nvme_ctrlr);
|
||||
return;
|
||||
}
|
||||
|
||||
nvme_ctrlr->adminq_timer_poller = spdk_poller_register(bdev_nvme_poll_adminq, ctrlr,
|
||||
g_nvme_adminq_poll_timeout_us);
|
||||
|
||||
TAILQ_INSERT_TAIL(&g_nvme_ctrlrs, nvme_ctrlr, tailq);
|
||||
|
||||
if (g_action_on_timeout != TIMEOUT_ACTION_NONE) {
|
||||
spdk_nvme_ctrlr_register_timeout_callback(ctrlr, g_timeout,
|
||||
timeout_cb, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user