Spdk/test
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
..
app app/bdev_svc: Optional VMD enumeration 2019-07-01 03:53:06 +00:00
bdev test/bdevio: Optional VMD enumeration 2019-07-01 03:53:06 +00:00
blobfs test/blobfs/mkfs: Optional VMD enumeration 2019-07-01 03:53:06 +00:00
blobstore test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
common test/vm_setup: install VPP 19.01.1 2019-06-27 08:23:08 +00:00
config_converter iscsi: Deprecate MinConnectionsPerCore 2019-05-06 17:10:48 +00:00
cpp_headers Makefile: Add possibility to uninstall spdk. 2019-05-16 20:56:18 +00:00
env test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
event notify: add notification library 2019-03-29 21:15:14 +00:00
ftl lib/ftl: Expand restore tests 2019-06-26 07:09:00 +00:00
ioat test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
iscsi_tgt iscsi/test: destruct all malloc devices by one time 2019-06-28 05:28:09 +00:00
json_config test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
lvol test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
nvme test: fix the nvme reset test time 2019-06-26 08:39:14 +00:00
nvmf test/fio: fail the tests when fio is not available 2019-06-28 12:26:12 +00:00
ocf test/ocf: disable persistent metadata test 2019-06-11 18:16:55 +00:00
pmem test/pmem: cleanup common.sh 2019-06-19 03:54:58 +00:00
rpc_client test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
spdkcli test/spdkcli: cleanup common.sh 2019-06-19 03:54:58 +00:00
unit bdev: rewind child offset to last block size aligned iov 2019-07-01 04:20:21 +00:00
vhost test: remove duplicated set -ex from tests 2019-06-19 03:54:58 +00:00
Makefile jsonrpc-client: add new C client library 2018-10-11 20:07:44 +00:00
spdk_cunit.h test: remove leftover spdk_cunit declaration 2018-07-06 22:47:56 +00:00