Spdk/lib/bdev
Changpeng Liu 5d718951a6 bdev: split requests first if the request has data buffer
There is one existing example usage case to describe the issue:
Users(e.g. Vhost-blk target with Windows Guest) call spdk_bdev_readv_blocks()
to submit a 128KiB length data READ request, and the data buffer
provides by vhost isn't aligned, but the backend block device
requires aligned data buffer, so existing function call trace:
spdk_bdev_readv_blocks()-->
    spdk_bdev_io_submit()-->
    spdk_bdev_io_get_buf()
spdk_bdev_io_get_buf() will allocate buffer from large data
buffer pool for 128KiB length, of course, it will return error
with existing logic.

So here, no matter what the data length is, we can go through
the split process first for both READ and WRITE.

However, there is one scenario that for iSCSI READ request,
the iSCSI layer will not allocate data buffer for the request,
so for this case if the IO boundary is required we should keep
the logic as before.

Change-Id: I67661f5fa4c3c7c561b45c86146759aa3477adbf
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453133
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
2019-06-24 04:51:46 +00:00
..
aio bdev/aio: An error code can be returned via the rpc interface. 2019-05-22 16:12:40 +00:00
compress bdev/compress: add 2 recommended flags to the comp operation 2019-06-21 08:20:01 +00:00
crypto bdev/crypto: cleanup the vbdev_crypto_examine 2019-05-02 09:10:38 +00:00
delay bdev: Create a new delay vbdev module 2019-05-31 14:37:26 +00:00
error bdev: make spdk_bdev_register_module_xxx function names predictable 2019-02-11 23:56:53 +00:00
gpt bdev: switch to spdk_*malloc(). 2019-04-09 06:30:42 +00:00
iscsi bdev/iscsi: fix iscsi bdev wrong lun id 2019-04-01 01:16:51 +00:00
lvol blobstore: Make possible to remove snapshot if there is only one clone 2019-06-18 13:19:32 +00:00
malloc bdev: Make malloc bdev use the new zero copy mechanism 2019-04-23 18:38:39 +00:00
null bdev/null : Clean up module resources that failed to initialize. 2019-04-24 22:25:47 +00:00
nvme dif: Add data offset to DIF context separately from start block address 2019-06-11 18:53:58 +00:00
ocf ocf: Improve handling of partial IOs 2019-06-07 18:18:42 +00:00
passthru bdev/passthru: add error check in get buffer read callback 2019-05-20 17:02:27 +00:00
pmem bdev: process failure of spdk_bdev_io_get_buf_cb in each bdev module 2019-02-27 07:28:15 +00:00
raid bdev/raid: add additional NULL check for data iovec 2019-06-07 05:05:22 +00:00
rbd bdev: process failure of spdk_bdev_io_get_buf_cb in each bdev module 2019-02-27 07:28:15 +00:00
rpc bdev: make bdevs array for get_bdevs_iostat RPC 2019-05-08 22:43:00 +00:00
split misc/rpc: rename some C functions of rpc methods 2019-05-07 05:30:16 +00:00
uring bdev/uring: adjust to the latest io_uring API 2019-06-07 18:43:07 +00:00
virtio env: Add free_space parameter to spdk_ring_enqueue 2019-06-05 05:23:58 +00:00
bdev.c bdev: split requests first if the request has data buffer 2019-06-24 04:51:46 +00:00
Makefile bdev: add uring in bdev Makefile 2019-06-11 00:26:48 +00:00
part.c bdev/part: separate buffer metadata support 2019-06-19 03:43:11 +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 mk: don't use '-include spdk/config.h' 2018-10-02 23:13:32 +00:00