examples/nvme: fix reconnect memory leaks
1) In submit_single_io(), if an I/O fails to submit, we need to free the associated task structure, otherwise it gets leaked. 2) When draining I/O, just always check_io() instead of only doing it when current_queue_depth > 0. This is the simplest of ensuring that we cleanup the ns_ctx (including freeing the IO qpairs and the qpair pointer array) if the current_queue_depth is already 0 when starting to drain. Fixes issue #2995. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I53f336c6a11ff63782dc81c087a58feca0e8a5d7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17873 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
parent
711b9ca207
commit
35a3cfd51e
@ -411,6 +411,8 @@ submit_single_io(struct perf_task *task)
|
||||
|
||||
if (spdk_unlikely(rc != 0)) {
|
||||
fprintf(stderr, "starting I/O failed\n");
|
||||
spdk_dma_free(task->iov.iov_base);
|
||||
free(task);
|
||||
} else {
|
||||
ns_ctx->current_queue_depth++;
|
||||
}
|
||||
@ -537,7 +539,6 @@ work_fn(void *arg)
|
||||
ns_ctx->is_draining = true;
|
||||
}
|
||||
|
||||
if (ns_ctx->current_queue_depth > 0) {
|
||||
check_io(ns_ctx);
|
||||
if (ns_ctx->current_queue_depth == 0) {
|
||||
nvme_cleanup_ns_worker_ctx(ns_ctx);
|
||||
@ -545,7 +546,6 @@ work_fn(void *arg)
|
||||
unfinished_ns_ctx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (unfinished_ns_ctx > 0);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user