Spdk/lib
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
..
bdev bdev: share nomem_io data between bdevs built on the same device 2018-01-18 00:29:46 -05:00
blob blob: add spdk_bs_batch/sequence_read/readv_bs_dev functions 2018-01-17 07:58:57 -05:00
blobfs blobfs: return the correct file length. 2018-01-11 15:50:01 -05:00
conf conf: Remove use of perror() for strdup() failure 2017-12-15 16:13:27 -05:00
copy build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
cunit include: Move the remainder of the code base to stdinc.h 2017-05-08 13:20:36 -07:00
env_dpdk lib: Return instead of exit/abort in env_dpdk 2018-01-10 16:20:15 -05:00
event lib: Return instead of exit/abort in env_dpdk 2018-01-10 16:20:15 -05:00
ioat build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
iscsi iscsi/rpc: Configure Header/Data digest through JSON-RPC 2018-01-17 12:41:29 -05:00
json json_internal.h: rename to utf.h and place in spdk_internal 2018-01-11 10:57:38 -05:00
jsonrpc util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
log log: rename SPDK_TRACE_* to SPDK_LOG_* 2017-12-07 12:23:19 -05:00
lvol lvol: restore the channel operation number into 512 2018-01-18 00:29:19 -05:00
nbd nbd: improve nbd to handle overlapped I/O 2018-01-16 09:59:21 -05:00
net util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
nvme nvme/pcie: limit max completions based on queue size 2018-01-05 12:45:28 -05:00
nvmf nvmf: Remove master_thread concept 2018-01-17 17:28:13 -05:00
rocksdb env_spdk: make sure the Randomaccessfile opened as rocksdb posix env. 2018-01-12 12:57:23 -05:00
rpc build: remove $(ENV_CFLAGS) where not necessary 2018-01-03 12:05:59 -05:00
scsi iscsi: Add LUN to an existing target (not runtime) 2018-01-17 12:41:29 -05:00
trace util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
ut_mock test/mock: add pthread_self 2017-09-19 17:15:15 -04:00
util util: make spdk_io_channel_get_ctx() inline 2018-01-09 12:46:35 -05:00
vhost scsi: remove lun name 2018-01-11 18:37:34 -05:00
virtio virtio: add opaque ctx param to PCI enumerate callback 2018-01-16 19:13:32 -05:00
Makefile virtio: add new library virtio 2017-12-26 13:03:29 -05:00