When a bdev is registered, it is examined by the bdev modules before the bdev register even is notified. Examination may be asychronous, e.g. when the bdev module has to perform I/O on the new bdev. This causes a race condition where the bdev might be destroyed while examination is not finished. Then, once all modules have signaled that examination is done, `bdev_register_finished` makes an invalid access to the freed bdev pointer. To fix this, defer the unregistration until the examine is completed by opening a descriptor on the bdev. Change-Id: I79a2faa96c1c893fc1cee645fbe31f689b03ea4a Signed-off-by: Nathan Claudel <nclaudel@kalray.eu> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13630 Community-CI: Mellanox Build Bot Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
bdev_internal.h | ||
bdev_rpc.c | ||
bdev_zone.c | ||
bdev.c | ||
Makefile | ||
part.c | ||
scsi_nvme.c | ||
spdk_bdev.map | ||
vtune.c |