Spdk/lib
Changpeng Liu efd7b514d4 bdev: rewind child offset to last block size aligned iov
Here is the an example to describe existing issue:

There is a Write request with 64KiB data length, and this IO is cross the IO
boundary.  We assume that the parent IO will have 2 children requests, one is
33KiB length, the other one is 31KiB.  Here is the view of parent iovs, the
first 33KiB length data has 33 iovs:

iov.[0].iov_length = 1024;
.
.
iov.[31].iov_length = 256;
iov.[32].iov_length = 768;
.
.
iov.[64].iov_length = 1024;

In function _spdk_bdev_io_split(), then you can see that for the 33KiB length
child request, exiting code will run out of child child_iov space and return
error due to last one data buffer is not block size aligned.

Here we can rewind the existing offset to last block size aligned buffer to
avoid the error case, for backend which need aligned data buffer such as
AIO backend, the request will go through spdk_bdev_io_get_buf() again to
do the data copy, otherwise for those backend devices such as NVMe with
hardware SGL support, 256 data segment is fine for them.

Change-Id: I96ebdf29829d86f9b38fab28a7406eedc9fa44ef
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453604
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-07-01 04:20:21 +00:00
..
bdev bdev: rewind child offset to last block size aligned iov 2019-07-01 04:20:21 +00:00
blob blobstore: Cleanup after power failure while creating snapshot 2019-06-26 08:00:14 +00:00
blobfs blobfs: make internal asynchronous APIs as public APIs 2019-06-28 09:50:50 +00:00
conf string: spdk_strtol to delegate additional error checking 2019-01-29 00:10:57 +00:00
copy misc/rpc: rename some C functions of rpc methods 2019-05-07 05:30:16 +00:00
env_dpdk lib/env_dpdk: Allow iterating over all detected PCI devices 2019-06-26 08:24:02 +00:00
event lib/event/subsystems: Added VMD dependency to bdev subsystem 2019-07-01 03:54:45 +00:00
ftl lib/ftl: Check if any additional relocation was added 2019-07-01 03:29:00 +00:00
ioat ioat: allocate device struct using regular calloc 2019-04-09 06:30:42 +00:00
iscsi iscsi: Fix the bug to add wrong size in _iscsi_sgl_append_with_md 2019-06-19 07:38:46 +00:00
json json_util: fix typo in debug message. 2019-05-31 14:39:53 +00:00
jsonrpc lib/jsonrpc: Fix memory leaks about connection request. 2019-06-26 06:26:50 +00:00
log log: passing user-defined log 2019-06-18 03:56:50 +00:00
lvol lvol: Fix for lvol failed deletion flow 2019-04-02 19:23:22 +00:00
nbd nbd: optional nbd_device in start_nbd_disk 2019-04-04 08:35:50 +00:00
net net: Use spdk_json_write_named_* APIs throughout 2019-02-04 07:08:04 +00:00
notify lib/notify: rename spdk_notify_get_events to spdk_notify_foreach_event 2019-05-07 06:11:27 +00:00
nvme nvme: switch to spdk_*malloc(). 2019-06-27 04:34:50 +00:00
nvmf nvmf/tcp: Add a maximal PDU loop number 2019-06-28 12:28:54 +00:00
reduce reduce: check pmem buf before unmap 2019-06-25 13:39:09 +00:00
rocksdb lib/rocksdb: Optional VMD enumeration 2019-07-01 03:53:06 +00:00
rpc rpc: rename RPC get_rpc_methods to rpc_get_methods 2019-05-27 12:52:53 +00:00
scsi scsi: Add data offset to DIF context separately from start block address 2019-06-11 18:53:58 +00:00
sock net/vpp: switch to session.api 2019-06-27 08:23:08 +00:00
thread env: Add free_space parameter to spdk_ring_enqueue 2019-06-05 05:23:58 +00:00
trace trace: print error message if event name is too long 2019-05-02 08:41:56 +00:00
ut_mock thread: Eliminate use of pthread_self and thread_ids 2019-01-15 16:53:12 +00:00
util dif: Factor out converting size from LBA based to extended LBA based 2019-06-28 04:13:02 +00:00
vhost lib/vhost: Fix unaligned pointer value error 2019-06-17 07:18:48 +00:00
virtio lib/virtio: change the definition of cookie 2019-06-26 08:03:37 +00:00
vmd lib/vmd: Hooking devices behind VMD endpoint to PCI subsystem 2019-06-11 04:35:31 +00:00
Makefile vmd: Initial SPDK VMD baseline code 2019-05-30 17:32:43 +00:00