From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> To: qemu-devel@nongnu.org, qemu-block@nongnu.org Cc: kwolf@redhat.com, mreitz@redhat.com, fam@euphon.net, stefanha@redhat.com, vsementsov@virtuozzo.com, den@virtuozzo.com, eblake@redhat.com Subject: [Qemu-devel] [PATCH v5 3/3] iotests: test big qcow2 shrink Date: Tue, 23 Apr 2019 15:57:06 +0300 [thread overview] Message-ID: <20190423125706.26989-4-vsementsov@virtuozzo.com> (raw) In-Reply-To: <20190423125706.26989-1-vsementsov@virtuozzo.com> This test checks bug in qcow2_process_discards, fixed by previous commit. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- tests/qemu-iotests/250 | 73 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/250.out | 23 ++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 97 insertions(+) create mode 100755 tests/qemu-iotests/250 create mode 100644 tests/qemu-iotests/250.out diff --git a/tests/qemu-iotests/250 b/tests/qemu-iotests/250 new file mode 100755 index 0000000000..850e3546ca --- /dev/null +++ b/tests/qemu-iotests/250 @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# +# Test big discard in qcow2 shrink +# +# Copyright (c) 2019 Virtuozzo International GmbH. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator +owner=vsementsov@virtuozzo.com + +seq=`basename $0` +echo "QA output created by $seq" + +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 +_supported_proto file +_supported_os Linux + +# This test checks that qcow2_process_discards does not truncate a discard +# request > 2G. +# To reproduce bug we need to overflow int by one sequential discard, so we +# need size > 2G, bigger cluster size (as with default 64k we may have maximum +# of 512M sequential data, corresponding to one L1 entry), and we need some +# data of the beginning of the disk mapped to the end of file to prevent +# bdrv_co_truncate(bs->file) call in qcow2_co_truncate(), which might succeed +# anyway. + +size=2100M +IMGOPTS="cluster_size=1M,preallocation=metadata" + +_make_test_img $size +$QEMU_IO -c 'discard 0 10M' -c 'discard 2090M 10M' \ + -c 'write 2090M 10M' -c 'write 0 10M' "$TEST_IMG" | _filter_qemu_io + +# Check that our trick with swapping first and last 10M chunks succeeded. +# Otherwise test may pass even if bdrv_pdiscard() fails in +# qcow2_process_discards() +$QEMU_IMG map "$TEST_IMG" | _filter_testdir + +$QEMU_IMG map -f raw "$TEST_IMG" | _filter_testdir + +$QEMU_IMG resize --shrink "$TEST_IMG" 5M + +$QEMU_IMG map -f raw "$TEST_IMG" | _filter_testdir + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/250.out b/tests/qemu-iotests/250.out new file mode 100644 index 0000000000..49baee5eee --- /dev/null +++ b/tests/qemu-iotests/250.out @@ -0,0 +1,23 @@ +QA output created by 250 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 preallocation=metadata +discard 10485760/10485760 bytes at offset 0 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +discard 10485760/10485760 bytes at offset 2191523840 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 10485760/10485760 bytes at offset 2191523840 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 10485760/10485760 bytes at offset 0 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Offset Length Mapped to File +0 0xa00000 0x82f00000 TEST_DIR/t.qcow2 +0x82a00000 0xa00000 0x500000 TEST_DIR/t.qcow2 +Offset Length Mapped to File +0 0x301000 0 TEST_DIR/t.qcow2 +0x400000 0xb00000 0x400000 TEST_DIR/t.qcow2 +0x82f00000 0xa00000 0x82f00000 TEST_DIR/t.qcow2 +Image resized. +Offset Length Mapped to File +0 0x301000 0 TEST_DIR/t.qcow2 +0x400000 0x100000 0x400000 TEST_DIR/t.qcow2 +0x82f00000 0x500000 0x82f00000 TEST_DIR/t.qcow2 +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index bae7718380..588ae8b8b1 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -248,3 +248,4 @@ 246 rw auto quick 247 rw auto quick 248 rw auto quick +250 rw auto quick -- 2.18.0
WARNING: multiple messages have this Message-ID (diff)
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> To: qemu-devel@nongnu.org, qemu-block@nongnu.org Cc: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, den@virtuozzo.com, mreitz@redhat.com, stefanha@redhat.com Subject: [Qemu-devel] [PATCH v5 3/3] iotests: test big qcow2 shrink Date: Tue, 23 Apr 2019 15:57:06 +0300 [thread overview] Message-ID: <20190423125706.26989-4-vsementsov@virtuozzo.com> (raw) Message-ID: <20190423125706.PBvzkM4qCyV6nr4W797S2YgOS1DTCKk-rVJCvsDY0LI@z> (raw) In-Reply-To: <20190423125706.26989-1-vsementsov@virtuozzo.com> This test checks bug in qcow2_process_discards, fixed by previous commit. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- tests/qemu-iotests/250 | 73 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/250.out | 23 ++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 97 insertions(+) create mode 100755 tests/qemu-iotests/250 create mode 100644 tests/qemu-iotests/250.out diff --git a/tests/qemu-iotests/250 b/tests/qemu-iotests/250 new file mode 100755 index 0000000000..850e3546ca --- /dev/null +++ b/tests/qemu-iotests/250 @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# +# Test big discard in qcow2 shrink +# +# Copyright (c) 2019 Virtuozzo International GmbH. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator +owner=vsementsov@virtuozzo.com + +seq=`basename $0` +echo "QA output created by $seq" + +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 +_supported_proto file +_supported_os Linux + +# This test checks that qcow2_process_discards does not truncate a discard +# request > 2G. +# To reproduce bug we need to overflow int by one sequential discard, so we +# need size > 2G, bigger cluster size (as with default 64k we may have maximum +# of 512M sequential data, corresponding to one L1 entry), and we need some +# data of the beginning of the disk mapped to the end of file to prevent +# bdrv_co_truncate(bs->file) call in qcow2_co_truncate(), which might succeed +# anyway. + +size=2100M +IMGOPTS="cluster_size=1M,preallocation=metadata" + +_make_test_img $size +$QEMU_IO -c 'discard 0 10M' -c 'discard 2090M 10M' \ + -c 'write 2090M 10M' -c 'write 0 10M' "$TEST_IMG" | _filter_qemu_io + +# Check that our trick with swapping first and last 10M chunks succeeded. +# Otherwise test may pass even if bdrv_pdiscard() fails in +# qcow2_process_discards() +$QEMU_IMG map "$TEST_IMG" | _filter_testdir + +$QEMU_IMG map -f raw "$TEST_IMG" | _filter_testdir + +$QEMU_IMG resize --shrink "$TEST_IMG" 5M + +$QEMU_IMG map -f raw "$TEST_IMG" | _filter_testdir + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/250.out b/tests/qemu-iotests/250.out new file mode 100644 index 0000000000..49baee5eee --- /dev/null +++ b/tests/qemu-iotests/250.out @@ -0,0 +1,23 @@ +QA output created by 250 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2202009600 preallocation=metadata +discard 10485760/10485760 bytes at offset 0 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +discard 10485760/10485760 bytes at offset 2191523840 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 10485760/10485760 bytes at offset 2191523840 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 10485760/10485760 bytes at offset 0 +10 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Offset Length Mapped to File +0 0xa00000 0x82f00000 TEST_DIR/t.qcow2 +0x82a00000 0xa00000 0x500000 TEST_DIR/t.qcow2 +Offset Length Mapped to File +0 0x301000 0 TEST_DIR/t.qcow2 +0x400000 0xb00000 0x400000 TEST_DIR/t.qcow2 +0x82f00000 0xa00000 0x82f00000 TEST_DIR/t.qcow2 +Image resized. +Offset Length Mapped to File +0 0x301000 0 TEST_DIR/t.qcow2 +0x400000 0x100000 0x400000 TEST_DIR/t.qcow2 +0x82f00000 0x500000 0x82f00000 TEST_DIR/t.qcow2 +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index bae7718380..588ae8b8b1 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -248,3 +248,4 @@ 246 rw auto quick 247 rw auto quick 248 rw auto quick +250 rw auto quick -- 2.18.0
next prev parent reply other threads:[~2019-04-23 12:57 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-23 12:57 [Qemu-devel] [PATCH v5 0/3] Fix overflow bug in qcow2 discard Vladimir Sementsov-Ogievskiy 2019-04-23 12:57 ` Vladimir Sementsov-Ogievskiy 2019-04-23 12:57 ` [Qemu-devel] [PATCH v5 1/3] block/qcow2-refcount: add trace-point to qcow2_process_discards Vladimir Sementsov-Ogievskiy 2019-04-23 12:57 ` Vladimir Sementsov-Ogievskiy 2019-04-23 12:57 ` [Qemu-devel] [PATCH v5 2/3] block/io: bdrv_pdiscard: support int64_t bytes parameter Vladimir Sementsov-Ogievskiy 2019-04-23 12:57 ` Vladimir Sementsov-Ogievskiy 2019-04-30 9:24 ` Stefano Garzarella 2019-04-30 9:24 ` Stefano Garzarella 2019-04-30 10:03 ` Vladimir Sementsov-Ogievskiy 2019-04-30 10:03 ` Vladimir Sementsov-Ogievskiy 2019-04-30 11:09 ` Kevin Wolf 2019-04-30 11:09 ` Kevin Wolf 2019-04-30 15:41 ` Eric Blake 2019-04-30 15:41 ` Eric Blake 2019-05-02 9:11 ` Stefano Garzarella 2019-05-02 9:11 ` Stefano Garzarella 2019-05-06 11:47 ` Vladimir Sementsov-Ogievskiy 2019-04-30 14:25 ` Stefano Garzarella 2019-04-30 14:25 ` Stefano Garzarella 2019-04-23 12:57 ` Vladimir Sementsov-Ogievskiy [this message] 2019-04-23 12:57 ` [Qemu-devel] [PATCH v5 3/3] iotests: test big qcow2 shrink Vladimir Sementsov-Ogievskiy 2019-05-21 9:38 ` [Qemu-devel] [PATCH v5 0/3] Fix overflow bug in qcow2 discard Vladimir Sementsov-Ogievskiy 2019-06-03 12:30 ` [Qemu-devel] ping " Vladimir Sementsov-Ogievskiy 2019-06-03 13:40 ` [Qemu-devel] " Kevin Wolf 2019-06-03 13:52 ` Vladimir Sementsov-Ogievskiy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190423125706.26989-4-vsementsov@virtuozzo.com \ --to=vsementsov@virtuozzo.com \ --cc=den@virtuozzo.com \ --cc=eblake@redhat.com \ --cc=fam@euphon.net \ --cc=kwolf@redhat.com \ --cc=mreitz@redhat.com \ --cc=qemu-block@nongnu.org \ --cc=qemu-devel@nongnu.org \ --cc=stefanha@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).