diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 9879b54d5..0d452bcd0 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -548,6 +548,7 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) status = malloc(sizeof(*status)); if (!status) { SPDK_ERRLOG("Failed to allocate status tracker\n"); + spdk_free(log_page_directory); return -ENOMEM; } @@ -1312,6 +1313,7 @@ nvme_ctrlr_identify_active_ns(struct spdk_nvme_ctrlr *ctrlr) status = malloc(sizeof(*status)); if (!status) { SPDK_ERRLOG("Failed to allocate status tracker\n"); + spdk_free(new_ns_list); return -ENOMEM; } @@ -2989,7 +2991,7 @@ spdk_nvme_ctrlr_create_ns(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ns_dat status = malloc(sizeof(*status)); if (!status) { SPDK_ERRLOG("Failed to allocate status tracker\n"); - return -ENOMEM; + return 0; } res = nvme_ctrlr_cmd_create_ns(ctrlr, payload, nvme_completion_poll_cb, status); diff --git a/lib/nvme/nvme_fabric.c b/lib/nvme/nvme_fabric.c index cc6afcd3f..0ec30ba5c 100644 --- a/lib/nvme/nvme_fabric.c +++ b/lib/nvme/nvme_fabric.c @@ -297,6 +297,7 @@ nvme_fabric_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx, status = malloc(sizeof(*status)); if (!status) { SPDK_ERRLOG("Failed to allocate status tracker\n"); + nvme_ctrlr_destruct(discovery_ctrlr); return -ENOMEM; } @@ -306,12 +307,14 @@ nvme_fabric_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx, nvme_completion_poll_cb, status); if (rc != 0) { SPDK_ERRLOG("Failed to identify cdata\n"); + nvme_ctrlr_destruct(discovery_ctrlr); free(status); return rc; } if (spdk_nvme_wait_for_completion(discovery_ctrlr->adminq, status)) { SPDK_ERRLOG("nvme_identify_controller failed!\n"); + nvme_ctrlr_destruct(discovery_ctrlr); if (!status->timed_out) { free(status); } @@ -413,6 +416,7 @@ nvme_fabric_qpair_connect(struct spdk_nvme_qpair *qpair, uint32_t num_entries) status = malloc(sizeof(*status)); if (!status) { SPDK_ERRLOG("Failed to allocate status tracker\n"); + spdk_free(nvmf_data); return -ENOMEM; }