From 518d28dba92fdef225b490508bccd6ef8ce09ab7 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Fri, 23 Apr 2021 22:53:38 +0800 Subject: [PATCH] scsi/bdev: free bdev_io when there are split requests Only the last bdev_io can be freed without this fix. Change-Id: I0d05b5d89e38ef60872ebc0f23aaed0c622593c4 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7571 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Reviewed-by: --- lib/scsi/scsi_bdev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index ba890af74..127391eca 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1397,13 +1397,13 @@ bdev_scsi_task_complete_unmap_cmd(struct spdk_bdev_io *bdev_io, bool success, ctx->count--; - task->bdev_io = bdev_io; - if (task->status == SPDK_SCSI_STATUS_GOOD) { spdk_bdev_io_get_scsi_status(bdev_io, &sc, &sk, &asc, &ascq); spdk_scsi_task_set_status(task, sc, sk, asc, ascq); } + spdk_bdev_free_io(bdev_io); + if (ctx->count == 0) { scsi_lun_complete_task(task->lun, task); free(ctx);