Spdk/module/bdev
Jim Harris abb4baef2d bdev/rbd: make destruct path asynchronous
When a bdev is being unregistered, after all
channels have been closed, the bdev layer calls
the module's destruct callback for the bdev before
calling the bdev unregister callback.

For the rbd module, the destruct callback is
bdev_rbd_destruct.  This callback unregisters the
rbd io_device which is an asynchronous operation.
We need to return >0 from bdev_rbd_destruct to
inform the bdev layer that this is an asynchronous
operation, so that it does not immediately call
the bdev unregister callback.  Once the rbd io_device
is unregistered, we can call spdk_bdev_destruct_done()
which will trigger the bdev layer to finally call
the bdev unregister callback.

Without this fix, deleting an rbd bdev would
complete before the backing cluster reference
had been released.  This meant that even
if you had deleted all rbd bdevs, there might still
be cluster references in place for a short period of
time.  It's better to wait to complete the delete
operation until the cluster reference has been
released to avoid this issue (which this patch
now does).

Fixes issue #2069.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I8ac156c89d3e235a95ef196308cc349e6078bfd7
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9115
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Ziye Yang <ziye.yang@intel.com>
2021-08-25 07:26:46 +00:00
..
aio bdev/aio: Remove the unused link entry in bdev_aio_task 2021-08-02 09:04:46 +00:00
compress compress: Add RPC option to enable mlx5_pci PMD 2021-08-16 08:48:31 +00:00
crypto so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
delay bdev: Add API to get SPDK memory domains used by bdev 2021-08-20 07:26:10 +00:00
error bdev/error: properly initialize value of num for inject_error RPC 2021-04-15 21:41:05 +00:00
ftl so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
gpt lib/bdev: move to spdk_bdev_part_base_construct_ext() 2021-03-09 08:54:53 +00:00
iscsi bdev/iscsi: apply max_unmap and max_unmap_segments to bdev layer 2021-05-14 10:00:54 +00:00
lvol bdev/lvol: asserting lvol ptr before dereference 2021-08-24 07:18:54 +00:00
malloc bdev/malloc: check block size when creating a new block device 2021-03-01 12:07:09 +00:00
null lib/bdev: added spdk_bdev_module_fini_done() 2021-08-23 08:49:56 +00:00
nvme lib/bdev: added spdk_bdev_module_fini_done() 2021-08-23 08:49:56 +00:00
ocf bdev/ocf: Fix devices block size mismatch 2021-08-20 07:27:43 +00:00
passthru bdev: Add API to get SPDK memory domains used by bdev 2021-08-20 07:26:10 +00:00
pmem lib/bdev: added spdk_bdev_module_fini_done() 2021-08-23 08:49:56 +00:00
raid bdev/raid: remove deprecated parameter strip_size 2021-03-29 07:41:09 +00:00
rbd bdev/rbd: make destruct path asynchronous 2021-08-25 07:26:46 +00:00
split splite/vbdev_split: Free base part bdev on the error path. 2021-03-02 08:02:58 +00:00
uring so_ver: increase all major versions 2021-02-05 14:43:47 +00:00
virtio lib/bdev: added spdk_bdev_module_fini_done() 2021-08-23 08:49:56 +00:00
zone_block bdev/zone_block: check for unmap support in zone reset 2021-08-12 12:57:24 +00:00
Makefile bdev: move bdev_rpc library contents 2020-09-25 11:43:42 +00:00