db8bd99588
Add an new API spdk_bdev_part_base_construct_ext() to pass not bdev but bdev_name to fix the race condition due to the time gap between spdk_bdev_get_by_name() and spdk_bdev_open(). A pointer to a bdev is valid only while the bdev is opened. In the new API, spdk_bdev_get_by_name() is included in spdk_bdev_part_base_construct_ext() and the caller has to know if the bdev exists or not. Hence spdk_bdev_part_base_construct_ext() returns return code and returns the created part object by the double pointer. Another critical change is that base is just freed if spdk_bdev_open_ext() failed with -ENODEV. The reason is that if we call spdk_bdev_part_base_free() for that case, the configuration is removed by the registered callback and so bdev_examine() will not work. The following patches will replace spdk_bdev_part_base_construct() by spdk_bdev_part_base_construct_ext() for the corresponding bdev modules. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I2db027a159559c403cdfbd71800afba590b0f328 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4576 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> |
||
---|---|---|
.. | ||
bdev_internal.h | ||
bdev_rpc.c | ||
bdev_zone.c | ||
bdev.c | ||
Makefile | ||
part.c | ||
scsi_nvme.c | ||
spdk_bdev.map | ||
vtune.c |