Spdk/lib/bdev
Dariusz Stojaczyk 32f86a5f34 bdev: don't call recursively desc->remove_cb on bdev removal
When device has more than one open descriptor, remove_cbs of particular
descriptors could be called more than once.

Consider the following scenario:
bdev X with 2 open descriptors A and B.
X is removed (hotremoved for instance)
bdev_unregister(X) is called
  * bdev->status = REMOVING
  * A->remove_cb is called
    * some poller is started
  * B->remove_cb is called
    * another poller started

* poller from A->remove_cb finishes it's work and closes the desc:
  * bdev_close(A)
    * A is removed from bdev->open_descs list
    * bdev->status is REMOVING, so bdev_unregister(X) is called again!
      * B->remove cb is called again!
        * another poller starts? segfault?

Fixes: 57d174ff67 ("bdev: add spdk_bdev_open/close")

Change-Id: I0a898ec0aee521d0b2a1168fe7d469cc41a8ef4f
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/369727
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2017-07-17 19:06:42 -04:00
..
aio bdev: remove differentiation between bdev and vbdev modules 2017-07-14 13:31:30 -04:00
error bdev: pass descriptors for I/O operations 2017-07-14 13:31:30 -04:00
gpt gpt: fix naming of CRC32 polynomial #define 2017-07-17 17:58:19 -04:00
malloc bdev: remove differentiation between bdev and vbdev modules 2017-07-14 13:31:30 -04:00
null bdev: remove differentiation between bdev and vbdev modules 2017-07-14 13:31:30 -04:00
nvme bdev: remove differentiation between bdev and vbdev modules 2017-07-14 13:31:30 -04:00
rbd bdev: remove differentiation between bdev and vbdev modules 2017-07-14 13:31:30 -04:00
rpc bdev: add vbdev claim/release semantics 2017-07-14 13:31:30 -04:00
split bdev: pass descriptors for I/O operations 2017-07-14 13:31:30 -04:00
bdev.c bdev: don't call recursively desc->remove_cb on bdev removal 2017-07-17 19:06:42 -04:00
Makefile GPT: add GPT bdev support 2017-07-06 13:44:37 -04:00
scsi_nvme.c bdev: add API to translate to SCSI status 2017-05-04 09:11:42 -07:00
vtune.c bdev: #include VTune file to control warnings 2017-06-08 12:44:25 -04:00