summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasuki Manikarnike <vasuki.manikarnike@hpe.com>2024-09-25 21:00:10 -0700
committerJim Harris <jim.harris@samsung.com>2024-10-01 13:33:50 +0000
commit081f43f2bb32b773c1c1eb5bb55708bb4386bca2 (patch)
treea9c90b569e9c61934c1cccdd4821439a7be1de41
parentdaeaec816024719f6ed0d262615c598edfed0e3c (diff)
lib/nvmf: Fix memory leak in nvmf_bdev_ctrlr_unmap
When max_discard_size_kib is set on subsystem, dsm/unmap commands are failed back if any dsm range exceeds the maximum discard size supported. This leaks memory allocated for unmap_ctx. Breaking out of the loop instead of returning early fixes the memory leak. Fixes #3539 Change-Id: I7bbb1f581e48c72947dbbbc66f5bcf1320ab69d4 Signed-off-by: Vasuki Manikarnike <vasuki.manikarnike@hpe.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25042 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <jim.harris@samsung.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
-rw-r--r--lib/nvmf/ctrlr_bdev.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/nvmf/ctrlr_bdev.c b/lib/nvmf/ctrlr_bdev.c
index 33b376c70..75febd11c 100644
--- a/lib/nvmf/ctrlr_bdev.c
+++ b/lib/nvmf/ctrlr_bdev.c
@@ -715,10 +715,11 @@ nvmf_bdev_ctrlr_unmap(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
lba = dsm_range.starting_lba;
lba_count = dsm_range.length;
if (max_discard_size > 0 && lba_count > (max_discard_size << 10) / block_size) {
- SPDK_ERRLOG("invalid unmap size, should not exceed %" PRIu64 "Kib\n", max_discard_size);
+ SPDK_ERRLOG("invalid unmap size %" PRIu32 " blocks, should not exceed %" PRIu64 " blocks\n",
+ lba_count, max_discard_size << 1);
response->status.sct = SPDK_NVME_SCT_GENERIC;
response->status.sc = SPDK_NVME_SC_INVALID_FIELD;
- return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
+ break;
}
unmap_ctx->count++;