During my quest to switch block status to be byte-based, John forced me to evaluate whether we have a situation during copy-on-read where we could exceed BDRV_REQUEST_MAX_BYTES [1]. Sure enough, we have a number of pre-existing bugs in the copy-on-read code. Fix those, along with adding a test.
Available as a tag at: git fetch git://repo.or.cz/qemu/ericb.git nbd-byte-status-v4 Since v1 (available at [2]): - tweak patch 3 (now 4) to avoid uninit variable [Kevin, patchew] - tweak patch 4 (now 5) to add 0-length test [Kevin] - tweak patch 4 (now 5) to skip if TEST_DIR contains spaces [Jeff] - new patch 2 to make testing 0-length read easier [1] https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg07286.html [2] https://lists.gnu.org/archive/html/qemu-devel/2017-09/msg08200.html 001/5:[----] [--] 'qemu-io: Add -C for opening with copy-on-read' 002/5:[down] 'block: Uniform handling of 0-length bdrv_get_block_status()' 003/5:[----] [--] 'block: Add blkdebug hook for copy-on-read' 004/5:[0001] [FC] 'block: Perform copy-on-read in loop' 005/5:[0025] [FC] 'iotests: Add test 197 for covering copy-on-read' Eric Blake (5): qemu-io: Add -C for opening with copy-on-read block: Uniform handling of 0-length bdrv_get_block_status() block: Add blkdebug hook for copy-on-read block: Perform copy-on-read in loop iotests: Add test 197 for covering copy-on-read qapi/block-core.json | 5 +- block/io.c | 123 ++++++++++++++++++++++++++------------- qemu-io.c | 15 ++++- tests/qemu-iotests/common.filter | 1 + tests/qemu-iotests/197 | 102 ++++++++++++++++++++++++++++++++ tests/qemu-iotests/197.out | 26 +++++++++ tests/qemu-iotests/group | 1 + 7 files changed, 230 insertions(+), 43 deletions(-) create mode 100755 tests/qemu-iotests/197 create mode 100644 tests/qemu-iotests/197.out -- 2.13.6