ublk: fix error case in ublk_start_disk

Obtained resource can be directly released in error
handling of ublk_start_disk.
Fix the improper usage of _ublk_try_close_dev to release
resource in ublk_start_disk.

Change-Id: I291bbfb179b9df4deb8f3d346b2d660e6d17fdc1
Signed-off-by: Liu Xiaodong <xiaodong.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16459
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Liu Xiaodong 2023-01-25 04:05:48 -05:00 committed by Jim Harris
parent a1aede0998
commit 4c0a39b1d4

View File

@ -1254,6 +1254,7 @@ ublk_ios_fini(struct spdk_ublk_dev *ublk)
}
}
free(q->ios);
q->ios = NULL;
}
spdk_mempool_free(ublk->io_buf_pool);
@ -1378,13 +1379,16 @@ ublk_start_disk(const char *bdev_name, uint32_t ublk_id,
/* Add ublk_dev to the end of disk list */
rc = ublk_dev_list_register(ublk);
if (rc != 0) {
goto err;
spdk_bdev_close(ublk->bdev_desc);
free(ublk);
return rc;
}
ublk_info_param_init(ublk);
rc = ublk_ios_init(ublk);
if (rc != 0) {
goto err;
ublk_delete_dev(ublk);
return rc;
}
SPDK_INFOLOG(ublk, "Enabling kernel access to bdev %s via ublk %d\n",
@ -1392,13 +1396,9 @@ ublk_start_disk(const char *bdev_name, uint32_t ublk_id,
rc = ublk_ctrl_cmd(ublk, UBLK_CMD_ADD_DEV);
if (rc < 0) {
SPDK_ERRLOG("UBLK can't add dev %d, rc %s\n", ublk->ublk_id, spdk_strerror(-rc));
goto err;
ublk_delete_dev(ublk);
}
return 0;
err:
_ublk_try_close_dev(ublk);
return rc;
}