diff options
author | Vasuki Manikarnike <vasuki.manikarnike@hpe.com> | 2024-09-25 21:00:10 -0700 |
---|---|---|
committer | Jim Harris <jim.harris@samsung.com> | 2024-10-01 13:33:50 +0000 |
commit | 081f43f2bb32b773c1c1eb5bb55708bb4386bca2 (patch) | |
tree | a9c90b569e9c61934c1cccdd4821439a7be1de41 | |
parent | daeaec816024719f6ed0d262615c598edfed0e3c (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.c | 5 |
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++; |