Message ID | 20191205134646.445427-1-stefanha@redhat.com |
---|---|
State | New |
Headers | show |
Series | qemu-img: fix info --backing-chain --image-opts | expand |
On 12/5/19 7:46 AM, Stefan Hajnoczi wrote: > Only apply --image-opts to the topmost image when listing an entire > backing chain. It is incorrect to treat backing filenames as image > options. Assuming we have the backing chain t.IMGFMT.base <- > t.IMGFMT.mid <- t.IMGFMT, qemu-img info fails as follows: > > $ qemu-img info --backing-chain --image-opts \ > driver=qcow2,file.driver=file,file.filename=t.IMGFMT > qemu-img: Could not open 'TEST_DIR/t.IMGFMT.mid': Cannot find device=TEST_DIR/t.IMGFMT.mid nor node_name=TEST_DIR/t.IMGFMT.mid Cute failure. Yes, the fix seems right. > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > qemu-img.c | 3 ++ > tests/qemu-iotests/279 | 56 ++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/279.out | 35 ++++++++++++++++++++++++ > tests/qemu-iotests/group | 1 + > 4 files changed, 95 insertions(+) > create mode 100755 tests/qemu-iotests/279 > create mode 100644 tests/qemu-iotests/279.out Reviewed-by: Eric Blake <eblake@redhat.com>
On Thu 05 Dec 2019 02:46:46 PM CET, Stefan Hajnoczi wrote: > Only apply --image-opts to the topmost image when listing an entire > backing chain. It is incorrect to treat backing filenames as image > options. Assuming we have the backing chain t.IMGFMT.base <- > t.IMGFMT.mid <- t.IMGFMT, qemu-img info fails as follows: > > $ qemu-img info --backing-chain --image-opts \ > driver=qcow2,file.driver=file,file.filename=t.IMGFMT > qemu-img: Could not open 'TEST_DIR/t.IMGFMT.mid': Cannot find device=TEST_DIR/t.IMGFMT.mid nor node_name=TEST_DIR/t.IMGFMT.mid > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Berto
Am 05.12.2019 um 14:46 hat Stefan Hajnoczi geschrieben: > Only apply --image-opts to the topmost image when listing an entire > backing chain. It is incorrect to treat backing filenames as image > options. Assuming we have the backing chain t.IMGFMT.base <- > t.IMGFMT.mid <- t.IMGFMT, qemu-img info fails as follows: > > $ qemu-img info --backing-chain --image-opts \ > driver=qcow2,file.driver=file,file.filename=t.IMGFMT > qemu-img: Could not open 'TEST_DIR/t.IMGFMT.mid': Cannot find device=TEST_DIR/t.IMGFMT.mid nor node_name=TEST_DIR/t.IMGFMT.mid > > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > diff --git a/tests/qemu-iotests/279 b/tests/qemu-iotests/279 > new file mode 100755 > index 0000000000..b555a92859 > --- /dev/null > +++ b/tests/qemu-iotests/279 > @@ -0,0 +1,56 @@ > +#!/usr/bin/env bash > +# > +# Test qemu-img --backing-chain --image-opts > +# > +# Copyright (C) 2019 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 <http://www.gnu.org/licenses/>. > +# > + > +seq=$(basename "$0") > +echo "QA output created by $seq" > + > +status=1 # failure is the default! > + > +_cleanup() > +{ > + _cleanup_test_img I'm squashing in this fixup: diff --git a/tests/qemu-iotests/279 b/tests/qemu-iotests/279 index b555a92859..6682376808 100755 --- a/tests/qemu-iotests/279 +++ b/tests/qemu-iotests/279 @@ -26,6 +26,7 @@ status=1 # failure is the default! _cleanup() { _cleanup_test_img + rm -f "$TEST_IMG.mid" } trap "_cleanup; exit \$status" 0 1 2 3 15 Thanks, applied to the block branch. Kevin
diff --git a/qemu-img.c b/qemu-img.c index 95a24b9762..6233b8ca56 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2680,7 +2680,10 @@ static ImageInfoList *collect_image_info_list(bool image_opts, blk_unref(blk); + /* Clear parameters that only apply to the topmost image */ filename = fmt = NULL; + image_opts = false; + if (chain) { if (info->has_full_backing_filename) { filename = info->full_backing_filename; diff --git a/tests/qemu-iotests/279 b/tests/qemu-iotests/279 new file mode 100755 index 0000000000..b555a92859 --- /dev/null +++ b/tests/qemu-iotests/279 @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# Test qemu-img --backing-chain --image-opts +# +# Copyright (C) 2019 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 <http://www.gnu.org/licenses/>. +# + +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 + +# Backing files are required... +_supported_fmt qcow qcow2 vmdk qed +_supported_proto file +_supported_os Linux + +TEST_IMG="$TEST_IMG.base" _make_test_img 64M +TEST_IMG="$TEST_IMG.mid" _make_test_img -b "$TEST_IMG.base" +_make_test_img -b "$TEST_IMG.mid" + +echo +echo '== qemu-img info --backing-chain ==' +_img_info --backing-chain | _filter_img_info + +echo +echo '== qemu-img info --backing-chain --image-opts ==' +TEST_IMG="driver=qcow2,file.driver=file,file.filename=$TEST_IMG" _img_info --backing-chain --image-opts | _filter_img_info + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/279.out b/tests/qemu-iotests/279.out new file mode 100644 index 0000000000..f4dc6c69cb --- /dev/null +++ b/tests/qemu-iotests/279.out @@ -0,0 +1,35 @@ +QA output created by 279 +Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 +Formatting 'TEST_DIR/t.IMGFMT.mid', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.mid + +== qemu-img info --backing-chain == +image: TEST_DIR/t.IMGFMT +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) +backing file: TEST_DIR/t.IMGFMT.mid + +image: TEST_DIR/t.IMGFMT.mid +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) +backing file: TEST_DIR/t.IMGFMT.base + +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) + +== qemu-img info --backing-chain --image-opts == +image: TEST_DIR/t.IMGFMT +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) +backing file: TEST_DIR/t.IMGFMT.mid + +image: TEST_DIR/t.IMGFMT.mid +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) +backing file: TEST_DIR/t.IMGFMT.base + +image: TEST_DIR/t.IMGFMT.base +file format: IMGFMT +virtual size: 64 MiB (67108864 bytes) +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 6b10a6a762..eb57ddc72c 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -286,3 +286,4 @@ 272 rw 273 backing quick 277 rw quick +279 rw backing quick
Only apply --image-opts to the topmost image when listing an entire backing chain. It is incorrect to treat backing filenames as image options. Assuming we have the backing chain t.IMGFMT.base <- t.IMGFMT.mid <- t.IMGFMT, qemu-img info fails as follows: $ qemu-img info --backing-chain --image-opts \ driver=qcow2,file.driver=file,file.filename=t.IMGFMT qemu-img: Could not open 'TEST_DIR/t.IMGFMT.mid': Cannot find device=TEST_DIR/t.IMGFMT.mid nor node_name=TEST_DIR/t.IMGFMT.mid Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- qemu-img.c | 3 ++ tests/qemu-iotests/279 | 56 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/279.out | 35 ++++++++++++++++++++++++ tests/qemu-iotests/group | 1 + 4 files changed, 95 insertions(+) create mode 100755 tests/qemu-iotests/279 create mode 100644 tests/qemu-iotests/279.out