mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Block layer patches
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJanYJPAAoJEH8JsnLIjy/WxjUQAJA+DTOmGXvaNpMs65BrU79K /r/iGVrzHv/RMLmrWMnqj96W9SnpMuiAP9hVLNsekqClY9q4ME4DpGcXhWfhSvF5 FC51ehvFJdfo8cPorsevcqNj60iWebjcx3lFfUq2606UOyYih3oijYxr6gSwWbRc GAgdGMqsvGYpzgqAQVEWHUhaX0La49/OzY42aR+E+LCBNfTYvlydvyoc+tUTdIpW 1eM/ASGndGsN0Cf2vxlbKgJ0/P6v+cRZuuIDhKZqre+YG+yM+pq7yZb+o7nf/P36 TPR93BsT7FSVAizRK7VFRuPIynHpiaxYygrJERCXF0sxsV4OlKjpmt/uUPamWFh+ 46Jx2NK1AuAx87BdErgmA119ObO3oAPxK0+2p981obb6SphTbbPxDj6SOlYCt4mJ mhff4JtIiwCmDSckAwd2mkBI1Tvl9qqcELrpyd2t2eU4ec2vf7fPd85EsK/Mq6Kr dbfqFvjNaaMxChoqFgkHAveYJ7zYqRFI2IY5o9c1QyZehCGPWjScxHXZZYdpDl59 YF9DkYQDOyvEX2jmMECaO1r/0nnO+BqQHu5ItJuTte9rjP9Q0do3iBISiIefewtf yji6/QNn2hFrnr1HPAwLFFC3kPgc8Mq8mIUb53j8vG/01KhVRCcnJm2K6D4IUwLZ S6ZnQJB97eE4y7YR5dNt =2axz -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging Block layer patches # gpg: Signature made Mon 05 Mar 2018 17:45:51 GMT # gpg: using RSA key 7F09B272C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6 * remotes/kevin/tags/for-upstream: (38 commits) block: Fix NULL dereference on empty drive error qcow2: Replace align_offset() with ROUND_UP() block/ssh: Add basic .bdrv_truncate() block/ssh: Make ssh_grow_file() blocking block/ssh: Pull ssh_grow_file() from ssh_create() qemu-img: Make resize error message more general qcow2: make qcow2_co_create2() a coroutine_fn block: rename .bdrv_create() to .bdrv_co_create_opts() Revert "IDE: Do not flush empty CDROM drives" block: test blk_aio_flush() with blk->root == NULL block: add BlockBackend->in_flight counter block: extract AIO_WAIT_WHILE() from BlockDriverState aio: rename aio_context_in_iothread() to in_aio_context_home_thread() docs: document how to use the l2-cache-entry-size parameter specs/qcow2: Fix documentation of the compressed cluster descriptor iotest 033: add misaligned write-zeroes test via truncate block: fix write with zero flag set and iovector provided block: Drop unused .bdrv_co_get_block_status() vvfat: Switch to .bdrv_co_block_status() vpc: Switch to .bdrv_co_block_status() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org> # Conflicts: # include/block/block.h
This commit is contained in:
commit
58e2e17dba
48 changed files with 983 additions and 613 deletions
|
@ -92,6 +92,7 @@ gcov-files-test-hbitmap-y = blockjob.c
|
|||
check-unit-y += tests/test-bdrv-drain$(EXESUF)
|
||||
check-unit-y += tests/test-blockjob$(EXESUF)
|
||||
check-unit-y += tests/test-blockjob-txn$(EXESUF)
|
||||
check-unit-y += tests/test-block-backend$(EXESUF)
|
||||
check-unit-y += tests/test-x86-cpuid$(EXESUF)
|
||||
# all code tested by test-x86-cpuid is inside topology.h
|
||||
gcov-files-test-x86-cpuid-y =
|
||||
|
@ -622,6 +623,7 @@ tests/test-throttle$(EXESUF): tests/test-throttle.o $(test-block-obj-y)
|
|||
tests/test-bdrv-drain$(EXESUF): tests/test-bdrv-drain.o $(test-block-obj-y) $(test-util-obj-y)
|
||||
tests/test-blockjob$(EXESUF): tests/test-blockjob.o $(test-block-obj-y) $(test-util-obj-y)
|
||||
tests/test-blockjob-txn$(EXESUF): tests/test-blockjob-txn.o $(test-block-obj-y) $(test-util-obj-y)
|
||||
tests/test-block-backend$(EXESUF): tests/test-block-backend.o $(test-block-obj-y) $(test-util-obj-y)
|
||||
tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(test-block-obj-y)
|
||||
tests/test-iov$(EXESUF): tests/test-iov.o $(test-util-obj-y)
|
||||
tests/test-hbitmap$(EXESUF): tests/test-hbitmap.o $(test-util-obj-y) $(test-crypto-obj-y)
|
||||
|
|
|
@ -64,6 +64,9 @@ do_test()
|
|||
} | $QEMU_IO $IO_EXTRA_ARGS
|
||||
}
|
||||
|
||||
echo
|
||||
echo "=== Test aligned and misaligned write zeroes operations ==="
|
||||
|
||||
for write_zero_cmd in "write -z" "aio_write -z"; do
|
||||
for align in 512 4k; do
|
||||
echo
|
||||
|
@ -102,7 +105,33 @@ for align in 512 4k; do
|
|||
done
|
||||
done
|
||||
|
||||
|
||||
# Trigger truncate that would shrink qcow2 L1 table, which is done by
|
||||
# clearing one entry (8 bytes) with bdrv_co_pwrite_zeroes()
|
||||
|
||||
echo
|
||||
echo "=== Test misaligned write zeroes via truncate ==="
|
||||
echo
|
||||
|
||||
# any size will do, but the smaller the size the smaller the required image
|
||||
CLUSTER_SIZE=$((4 * 1024))
|
||||
L2_COVERAGE=$(($CLUSTER_SIZE * $CLUSTER_SIZE / 8))
|
||||
_make_test_img $(($L2_COVERAGE * 2))
|
||||
|
||||
do_test 512 "write -P 1 0 0x200" "$TEST_IMG" | _filter_qemu_io
|
||||
# next L2 table
|
||||
do_test 512 "write -P 1 $L2_COVERAGE 0x200" "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
# only interested in qcow2 here; also other formats might respond with
|
||||
# "not supported" error message
|
||||
if [ $IMGFMT = "qcow2" ]; then
|
||||
do_test 512 "truncate $L2_COVERAGE" "$TEST_IMG" | _filter_qemu_io
|
||||
fi
|
||||
|
||||
do_test 512 "read -P 1 0 0x200" "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
# success, all done
|
||||
echo
|
||||
echo "*** done"
|
||||
rm -f $seq.full
|
||||
status=0
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
QA output created by 033
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
|
||||
=== Test aligned and misaligned write zeroes operations ===
|
||||
|
||||
== preparing image ==
|
||||
wrote 1024/1024 bytes at offset 512
|
||||
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
@ -164,4 +166,15 @@ read 512/512 bytes at offset 512
|
|||
read 3072/3072 bytes at offset 1024
|
||||
3 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
|
||||
=== Test misaligned write zeroes via truncate ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4194304
|
||||
wrote 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 512/512 bytes at offset 2097152
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
*** done
|
||||
|
|
82
tests/test-block-backend.c
Normal file
82
tests/test-block-backend.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* BlockBackend tests
|
||||
*
|
||||
* Copyright (c) 2017 Kevin Wolf <kwolf@redhat.com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "block/block.h"
|
||||
#include "sysemu/block-backend.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
static void test_drain_aio_error_flush_cb(void *opaque, int ret)
|
||||
{
|
||||
bool *completed = opaque;
|
||||
|
||||
g_assert(ret == -ENOMEDIUM);
|
||||
*completed = true;
|
||||
}
|
||||
|
||||
static void test_drain_aio_error(void)
|
||||
{
|
||||
BlockBackend *blk = blk_new(BLK_PERM_ALL, BLK_PERM_ALL);
|
||||
BlockAIOCB *acb;
|
||||
bool completed = false;
|
||||
|
||||
acb = blk_aio_flush(blk, test_drain_aio_error_flush_cb, &completed);
|
||||
g_assert(acb != NULL);
|
||||
g_assert(completed == false);
|
||||
|
||||
blk_drain(blk);
|
||||
g_assert(completed == true);
|
||||
|
||||
blk_unref(blk);
|
||||
}
|
||||
|
||||
static void test_drain_all_aio_error(void)
|
||||
{
|
||||
BlockBackend *blk = blk_new(BLK_PERM_ALL, BLK_PERM_ALL);
|
||||
BlockAIOCB *acb;
|
||||
bool completed = false;
|
||||
|
||||
acb = blk_aio_flush(blk, test_drain_aio_error_flush_cb, &completed);
|
||||
g_assert(acb != NULL);
|
||||
g_assert(completed == false);
|
||||
|
||||
blk_drain_all();
|
||||
g_assert(completed == true);
|
||||
|
||||
blk_unref(blk);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
bdrv_init();
|
||||
qemu_init_main_loop(&error_abort);
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
g_test_add_func("/block-backend/drain_aio_error", test_drain_aio_error);
|
||||
g_test_add_func("/block-backend/drain_all_aio_error",
|
||||
test_drain_all_aio_error);
|
||||
|
||||
return g_test_run();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue