Commit a5c2a235 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging



Block layer patches:

- Fix HMP savevm with -blockdev
- Minor iotests improvements

# gpg: Signature made Mon 18 Nov 2019 16:51:56 GMT
# gpg:                using RSA key 7F09B272C88F2FD6
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" [full]
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6

* remotes/kevin/tags/for-upstream:
  iotests: Test multiple blockdev-snapshot calls
  block: Remove 'backing': null from bs->{explicit_,}options
  iotests: Fix "no qualified output" error path
  qemu-iotests/iotests.py: improve assert_qmp message

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 1bd0f1c9 b1f6a8e1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3019,6 +3019,8 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,
                        "use \"backing\": null instead");
        }
        flags |= BDRV_O_NO_BACKING;
        qdict_del(bs->explicit_options, "backing");
        qdict_del(bs->options, "backing");
        qdict_del(options, "backing");
    }

tests/qemu-iotests/273

0 → 100755
+76 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
#
# Test multiple blockdev-snapshot calls with 'backing': null
#
# 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

# This is a qcow2 regression test
_supported_fmt qcow2
_supported_proto file
_supported_os Linux

do_run_qemu()
{
    echo Testing: "$@"
    $QEMU -nographic -qmp-pretty stdio -nodefaults "$@"
    echo
}

run_qemu()
{
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_qmp |
        _filter_generated_node_ids | _filter_imgfmt | _filter_actual_image_size
}

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"

run_qemu \
    -blockdev file,node-name=base,filename="$TEST_IMG.base" \
     -blockdev file,node-name=midf,filename="$TEST_IMG.mid" \
     -blockdev '{"driver":"qcow2","node-name":"mid","file":"midf","backing":null}' \
     -blockdev file,node-name=topf,filename="$TEST_IMG" \
     -blockdev '{"driver":"qcow2","file":"topf","node-name":"top","backing":null}' \
<<EOF
{"execute":"qmp_capabilities"}
{"execute":"blockdev-snapshot","arguments":{"node":"base","overlay":"mid"}}
{"execute":"blockdev-snapshot","arguments":{"node":"mid","overlay":"top"}}
{"execute":"query-named-block-nodes"}
{"execute":"x-debug-query-block-graph"}
{"execute":"quit"}
EOF

# success, all done
echo "*** done"
rm -f $seq.full
status=0
+337 −0
Original line number Diff line number Diff line
QA output created by 273
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
Testing: -blockdev file,node-name=base,filename=TEST_DIR/t.IMGFMT.base -blockdev file,node-name=midf,filename=TEST_DIR/t.IMGFMT.mid -blockdev {"driver":"IMGFMT","node-name":"mid","file":"midf","backing":null} -blockdev file,node-name=topf,filename=TEST_DIR/t.IMGFMT -blockdev {"driver":"IMGFMT","file":"topf","node-name":"top","backing":null}
{
    QMP_VERSION
}
{
    "return": {
    }
}
{
    "return": {
    }
}
{
    "return": {
    }
}
{
    "return": [
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "backing-image": {
                    "backing-image": {
                        "virtual-size": 197120,
                        "filename": "TEST_DIR/t.IMGFMT.base",
                        "format": "file",
                        "actual-size": SIZE,
                        "dirty-flag": false
                    },
                    "backing-filename-format": "file",
                    "virtual-size": 67108864,
                    "filename": "TEST_DIR/t.IMGFMT.mid",
                    "cluster-size": 65536,
                    "format": "IMGFMT",
                    "actual-size": SIZE,
                    "format-specific": {
                        "type": "IMGFMT",
                        "data": {
                            "compat": "1.1",
                            "lazy-refcounts": false,
                            "refcount-bits": 16,
                            "corrupt": false
                        }
                    },
                    "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
                    "backing-filename": "TEST_DIR/t.IMGFMT.base",
                    "dirty-flag": false
                },
                "backing-filename-format": "IMGFMT",
                "virtual-size": 67108864,
                "filename": "TEST_DIR/t.IMGFMT",
                "cluster-size": 65536,
                "format": "IMGFMT",
                "actual-size": SIZE,
                "format-specific": {
                    "type": "IMGFMT",
                    "data": {
                        "compat": "1.1",
                        "lazy-refcounts": false,
                        "refcount-bits": 16,
                        "corrupt": false
                    }
                },
                "full-backing-filename": "TEST_DIR/t.IMGFMT.mid",
                "backing-filename": "TEST_DIR/t.IMGFMT.mid",
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "top",
            "backing_file_depth": 2,
            "drv": "IMGFMT",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "backing_file": "TEST_DIR/t.IMGFMT.mid",
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "topf",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "backing-image": {
                    "virtual-size": 197120,
                    "filename": "TEST_DIR/t.IMGFMT.base",
                    "format": "file",
                    "actual-size": SIZE,
                    "dirty-flag": false
                },
                "backing-filename-format": "file",
                "virtual-size": 67108864,
                "filename": "TEST_DIR/t.IMGFMT.mid",
                "cluster-size": 65536,
                "format": "IMGFMT",
                "actual-size": SIZE,
                "format-specific": {
                    "type": "IMGFMT",
                    "data": {
                        "compat": "1.1",
                        "lazy-refcounts": false,
                        "refcount-bits": 16,
                        "corrupt": false
                    }
                },
                "full-backing-filename": "TEST_DIR/t.IMGFMT.base",
                "backing-filename": "TEST_DIR/t.IMGFMT.base",
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": true,
            "node-name": "mid",
            "backing_file_depth": 1,
            "drv": "IMGFMT",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "backing_file": "TEST_DIR/t.IMGFMT.base",
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.mid",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT.mid",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": false,
            "node-name": "midf",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.mid",
            "encryption_key_missing": false
        },
        {
            "iops_rd": 0,
            "detect_zeroes": "off",
            "image": {
                "virtual-size": 197120,
                "filename": "TEST_DIR/t.IMGFMT.base",
                "format": "file",
                "actual-size": SIZE,
                "dirty-flag": false
            },
            "iops_wr": 0,
            "ro": true,
            "node-name": "base",
            "backing_file_depth": 0,
            "drv": "file",
            "iops": 0,
            "bps_wr": 0,
            "write_threshold": 0,
            "encrypted": false,
            "bps": 0,
            "bps_rd": 0,
            "cache": {
                "no-flush": false,
                "direct": false,
                "writeback": true
            },
            "file": "TEST_DIR/t.IMGFMT.base",
            "encryption_key_missing": false
        }
    ]
}
{
    "return": {
        "edges": [
            {
                "name": "file",
                "parent": 5,
                "shared-perm": [
                    "graph-mod",
                    "write-unchanged",
                    "consistent-read"
                ],
                "perm": [
                    "resize",
                    "write",
                    "consistent-read"
                ],
                "child": 4
            },
            {
                "name": "backing",
                "parent": 5,
                "shared-perm": [
                    "graph-mod",
                    "resize",
                    "write-unchanged",
                    "write",
                    "consistent-read"
                ],
                "perm": [
                ],
                "child": 3
            },
            {
                "name": "file",
                "parent": 3,
                "shared-perm": [
                    "graph-mod",
                    "write-unchanged",
                    "consistent-read"
                ],
                "perm": [
                    "consistent-read"
                ],
                "child": 2
            },
            {
                "name": "backing",
                "parent": 3,
                "shared-perm": [
                    "graph-mod",
                    "resize",
                    "write-unchanged",
                    "write",
                    "consistent-read"
                ],
                "perm": [
                ],
                "child": 1
            }
        ],
        "nodes": [
            {
                "name": "top",
                "type": "block-driver",
                "id": 5
            },
            {
                "name": "topf",
                "type": "block-driver",
                "id": 4
            },
            {
                "name": "mid",
                "type": "block-driver",
                "id": 3
            },
            {
                "name": "midf",
                "type": "block-driver",
                "id": 2
            },
            {
                "name": "base",
                "type": "block-driver",
                "id": 1
            }
        ]
    }
}
{
    "return": {
    }
}
{
    "timestamp": {
        "seconds":  TIMESTAMP,
        "microseconds":  TIMESTAMP
    },
    "event": "SHUTDOWN",
    "data": {
        "guest": false,
        "reason": "host-qmp-quit"
    }
}

*** done
+1 −1
Original line number Diff line number Diff line
@@ -887,7 +887,7 @@ do
            if [ ! -f "$reference" ]
            then
                status="fail"
                reason="no qualified output"
                results="no qualified output"
                err=true
            else
                if diff -w "$reference" $tmp.out >/dev/null 2>&1
+1 −0
Original line number Diff line number Diff line
@@ -284,3 +284,4 @@
268 rw auto quick
270 rw backing quick
272 rw
273 backing quick
Loading