numam-spdk/lib/bdev
Dariusz Stojaczyk 583a24a489 bdev: share nomem_io data between bdevs built on the same device
When there are two bdevs built on the same io_device,
it is possible that one bdev entirely saturates
underlying queue, not letting the second bdev issue
a single I/O. The second bdev will silently fail any
subsequent I/O and append it to the nomem_io list.
However, since we resend I/O only from I/O completion
callback and there's no outstanding I/O for that bdev
(io_outstanding==0), the I/O will never be resent.
It'll be stuck in nomem_io forever.

This patch makes nomem_io list to be shared between
bdevs built on the same device. It is now possible
that I/O completion callback from one bdev will retry
sending I/O from other bdev.

The shared bdev data is based on thread-local
bdev_mgmt_channel, so doesn't need any external
synchronization.

Change-Id: Ia5ac3a1627ce3de4087e43907c329aa7d07ed7c7
Signed-off-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/394658
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ziye Yang <optimistyzy@gmail.com>
2018-01-18 00:29:46 -05:00
..
aio util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
error bdev/error: add bdev_part hotremove callback 2018-01-03 12:11:26 -05:00
gpt build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
lvol util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
malloc build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
null build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
nvme build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
pmem util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
rbd bdev: unregister all bdevs in spdk_bdev_finish() 2017-12-21 13:29:29 -05:00
rpc bdev: Return aliases list through get_bdevs 2018-01-04 13:15:09 -05:00
split build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
virtio virtio: add opaque ctx param to PCI enumerate callback 2018-01-16 19:13:32 -05:00
bdev.c bdev: share nomem_io data between bdevs built on the same device 2018-01-18 00:29:46 -05:00
Makefile build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
scsi_nvme.c nvme_spec: remove SGL Sub Type Invalid status code 2017-09-22 17:11:53 -04:00
vtune.c bdev: #include VTune file to control warnings 2017-06-08 12:44:25 -04:00