From 970e2e2e1848ca77a64dea270734c1a05e12a125 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Mon, 12 Jul 2021 12:15:12 +0200 Subject: [PATCH] nvme: free completed aers on shutdown If there are completed asynchronous events that have not been notified to the user, free them during controller shutdown to avoid memory leaks. It can happen if an event completes before user has a chance to execute `spdk_nvme_ctrlr_process_admin_completions()`. Fixes #2032. Signed-off-by: Konrad Sztyber Change-Id: Ie608bf9100342f8dfd709e070326f67335d27fed Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8740 Tested-by: SPDK CI Jenkins Reviewed-by: GangCao Reviewed-by: Reviewed-by: Shuhei Matsumoto Reviewed-by: Krzysztof Karas Reviewed-by: Tomasz Zawadzki Reviewed-by: Aleksey Marchuk Community-CI: Broadcom CI Community-CI: Mellanox Build Bot --- lib/nvme/nvme_ctrlr.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 9e34042ad..d1675e28d 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -3542,6 +3542,7 @@ nvme_ctrlr_destruct_async(struct spdk_nvme_ctrlr *ctrlr, struct nvme_ctrlr_detach_ctx *ctx) { struct spdk_nvme_qpair *qpair, *tmp; + struct spdk_nvme_ctrlr_aer_completion_list *event; NVME_CTRLR_DEBUGLOG(ctrlr, "Prepare to destruct SSD\n"); @@ -3552,6 +3553,12 @@ nvme_ctrlr_destruct_async(struct spdk_nvme_ctrlr *ctrlr, nvme_ctrlr_abort_queued_aborts(ctrlr); nvme_transport_admin_qpair_abort_aers(ctrlr->adminq); + while (!STAILQ_EMPTY(&ctrlr->async_events)) { + event = STAILQ_FIRST(&ctrlr->async_events); + STAILQ_REMOVE_HEAD(&ctrlr->async_events, link); + free(event); + } + TAILQ_FOREACH_SAFE(qpair, &ctrlr->active_io_qpairs, tailq, tmp) { spdk_nvme_ctrlr_free_io_qpair(qpair); }