2015-12-03 11:01:30 +01:00
QA output created by 051
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 22:39:52 +02:00
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
2015-12-03 11:01:30 +01:00
=== Unknown option ===
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0
2016-03-16 19:54:34 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
2015-12-03 11:01:30 +01:00
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0
2016-03-16 19:54:34 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
2015-12-03 11:01:30 +01:00
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0
2016-03-16 19:54:34 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
2015-12-03 11:01:30 +01:00
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0
2016-03-16 19:54:34 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
2015-12-03 11:01:30 +01:00
=== Unknown protocol option ===
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=: Block protocol 'file' doesn't support the option 'unknown_opt'
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on: Block protocol 'file' doesn't support the option 'unknown_opt'
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234: Block protocol 'file' doesn't support the option 'unknown_opt'
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo: Block protocol 'file' doesn't support the option 'unknown_opt'
=== Invalid format ===
Testing: -drive file=TEST_DIR/t.qcow2,format=foo
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=foo: Unknown driver 'foo'
Testing: -drive file=TEST_DIR/t.qcow2,driver=foo
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=foo: Unknown driver 'foo'
Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2: Cannot specify both 'driver' and 'format'
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2: Cannot specify both 'driver' and 'format'
2018-07-04 13:28:29 +02:00
=== Node names ===
Testing: -drive file=TEST_DIR/t.qcow2,node-name=x123456789012345678901234567890
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) quit
Testing: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901: Node name too long
Testing: -drive file=TEST_DIR/t.qcow2,node-name=All-Types.of_all0wed_chars
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) quit
Testing: -drive file=TEST_DIR/t.qcow2,node-name=123foo
2021-03-05 16:19:28 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=123foo: Invalid node-name: '123foo'
2018-07-04 13:28:29 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,node-name=_foo
2021-03-05 16:19:28 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=_foo: Invalid node-name: '_foo'
2018-07-04 13:28:29 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,node-name=foo#12
2021-03-05 16:19:28 +01:00
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=foo#12: Invalid node-name: 'foo#12'
2018-07-04 13:28:29 +02:00
2015-12-03 11:01:30 +01:00
=== Device without drive ===
2021-03-23 17:53:05 +01:00
Testing: -device virtio-scsi -device scsi-hd
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device scsi-hd: drive property not set
2015-12-03 11:01:30 +01:00
=== Overriding backing file ===
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) info block
block: Respect backing bs in bdrv_refresh_filename
Basically, bdrv_refresh_filename() should respect all children of a
BlockDriverState. However, generally those children are driver-specific,
so this function cannot handle the general case. On the other hand,
there are only few drivers which use other children than @file and
@backing (that being vmdk, quorum, and blkverify).
Most block drivers only use @file and/or @backing (if they use any
children at all). Both can be implemented directly in
bdrv_refresh_filename.
The user overriding the file's filename is already handled, however, the
user overriding the backing file is not. If this is done, opening the
BDS with the plain filename of its file will not be correct, so we may
not set bs->exact_filename in that case.
iotest 051 contains test cases for overriding the backing file, and so
its output changes with this patch applied.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 20190201192935.18394-6-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-02-01 20:29:09 +01:00
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.orig"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
2016-01-04 06:29:20 +01:00
Removable device: not locked, tray closed
2015-12-03 11:01:30 +01:00
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
=== Enable and disable lazy refcounting on the command line, plus some invalid values ===
2017-11-23 03:08:26 +01:00
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: Parameter 'lazy-refcounts' expects 'on' or 'off'
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: Parameter 'lazy-refcounts' expects 'on' or 'off'
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: Parameter 'lazy-refcounts' expects 'on' or 'off'
=== With version 2 images enabling lazy refcounts must fail ===
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
=== No medium ===
Testing: -drive if=floppy
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive if=ide,media=cdrom
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive if=ide
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: Device needs media, but drive is empty
2015-12-03 11:01:30 +01:00
2016-01-04 06:29:20 +01:00
Testing: -drive if=virtio
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
2016-01-04 06:29:20 +01:00
2015-12-03 11:01:30 +01:00
Testing: -drive if=none,id=disk -device ide-cd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive if=none,id=disk -device ide-hd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device ide-hd,drive=disk: Device needs media, but drive is empty
2015-12-03 11:01:30 +01:00
Testing: -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device scsi-hd,drive=disk: Device needs media, but drive is empty
2015-12-03 11:01:30 +01:00
2019-05-23 16:09:19 +02:00
=== Attach to node in non-default iothread ===
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device ide-hd,drive=disk,share-rw=on
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device ide-hd,drive=disk,share-rw=on: Cannot change iothread of active block backend
2019-05-23 16:09:19 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-blk-pci,drive=disk,share-rw=on
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device virtio-blk-pci,drive=disk,share-rw=on: Cannot change iothread of active block backend
2019-05-23 16:09:19 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device lsi53c895a,id=lsi0 -device scsi-hd,bus=lsi0.0,drive=disk,share-rw=on
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) QEMU_PROG: -device scsi-hd,bus=lsi0.0,drive=disk,share-rw=on: HBA does not support iothreads
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-scsi,id=virtio-scsi1 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) QEMU_PROG: -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on: Cannot change iothread of active block backend
2021-10-08 15:34:33 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-blk-pci,drive=disk,iothread=thread0,share-rw=on
2019-05-23 16:09:19 +02:00
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device virtio-blk-pci,drive=disk,iothread=thread0,share-rw=on: Cannot change iothread of active block backend
2019-05-23 16:09:19 +02:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on -device virtio-scsi,id=virtio-scsi1,iothread=thread0 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) quit
2015-12-03 11:01:30 +01:00
=== Read-only ===
Testing: -drive file=TEST_DIR/t.qcow2,if=floppy,readonly=on
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,media=cdrom,readonly=on
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=ide,readonly=on
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: Block node is read-only
2015-12-03 11:01:30 +01:00
2016-01-04 06:29:20 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-cd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device ide-hd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2023-03-03 13:32:13 +01:00
QEMU_PROG: -device ide-hd,drive=disk: Block node is read-only
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
=== Cache modes ===
2019-07-15 18:07:59 +02:00
Testing: -drive driver=null-co,read-zeroes=on,cache=none
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2019-07-15 18:07:59 +02:00
Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2019-07-15 18:07:59 +02:00
Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2019-07-15 18:07:59 +02:00
Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2019-07-15 18:07:59 +02:00
Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive driver=null-co,cache=invalid_value
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
2016-03-18 17:46:45 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) info block
block: Respect backing bs in bdrv_refresh_filename
Basically, bdrv_refresh_filename() should respect all children of a
BlockDriverState. However, generally those children are driver-specific,
so this function cannot handle the general case. On the other hand,
there are only few drivers which use other children than @file and
@backing (that being vmdk, quorum, and blkverify).
Most block drivers only use @file and/or @backing (if they use any
children at all). Both can be implemented directly in
bdrv_refresh_filename.
The user overriding the file's filename is already handled, however, the
user overriding the backing file is not. If this is done, opening the
BDS with the plain filename of its file will not be correct, so we may
not set bs->exact_filename in that case.
iotest 051 contains test cases for overriding the backing file, and so
its output changes with this patch applied.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 20190201192935.18394-6-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-02-01 20:29:09 +01:00
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
2016-01-04 06:29:20 +01:00
Removable device: not locked, tray closed
2015-12-03 11:01:30 +01:00
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
2017-04-13 19:19:51 +02:00
(qemu) info block file
2015-12-03 11:01:30 +01:00
file: TEST_DIR/t.qcow2 (file)
Cache mode: writeback
2017-04-13 19:19:51 +02:00
(qemu) info block backing
2015-12-03 11:01:30 +01:00
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) info block backing-file
2015-12-03 11:01:30 +01:00
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2016-03-18 17:46:45 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) info block
block: Respect backing bs in bdrv_refresh_filename
Basically, bdrv_refresh_filename() should respect all children of a
BlockDriverState. However, generally those children are driver-specific,
so this function cannot handle the general case. On the other hand,
there are only few drivers which use other children than @file and
@backing (that being vmdk, quorum, and blkverify).
Most block drivers only use @file and/or @backing (if they use any
children at all). Both can be implemented directly in
bdrv_refresh_filename.
The user overriding the file's filename is already handled, however, the
user overriding the backing file is not. If this is done, opening the
BDS with the plain filename of its file will not be correct, so we may
not set bs->exact_filename in that case.
iotest 051 contains test cases for overriding the backing file, and so
its output changes with this patch applied.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 20190201192935.18394-6-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-02-01 20:29:09 +01:00
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
2016-01-04 06:29:20 +01:00
Removable device: not locked, tray closed
2015-12-03 11:01:30 +01:00
Cache mode: writethrough
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
2017-04-13 19:19:51 +02:00
(qemu) info block file
2015-12-03 11:01:30 +01:00
file: TEST_DIR/t.qcow2 (file)
Cache mode: writeback
2017-04-13 19:19:51 +02:00
(qemu) info block backing
2015-12-03 11:01:30 +01:00
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) info block backing-file
2015-12-03 11:01:30 +01:00
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2016-03-18 17:46:45 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
2015-12-03 11:01:30 +01:00
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) info block
block: Respect backing bs in bdrv_refresh_filename
Basically, bdrv_refresh_filename() should respect all children of a
BlockDriverState. However, generally those children are driver-specific,
so this function cannot handle the general case. On the other hand,
there are only few drivers which use other children than @file and
@backing (that being vmdk, quorum, and blkverify).
Most block drivers only use @file and/or @backing (if they use any
children at all). Both can be implemented directly in
bdrv_refresh_filename.
The user overriding the file's filename is already handled, however, the
user overriding the backing file is not. If this is done, opening the
BDS with the plain filename of its file will not be correct, so we may
not set bs->exact_filename in that case.
iotest 051 contains test cases for overriding the backing file, and so
its output changes with this patch applied.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Message-id: 20190201192935.18394-6-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-02-01 20:29:09 +01:00
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
2016-01-04 06:29:20 +01:00
Removable device: not locked, tray closed
2015-12-03 11:01:30 +01:00
Cache mode: writeback, ignore flushes
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
2017-04-13 19:19:51 +02:00
(qemu) info block file
2015-12-03 11:01:30 +01:00
file: TEST_DIR/t.qcow2 (file)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) info block backing
2015-12-03 11:01:30 +01:00
backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) info block backing-file
2015-12-03 11:01:30 +01:00
backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Cache mode: writeback, ignore flushes
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
2016-03-18 17:46:45 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
2015-12-03 11:01:30 +01:00
=== Specifying the protocol layer ===
Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
=== Leaving out required options ===
Testing: -drive driver=file
QEMU_PROG: -drive driver=file: The 'file' block driver requires a file name
2017-04-13 18:06:25 +02:00
Testing: -drive driver=file,filename=
QEMU_PROG: -drive driver=file,filename=: The 'file' block driver requires a file name
2015-12-03 11:01:30 +01:00
Testing: -drive driver=nbd
2016-10-25 15:11:34 +02:00
QEMU_PROG: -drive driver=nbd: NBD server address missing
2015-12-03 11:01:30 +01:00
Testing: -drive driver=raw
2016-12-16 18:52:37 +01:00
QEMU_PROG: -drive driver=raw: A block device must be specified for "file"
2015-12-03 11:01:30 +01:00
Testing: -drive file.driver=file
QEMU_PROG: -drive file.driver=file: The 'file' block driver requires a file name
Testing: -drive file.driver=nbd
2016-10-25 15:11:34 +02:00
QEMU_PROG: -drive file.driver=nbd: NBD server address missing
2015-12-03 11:01:30 +01:00
Testing: -drive file.driver=raw
2016-12-16 18:52:37 +01:00
QEMU_PROG: -drive file.driver=raw: A block device must be specified for "file"
2015-12-03 11:01:30 +01:00
Testing: -drive foo=bar
QEMU_PROG: -drive foo=bar: Must specify either driver or file
=== Specifying both an option and its legacy alias ===
Testing: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678: 'throttling.iops-total' and its alias 'iops' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678: 'throttling.iops-read' and its alias 'iops_rd' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678: 'throttling.iops-write' and its alias 'iops_wr' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678: 'throttling.bps-total' and its alias 'bps' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678: 'throttling.bps-read' and its alias 'bps_rd' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678: 'throttling.bps-write' and its alias 'bps_wr' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678: 'throttling.iops-total-max' and its alias 'iops_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678: 'throttling.iops-read-max' and its alias 'iops_rd_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678: 'throttling.iops-write-max' and its alias 'iops_wr_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678: 'throttling.bps-total-max' and its alias 'bps_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678: 'throttling.bps-read-max' and its alias 'bps_rd_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678: 'throttling.bps-write-max' and its alias 'bps_wr_max' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678: 'throttling.iops-size' and its alias 'iops_size' can't be used at the same time
Testing: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off: 'read-only' and its alias 'readonly' can't be used at the same time
2016-01-20 05:21:21 +01:00
=== Catching negative/large throttling values ===
Testing: -drive file=TEST_DIR/t.qcow2,iops=-1
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=-1: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,bps=-2
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=-2: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=-3
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=-3: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,bps=0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2016-01-20 05:21:21 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,bps=1
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2016-01-20 05:21:21 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000000
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2016-01-20 05:21:21 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001: bps/iops/max values must be within [0, 1000000000000000]
Testing: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999: bps/iops/max values must be within [0, 1000000000000000]
2015-12-03 11:01:30 +01:00
=== Parsing protocol from file name ===
Testing: -hda foo:bar
QEMU_PROG: -hda foo:bar: Unknown protocol 'foo'
Testing: -drive file=foo:bar
QEMU_PROG: -drive file=foo:bar: Unknown protocol 'foo'
Testing: -drive file.filename=foo:bar
QEMU_PROG: -drive file.filename=foo:bar: Could not open 'foo:bar': No such file or directory
Testing: -hda file:TEST_DIR/t.qcow2
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=file:TEST_DIR/t.qcow2
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file.filename=file:TEST_DIR/t.qcow2
QEMU_PROG: -drive file.filename=file:TEST_DIR/t.qcow2: Could not open 'file:TEST_DIR/t.qcow2': No such file or directory
=== Snapshot mode ===
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,snapshot=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,if=none,id=drive0 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=file:TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=file:TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
read 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=off,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x22 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) quit
2015-12-03 11:01:30 +01:00
read 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
2017-04-13 19:19:51 +02:00
(qemu) qemu-io drive0 "write -P 0x33 0 4k"
2015-12-03 11:01:30 +01:00
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2017-04-13 19:19:51 +02:00
(qemu) commit drive0
(qemu) quit
2015-12-03 11:01:30 +01:00
read 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
2018-09-10 11:29:23 +02:00
Testing: -drive driver=null-co,snapshot=on
2022-10-10 06:04:31 +02:00
QEMU_PROG: -drive driver=null-co,snapshot=on: Could not open temporary file SNAPSHOT_PATH: No such file or directory
2018-09-10 11:29:23 +02:00
2019-03-11 16:13:16 +01:00
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,read-only=on,if=none,id=drive0
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}}, "driver": "qcow2", "file": {"driver": "file", "filename": SNAPSHOT_PATH}} (qcow2, read-only)
Removable device: not locked, tray closed
Cache mode: writeback, ignore flushes
Backing file: TEST_DIR/t.qcow2 (chain depth: 1)
(qemu) quit
2015-12-03 11:01:30 +01:00
*** done