Spdk/lib/bdev
Jim Harris 9ddf643831 thread: don't immediately remove channel from list when put
When spdk_put_io_channel is called, if its the last reference,
we defer actual destruction of the channel, so that code
in the same context which may be referring to the channel
doesn't crash.

But it is possible that an io_channel for that same io_device
could be requested before the deferred message is processed.
This would result in a second io_channel being created for
that device on the same thread.

To avoid this case, don't immediately remove the channel from
the list when the last reference is put.  When the deferred
message is processed, if additional references were allocated
in the meantime, don't destroy the channel.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Change-Id: Idb8d4705fda0eb9c338e4960430e04edbe537e05
Reviewed-on: https://review.gerrithub.io/418878
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: GangCao <gang.cao@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
2018-07-17 01:28:16 +00:00
..
aio bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
error bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
gpt bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
iscsi bdev/iscsi: Add reset function for iscsi initiator 2018-07-12 20:28:57 +00:00
lvol bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
malloc rpc/bdev: construct RPC return a string instead array 2018-06-22 21:12:43 +00:00
null bdev: add delete_null_bdev call 2018-07-02 22:53:18 +00:00
nvme bdev/nvme: update NS bdevs after NS attribute notice event 2018-06-28 17:46:41 +00:00
passthru bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
pmem bdev: add delete_pmem_bdev call 2018-07-02 22:53:18 +00:00
raid bdev: add raid bdev module 2018-07-16 20:50:40 +00:00
rbd bdev/rbd: change the poller to timer poller 2018-07-03 16:40:18 +00:00
rpc bdev: add extra parameters to iostat rpc. 2018-07-12 23:27:27 +00:00
split bdev: split examine into two parts 2018-07-06 21:12:53 +00:00
virtio virtio: allow config read/write to fail 2018-07-05 20:47:38 +00:00
bdev.c thread: don't immediately remove channel from list when put 2018-07-17 01:28:16 +00:00
Makefile bdev: add raid bdev module 2018-07-16 20:50:40 +00:00
part.c bdev: remove public usage of bdev_part_base.ref 2018-07-05 19:12:53 +00:00
scsi_nvme.c bdev: move error union to internal spdk_bdev_io struct 2018-06-26 20:04:07 +00:00
vtune.c bdev: disable new GCC 7 warning in VTune code 2018-03-19 15:58:15 -04:00