From 645acdc0e66277712c7af8a7d8de6a62dc5eb48a Mon Sep 17 00:00:00 2001 From: Max Reitz Date: Tue, 25 Jul 2017 17:56:43 +0200 Subject: [PATCH 01/14] iotests: Fix test 156 On one hand, the _make_test_img invocation for creating the target image was missing a -u because its backing file is not supposed to exist at that point. On the other hand, nobody noticed probably because the backing file is created later on and _cleanup failed to remove it: The quotation marks were misplaced so bash tried to delete a file literally called "$TEST_IMG{,.target}..." instead of performing brace expansion. Thus, the files stayed around after the first run and qemu-img create did not complain about a missing backing file on any run but the first. Signed-off-by: Max Reitz Reviewed-by: Eric Blake Reviewed-by: Jeff Cody Signed-off-by: Kevin Wolf --- tests/qemu-iotests/156 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/156 b/tests/qemu-iotests/156 index 2c4a06e2d8..e75dc4d743 100755 --- a/tests/qemu-iotests/156 +++ b/tests/qemu-iotests/156 @@ -38,7 +38,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_qemu - rm -f "$TEST_IMG{,.target}{,.backing,.overlay}" + rm -f "$TEST_IMG"{,.target}{,.backing,.overlay} } trap "_cleanup; exit \$status" 0 1 2 3 15 @@ -83,7 +83,7 @@ _send_qemu_cmd $QEMU_HANDLE \ 'return' # Create target image -TEST_IMG="$TEST_IMG.target.overlay" _make_test_img -b "$TEST_IMG.target" 1M +TEST_IMG="$TEST_IMG.target.overlay" _make_test_img -u -b "$TEST_IMG.target" 1M # Mirror snapshot _send_qemu_cmd $QEMU_HANDLE \ From c09bd34d820d686c18a59cf3d4261240167db695 Mon Sep 17 00:00:00 2001 From: Max Reitz Date: Tue, 25 Jul 2017 17:56:44 +0200 Subject: [PATCH 02/14] iotests: Redirect stderr to stdout in 186 Without redirecting qemu's stderr to stdout, _filter_qemu will not apply to warnings. This results in $QEMU_PROG not being replaced by QEMU_PROG which is not great if your qemu executable is not called qemu-system-x86_64 (e.g. qemu-system-i386). Signed-off-by: Max Reitz Reviewed-by: Eric Blake Reviewed-by: Jeff Cody Signed-off-by: Kevin Wolf --- tests/qemu-iotests/186 | 2 +- tests/qemu-iotests/186.out | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/qemu-iotests/186 b/tests/qemu-iotests/186 index ab83ee402a..2b9f618f90 100755 --- a/tests/qemu-iotests/186 +++ b/tests/qemu-iotests/186 @@ -56,7 +56,7 @@ function do_run_qemu() done fi echo quit - ) | $QEMU -S -nodefaults -display none -device virtio-scsi-pci -monitor stdio "$@" + ) | $QEMU -S -nodefaults -display none -device virtio-scsi-pci -monitor stdio "$@" 2>&1 echo } diff --git a/tests/qemu-iotests/186.out b/tests/qemu-iotests/186.out index b8bf9a2550..c8377fe146 100644 --- a/tests/qemu-iotests/186.out +++ b/tests/qemu-iotests/186.out @@ -442,28 +442,28 @@ ide0-cd0 (NODE_NAME): null-co:// (null-co, read-only) Cache mode: writeback (qemu) quit -qemu-system-x86_64: -drive if=scsi,driver=null-co: warning: bus=0,unit=0 is deprecated with this machine type Testing: -drive if=scsi,driver=null-co QEMU X.Y.Z monitor - type 'help' for more information -(qemu) info block +(qemu) QEMU_PROG: -drive if=scsi,driver=null-co: warning: bus=0,unit=0 is deprecated with this machine type +info block scsi0-hd0 (NODE_NAME): null-co:// (null-co) Attached to: /machine/unattached/device[27]/scsi.0/legacy[0] Cache mode: writeback (qemu) quit -qemu-system-x86_64: -drive if=scsi,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type Testing: -drive if=scsi,media=cdrom QEMU X.Y.Z monitor - type 'help' for more information -(qemu) info block +(qemu) QEMU_PROG: -drive if=scsi,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type +info block scsi0-cd0: [not inserted] Attached to: /machine/unattached/device[27]/scsi.0/legacy[0] Removable device: not locked, tray closed (qemu) quit -qemu-system-x86_64: -drive if=scsi,driver=null-co,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type Testing: -drive if=scsi,driver=null-co,media=cdrom QEMU X.Y.Z monitor - type 'help' for more information -(qemu) info block +(qemu) QEMU_PROG: -drive if=scsi,driver=null-co,media=cdrom: warning: bus=0,unit=0 is deprecated with this machine type +info block scsi0-cd0 (NODE_NAME): null-co:// (null-co, read-only) Attached to: /machine/unattached/device[27]/scsi.0/legacy[0] Removable device: not locked, tray closed From 1e2b1f6487ae26256a42f017fc1b06e19bb98f5a Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 24 Jul 2017 10:39:51 -0500 Subject: [PATCH 03/14] iotests: Check dirty bitmap statistics in 124 We had a bug for multiple releases where dirty-bitmap count was documented in bytes but reported in sectors; enhance the testsuite to add coverage of DirtyBitmapInfo to ensure we do not regress again. Signed-off-by: Eric Blake Reviewed-by: Stefan Hajnoczi Reviewed-by: John Snow Signed-off-by: Kevin Wolf --- tests/qemu-iotests/124 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/qemu-iotests/124 b/tests/qemu-iotests/124 index d0d2c2bfb0..8e76e62f93 100644 --- a/tests/qemu-iotests/124 +++ b/tests/qemu-iotests/124 @@ -336,7 +336,12 @@ class TestIncrementalBackup(TestIncrementalBackupBase): (('0xab', 0, 512), ('0xfe', '16M', '256k'), ('0x64', '32736k', '64k'))) - + # Check the dirty bitmap stats + result = self.vm.qmp('query-block') + self.assert_qmp(result, 'return[0]/dirty-bitmaps[0]/name', 'bitmap0') + self.assert_qmp(result, 'return[0]/dirty-bitmaps[0]/count', 458752) + self.assert_qmp(result, 'return[0]/dirty-bitmaps[0]/granularity', 65536) + self.assert_qmp(result, 'return[0]/dirty-bitmaps[0]/status', 'active') # Prepare a cluster_size=128k backup target without a backing file. (target, _) = bitmap0.new_target() From b81b74bfb2ea3d23dc06cb0c84841dbea201b8de Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 24 Jul 2017 10:39:52 -0500 Subject: [PATCH 04/14] iotests: Add test of recent fix to 'qemu-img measure' The new test 190 ensures we don't regress back to an infinite loop when measuring the size of a 2T+ qcow2 image. I did not append to test 178, because that test is also designed to run with format 'raw'; also, this gives us some coverage of the measure command under the quick group. Signed-off-by: Eric Blake Reviewed-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- tests/qemu-iotests/190 | 59 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/190.out | 11 +++++++ tests/qemu-iotests/group | 1 + 3 files changed, 71 insertions(+) create mode 100755 tests/qemu-iotests/190 create mode 100644 tests/qemu-iotests/190.out diff --git a/tests/qemu-iotests/190 b/tests/qemu-iotests/190 new file mode 100755 index 0000000000..8f808fef5d --- /dev/null +++ b/tests/qemu-iotests/190 @@ -0,0 +1,59 @@ +#!/bin/bash +# +# qemu-img measure sub-command tests on huge qcow2 files +# +# Copyright (C) 2017 Red Hat, Inc. +# +# 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 . +# + +# creator +owner=eblake@redhat.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img + rm -f "$TEST_IMG.converted" +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter +. ./common.pattern + +# See 178 for more extensive tests across more formats +_supported_fmt qcow2 +_supported_proto file +_supported_os Linux + +echo "== Huge file ==" +echo + +IMGOPTS='cluster_size=2M' _make_test_img 2T + +$QEMU_IMG measure -O raw -f qcow2 "$TEST_IMG" +$QEMU_IMG measure -O qcow2 -o cluster_size=64k -f qcow2 "$TEST_IMG" +$QEMU_IMG measure -O qcow2 -o cluster_size=2M -f qcow2 "$TEST_IMG" + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/190.out b/tests/qemu-iotests/190.out new file mode 100644 index 0000000000..d001942002 --- /dev/null +++ b/tests/qemu-iotests/190.out @@ -0,0 +1,11 @@ +QA output created by 190 +== Huge file == + +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2199023255552 +required size: 2199023255552 +fully allocated size: 2199023255552 +required size: 335806464 +fully allocated size: 2199359062016 +required size: 18874368 +fully allocated size: 2199042129920 +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 287f0ea27d..823811076d 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -184,3 +184,4 @@ 186 rw auto 188 rw auto quick 189 rw auto +190 rw auto quick From 998cbd6a44cd96044f56713274bdf6a94cd721c0 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Fri, 14 Jul 2017 17:35:47 +0300 Subject: [PATCH 05/14] block: fix dangling bs->explicit_options in block.c In some error paths it is possible to QDECREF a freed dangling explicit_options, resulting in a heap overflow crash. For example bdrv_open_inherit()'s fail unrefs it, then calls bdrv_unref which calls bdrv_close which also unrefs it. Signed-off-by: Manos Pitsidianakis Signed-off-by: Kevin Wolf --- block.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/block.c b/block.c index 37e72b7a96..7a78bc647b 100644 --- a/block.c +++ b/block.c @@ -2608,6 +2608,7 @@ fail: QDECREF(bs->options); QDECREF(options); bs->options = NULL; + bs->explicit_options = NULL; bdrv_unref(bs); error_propagate(errp, local_err); return NULL; @@ -3087,6 +3088,7 @@ static void bdrv_close(BlockDriverState *bs) QDECREF(bs->options); QDECREF(bs->explicit_options); bs->options = NULL; + bs->explicit_options = NULL; QDECREF(bs->full_open_options); bs->full_open_options = NULL; } From 180ca19ae02be70f9b158bfd7dec1ff123b9cf8c Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Fri, 14 Jul 2017 17:35:48 +0300 Subject: [PATCH 06/14] block: fix leaks in bdrv_open_driver() bdrv_open_driver() is called in two places, bdrv_new_open_driver() and bdrv_open_common(). In the latter, failure cleanup in is in its caller, bdrv_open_inherit(), which unrefs the bs->file of the failed driver open if it exists. Let's move the bs->file cleanup to bdrv_open_driver() to take care of all callers and do not set bs->drv to NULL unless the driver's open function failed. When bs is destroyed by removing its last reference, it calls bdrv_close() which checks bs->drv to perform the needed cleanups and also call the driver's close function. Since it cleans up options and opaque we must take care not leave dangling pointers. The error paths in bdrv_open_driver() are now two: If open fails, drv->bdrv_close() should not be called. Unref the child if it exists, free what we allocated and set bs->drv to NULL. Return the error and let callers free their stuff. If open succeeds but we fail after, return the error and let callers unref and delete their bs, while cleaning up their allocations. Signed-off-by: Manos Pitsidianakis Signed-off-by: Kevin Wolf --- block.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/block.c b/block.c index 7a78bc647b..ce9cce7b3c 100644 --- a/block.c +++ b/block.c @@ -1119,20 +1119,19 @@ static int bdrv_open_driver(BlockDriverState *bs, BlockDriver *drv, } else { error_setg_errno(errp, -ret, "Could not open image"); } - goto free_and_fail; + goto open_failed; } ret = refresh_total_sectors(bs, bs->total_sectors); if (ret < 0) { error_setg_errno(errp, -ret, "Could not refresh total sector count"); - goto free_and_fail; + return ret; } bdrv_refresh_limits(bs, &local_err); if (local_err) { error_propagate(errp, local_err); - ret = -EINVAL; - goto free_and_fail; + return -EINVAL; } assert(bdrv_opt_mem_align(bs) != 0); @@ -1140,12 +1139,14 @@ static int bdrv_open_driver(BlockDriverState *bs, BlockDriver *drv, assert(is_power_of_2(bs->bl.request_alignment)); return 0; - -free_and_fail: - /* FIXME Close bs first if already opened*/ +open_failed: + bs->drv = NULL; + if (bs->file != NULL) { + bdrv_unref_child(bs, bs->file); + bs->file = NULL; + } g_free(bs->opaque); bs->opaque = NULL; - bs->drv = NULL; return ret; } @@ -1166,7 +1167,9 @@ BlockDriverState *bdrv_new_open_driver(BlockDriver *drv, const char *node_name, ret = bdrv_open_driver(bs, drv, node_name, bs->options, flags, errp); if (ret < 0) { QDECREF(bs->explicit_options); + bs->explicit_options = NULL; QDECREF(bs->options); + bs->options = NULL; bdrv_unref(bs); return NULL; } @@ -2600,9 +2603,6 @@ static BlockDriverState *bdrv_open_inherit(const char *filename, fail: blk_unref(file); - if (bs->file != NULL) { - bdrv_unref_child(bs, bs->file); - } QDECREF(snapshot_options); QDECREF(bs->explicit_options); QDECREF(bs->options); From db11d1ee85497e9e581f632d319b55e43f752baf Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:13:20 +0200 Subject: [PATCH 07/14] qemu-iotests/041: Fix leaked scratch images qemu-iotests 041 left quorum_snapshot.img and target.img behind in the scratch directory. Make sure to clean up after completing the tests. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/041 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041 index 4cda540735..a860a31e9a 100755 --- a/tests/qemu-iotests/041 +++ b/tests/qemu-iotests/041 @@ -418,6 +418,7 @@ new_state = "1" def tearDown(self): self.vm.shutdown() os.remove(test_img) + os.remove(target_img) os.remove(backing_img) os.remove(self.blkdebug_file) @@ -568,6 +569,7 @@ new_state = "1" def tearDown(self): self.vm.shutdown() os.remove(test_img) + os.remove(target_img) os.remove(backing_img) os.remove(self.blkdebug_file) @@ -821,7 +823,7 @@ class TestRepairQuorum(iotests.QMPTestCase): def tearDown(self): self.vm.shutdown() - for i in self.IMAGES + [ quorum_repair_img ]: + for i in self.IMAGES + [ quorum_repair_img, quorum_snapshot_file ]: # Do a try/except because the test may have deleted some images try: os.remove(i) From 0e5960761d5e804df48bb85c435e2c92f616b140 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:19:12 +0200 Subject: [PATCH 08/14] qemu-iotests: Remove blkdebug.conf after tests qemu-iotests 074 and 179 left a blkdebug.conf behind in the scratch directory. Make sure to clean up after completing the tests. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/074 | 1 + tests/qemu-iotests/179 | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/qemu-iotests/074 b/tests/qemu-iotests/074 index aba126cb69..b17866bd34 100755 --- a/tests/qemu-iotests/074 +++ b/tests/qemu-iotests/074 @@ -32,6 +32,7 @@ _cleanup() echo "Cleanup" _cleanup_test_img rm "${TEST_IMG2}" + rm -f "$TEST_DIR/blkdebug.conf" } trap "_cleanup; exit \$status" 0 1 2 3 15 diff --git a/tests/qemu-iotests/179 b/tests/qemu-iotests/179 index 7bc8db8fe0..115944a753 100755 --- a/tests/qemu-iotests/179 +++ b/tests/qemu-iotests/179 @@ -30,6 +30,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_test_img + rm -f "$TEST_DIR/blkdebug.conf" } trap "_cleanup; exit \$status" 0 1 2 3 15 From 0a1505d56a7811244d3cd59cece7cc2bd8286197 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:51:43 +0200 Subject: [PATCH 09/14] qemu-iotests/141: Fix image cleanup qemu-iotests 141 attempted to use brace expansion to remove all images with a single command. However, for this to work, the braces shouldn't be quoted. With this fix, the tests correctly cleans up its scratch images. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/141 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/qemu-iotests/141 b/tests/qemu-iotests/141 index 40a3405968..2f9d7b9bc2 100755 --- a/tests/qemu-iotests/141 +++ b/tests/qemu-iotests/141 @@ -31,7 +31,7 @@ _cleanup() { _cleanup_qemu _cleanup_test_img - rm -f "$TEST_DIR/{b,m,o}.$IMGFMT" + rm -f "$TEST_DIR"/{b,m,o}.$IMGFMT } trap "_cleanup; exit \$status" 0 1 2 3 15 From 6a1e9096206f65525d1fec418b91d5ac82c77934 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:13:20 +0200 Subject: [PATCH 10/14] qemu-iotests/153: Fix leaked scratch images qemu-iotests 153 left t.qcow2.c behind in the scratch directory. Make sure to clean it up after completing the tests. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/153 | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/qemu-iotests/153 b/tests/qemu-iotests/153 index 0b45d78ea3..fa25eb24bd 100755 --- a/tests/qemu-iotests/153 +++ b/tests/qemu-iotests/153 @@ -35,6 +35,7 @@ _cleanup() rm -f "${TEST_IMG}.convert" rm -f "${TEST_IMG}.a" rm -f "${TEST_IMG}.b" + rm -f "${TEST_IMG}.c" rm -f "${TEST_IMG}.lnk" } trap "_cleanup; exit \$status" 0 1 2 3 15 From a8e9c8480e30ee91d05ea096016526af46b1337e Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:13:20 +0200 Subject: [PATCH 11/14] qemu-iotests/162: Fix leaked temporary files qemu-iotests 162 left qemu-nbd.pid behind in the scratch directory, and potentially a file called '42' in the current directory. Make sure to clean it up after completing the tests. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/162 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/qemu-iotests/162 b/tests/qemu-iotests/162 index cad2bd70ab..477a806360 100755 --- a/tests/qemu-iotests/162 +++ b/tests/qemu-iotests/162 @@ -28,6 +28,13 @@ echo "QA output created by $seq" here="$PWD" status=1 # failure is the default! +_cleanup() +{ + rm -f "${TEST_DIR}/qemu-nbd.pid" + rm -f 42 +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + # get standard environment, filters and checks . ./common.rc . ./common.filter From 1803f3f6cfcc900e185a7b94652b7f0f026038f9 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:13:20 +0200 Subject: [PATCH 12/14] qemu-iotests/063: Fix leaked image qemu-iotests 063 left t.raw.raw1 behind in the scratch directory because it used the wrong suffix. Make sure to clean it up after completing the test. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/063 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/qemu-iotests/063 b/tests/qemu-iotests/063 index 352e78c778..e4f6ea9385 100755 --- a/tests/qemu-iotests/063 +++ b/tests/qemu-iotests/063 @@ -31,7 +31,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_test_img - rm -f "$TEST_IMG.orig" "$TEST_IMG.raw" "$TEST_IMG.raw2" + rm -f "$TEST_IMG.orig" "$TEST_IMG.raw1" "$TEST_IMG.raw2" } trap "_cleanup; exit \$status" 0 1 2 3 15 @@ -91,8 +91,6 @@ if $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -n "$TEST_IMG.orig" "$TEST_IMG" >/dev exit 1 fi -rm -f "$TEST_IMG.orig" "$TEST_IMG.raw" "$TEST_IMG.raw2" - echo "*** done" rm -f $seq.full status=0 From 59fa68f3f39cc596f93205f0862c8978c503f2c8 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 27 Jul 2017 15:13:20 +0200 Subject: [PATCH 13/14] qemu-iotests/059: Fix leaked image files qemu-iotests 059 left a whole lot of image files behind in the scratch directory because VMDK creates additional files for extents and cleaning them up requires the original image intact (it parses qemu-img info output to find all extent files), but the image overwrote it many times like it works for all other image formats. In addition, _use_sample_img overwrites the TEST_IMG variable, causing new images created afterwards to reuse the name of the sample file rather than the usual t.IMGFMT. This patch adds an intermediate _cleanup_test_img after each subtest that created an image file with additional extent files, and also after each use of a sample image. _cleanup_test_img is also changed so that it resets TEST_IMG after a sample image is cleaned up. Note that this test was failing before this commit and continues to do so after it. This failure was introduced in commit 9877860 ('block/vmdk: Report failures in vmdk_read_cid()') and needs to be dealt with separately. Signed-off-by: Kevin Wolf Reviewed-by: Jeff Cody Reviewed-by: Eric Blake --- tests/qemu-iotests/059 | 11 ++++++++++- tests/qemu-iotests/059.out | 22 +++++++++++----------- tests/qemu-iotests/common.rc | 3 +++ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/tests/qemu-iotests/059 b/tests/qemu-iotests/059 index 6655aaf384..a1c34eeb7c 100755 --- a/tests/qemu-iotests/059 +++ b/tests/qemu-iotests/059 @@ -29,7 +29,8 @@ status=1 # failure is the default! _cleanup() { - _cleanup_test_img + _cleanup_test_img + rm -f "$TEST_IMG.qcow2" } trap "_cleanup; exit \$status" 0 1 2 3 15 @@ -72,15 +73,18 @@ echo echo "=== Testing monolithicFlat creation and opening ===" IMGOPTS="subformat=monolithicFlat" _make_test_img 2G _img_info +_cleanup_test_img echo echo "=== Testing monolithicFlat with zeroed_grain ===" IMGOPTS="subformat=monolithicFlat,zeroed_grain=on" _make_test_img 2G +_cleanup_test_img echo echo "=== Testing big twoGbMaxExtentFlat ===" IMGOPTS="subformat=twoGbMaxExtentFlat" _make_test_img 1000G $QEMU_IMG info $TEST_IMG | _filter_testdir | sed -e 's/cid: [0-9]*/cid: XXXXXXXX/' +_cleanup_test_img echo echo "=== Testing malformed VMFS extent description line ===" @@ -114,6 +118,7 @@ echo "=== Testing monolithicFlat with internally generated JSON file name ===" IMGOPTS="subformat=monolithicFlat" _make_test_img 64M $QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" 2>&1 \ | _filter_testdir | _filter_imgfmt +_cleanup_test_img echo echo "=== Testing version 3 ===" @@ -123,6 +128,7 @@ for i in {0..99}; do $QEMU_IO -r -c "read -P $(( i % 10 + 0x30 )) $(( i * 64 * 1024 * 10 + i * 512 )) 512" $TEST_IMG \ | _filter_qemu_io done +_cleanup_test_img echo echo "=== Testing 4TB monolithicFlat creation and IO ===" @@ -130,6 +136,7 @@ IMGOPTS="subformat=monolithicFlat" _make_test_img 4T _img_info $QEMU_IO -c "write -P 0xa 900G 512" "$TEST_IMG" | _filter_qemu_io $QEMU_IO -c "read -v 900G 1024" "$TEST_IMG" | _filter_qemu_io +_cleanup_test_img echo echo "=== Testing qemu-img map on extents ===" @@ -139,12 +146,14 @@ for fmt in monolithicSparse twoGbMaxExtentSparse; do $QEMU_IO -c "write 2147483136 1k" "$TEST_IMG" | _filter_qemu_io $QEMU_IO -c "write 5G 1k" "$TEST_IMG" | _filter_qemu_io $QEMU_IMG map "$TEST_IMG" | _filter_testdir + _cleanup_test_img done echo echo "=== Testing afl image with a very large capacity ===" _use_sample_img afl9.vmdk.bz2 _img_info +_cleanup_test_img # success, all done echo "*** done" diff --git a/tests/qemu-iotests/059.out b/tests/qemu-iotests/059.out index 6154509bc3..f6dce7947c 100644 --- a/tests/qemu-iotests/059.out +++ b/tests/qemu-iotests/059.out @@ -2259,8 +2259,8 @@ read 512/512 bytes at offset 64931328 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) === Testing 4TB monolithicFlat creation and IO === -Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=4398046511104 subformat=monolithicFlat -image: TEST_DIR/iotest-version3.IMGFMT +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4398046511104 subformat=monolithicFlat +image: TEST_DIR/t.IMGFMT file format: IMGFMT virtual size: 4.0T (4398046511104 bytes) wrote 512/512 bytes at offset 966367641600 @@ -2333,7 +2333,7 @@ read 1024/1024 bytes at offset 966367641600 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) === Testing qemu-img map on extents === -Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=33285996544 subformat=monolithicSparse +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=monolithicSparse wrote 1024/1024 bytes at offset 65024 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) wrote 1024/1024 bytes at offset 2147483136 @@ -2341,10 +2341,10 @@ wrote 1024/1024 bytes at offset 2147483136 wrote 1024/1024 bytes at offset 5368709120 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) Offset Length Mapped to File -0 0x20000 0x3f0000 TEST_DIR/iotest-version3.vmdk -0x7fff0000 0x20000 0x410000 TEST_DIR/iotest-version3.vmdk -0x140000000 0x10000 0x430000 TEST_DIR/iotest-version3.vmdk -Formatting 'TEST_DIR/iotest-version3.IMGFMT', fmt=IMGFMT size=33285996544 subformat=twoGbMaxExtentSparse +0 0x20000 0x3f0000 TEST_DIR/t.vmdk +0x7fff0000 0x20000 0x410000 TEST_DIR/t.vmdk +0x140000000 0x10000 0x430000 TEST_DIR/t.vmdk +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33285996544 subformat=twoGbMaxExtentSparse wrote 1024/1024 bytes at offset 65024 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) wrote 1024/1024 bytes at offset 2147483136 @@ -2352,10 +2352,10 @@ wrote 1024/1024 bytes at offset 2147483136 wrote 1024/1024 bytes at offset 5368709120 1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) Offset Length Mapped to File -0 0x20000 0x50000 TEST_DIR/iotest-version3-s001.vmdk -0x7fff0000 0x10000 0x70000 TEST_DIR/iotest-version3-s001.vmdk -0x80000000 0x10000 0x50000 TEST_DIR/iotest-version3-s002.vmdk -0x140000000 0x10000 0x50000 TEST_DIR/iotest-version3-s003.vmdk +0 0x20000 0x50000 TEST_DIR/t-s001.vmdk +0x7fff0000 0x10000 0x70000 TEST_DIR/t-s001.vmdk +0x80000000 0x10000 0x50000 TEST_DIR/t-s002.vmdk +0x140000000 0x10000 0x50000 TEST_DIR/t-s003.vmdk === Testing afl image with a very large capacity === qemu-img: Can't get image size 'TEST_DIR/afl9.IMGFMT': File too large diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc index 2548e58b99..bfbc80e5f6 100644 --- a/tests/qemu-iotests/common.rc +++ b/tests/qemu-iotests/common.rc @@ -92,6 +92,7 @@ else TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT fi fi +ORIG_TEST_IMG="$TEST_IMG" _optstr_add() { @@ -228,6 +229,8 @@ _cleanup_test_img() if [ -n "$SAMPLE_IMG_FILE" ] then rm -f "$TEST_DIR/$SAMPLE_IMG_FILE" + SAMPLE_IMG_FILE= + TEST_IMG="$ORIG_TEST_IMG" fi ;; From 8e8eb0a9035e5b6c6447c82138570e388282cfa2 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Mon, 31 Jul 2017 14:43:19 +0200 Subject: [PATCH 14/14] block/qapi: Remove redundant NULL check to silence Coverity When skipping implicit nodes in bdrv_block_device_info(), we know that bs0 is always non-NULL; initially, because it's taken from a BdrvChild and a BdrvChild never has a NULL bs, and after the first iteration because implicit nodes always have a backing file. Remove the NULL check and add an assertion that the implicit node does indeed have a backing file. Signed-off-by: Kevin Wolf Reviewed-by: Eric Blake Reviewed-by: Jeff Cody --- block/qapi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/block/qapi.c b/block/qapi.c index d2b18ee9df..5f1a71f5d2 100644 --- a/block/qapi.c +++ b/block/qapi.c @@ -145,8 +145,9 @@ BlockDeviceInfo *bdrv_block_device_info(BlockBackend *blk, /* Skip automatically inserted nodes that the user isn't aware of for * query-block (blk != NULL), but not for query-named-block-nodes */ - while (blk && bs0 && bs0->drv && bs0->implicit) { + while (blk && bs0->drv && bs0->implicit) { bs0 = backing_bs(bs0); + assert(bs0); } }