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:
parent
a1aede0998
commit
4c0a39b1d4
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user