Alberto Garcia 0065c455f9 block: Update BlockDriverState.inherits_from on bdrv_set_backing_hd()
When a BlockDriverState's child is opened (be it a backing file, the
protocol layer, or any other) inherits_from is set to point to the
parent node. Children opened separately and then attached to a parent
don't have this pointer set.

bdrv_reopen_queue_child() uses this to determine whether a node's
children must also be reopened inheriting the options from the parent
or not. If inherits_from points to the parent then the child is
reopened and its options can be changed, like in this example:

   $ qemu-img create -f qcow2 hd0.qcow2 1M
   $ qemu-img create -f qcow2 hd1.qcow2 1M
   $ $QEMU -drive if=none,node-name=hd0,file=hd0.qcow2,\
                  backing.driver=qcow2,backing.file.filename=hd1.qcow2
   (qemu) qemu-io hd0 "reopen -o backing.l2-cache-size=2M"

If the child does not inherit from the parent then it does not get
reopened and its options cannot be changed:

   $ $QEMU -drive if=none,node-name=hd1,file=hd1.qcow2
           -drive if=none,node-name=hd0,file=hd0.qcow2,backing=hd1
   (qemu) qemu-io hd0 "reopen -o backing.l2-cache-size=2M"
   Cannot change the option 'backing.l2-cache-size'

If a disk image has a chain of backing files then all of them are also
connected through their inherits_from pointers (i.e. it's possible to
walk the chain in reverse order from base to top).

However this is broken if the intermediate nodes are removed using
e.g. block-stream because the inherits_from pointer from the base node
becomes NULL:

   $ qemu-img create -f qcow2 hd0.qcow2 1M
   $ qemu-img create -f qcow2 -b hd0.qcow2 hd1.qcow2
   $ qemu-img create -f qcow2 -b hd1.qcow2 hd2.qcow2
   $ $QEMU -drive if=none,file=hd2.qcow2
   (qemu) qemu-io none0 "reopen -o backing.l2-cache-size=2M"
   (qemu) block_stream none0 0 hd0.qcow2
   (qemu) qemu-io none0 "reopen -o backing.l2-cache-size=2M"
   Cannot change the option 'backing.l2-cache-size'

This patch updates the inherits_from pointer if the intermediate nodes
of a backing chain are removed using bdrv_set_backing_hd(), and adds a
test case for this scenario.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2018-11-22 19:37:31 +01:00
..
2018-01-23 12:34:43 +01:00
2017-07-11 17:45:02 +02:00
045
2018-10-30 21:11:52 -03:00
055
2018-03-19 12:01:24 +01:00
2018-03-19 12:01:24 +01:00
2018-02-13 12:27:17 +01:00
2018-06-30 17:50:48 +02:00
2015-01-23 12:41:32 -05:00
2017-05-11 12:08:24 +02:00
2017-09-06 15:19:01 +01:00
2018-11-05 15:17:48 +01:00
2018-10-30 21:11:52 -03:00
2018-03-19 14:58:36 -05:00
2018-05-23 14:30:51 +02:00
2018-05-23 14:30:51 +02:00
2018-01-23 12:34:42 +01:00
2018-05-23 14:30:51 +02:00
2015-12-18 14:36:17 +01:00
2018-06-11 16:18:45 +02:00
2017-07-10 13:18:05 +02:00
2017-10-26 15:01:14 +02:00
2018-05-23 13:29:03 +02:00
2018-05-23 14:30:51 +02:00
129
2018-03-09 15:40:07 +01:00
132
2018-03-09 15:40:07 +01:00
2016-05-19 16:45:31 +02:00
2018-05-23 14:30:51 +02:00
2018-05-23 14:30:51 +02:00
147
2018-10-30 21:11:52 -03:00
148
2018-03-09 15:40:07 +01:00
2018-06-18 17:05:17 +02:00
152
2018-03-09 15:40:07 +01:00
155
2018-05-23 14:30:51 +02:00
2018-05-23 14:30:51 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2017-09-26 15:00:32 +02:00
169
2018-10-30 21:13:54 -03:00
2016-09-20 22:10:57 +02:00
2017-09-18 19:43:38 -04:00
2017-02-12 00:47:42 +01:00
2017-11-21 14:54:02 +01:00
2017-06-09 11:45:03 +02:00
2018-01-23 12:34:43 +01:00
2018-05-23 14:30:51 +02:00
2018-05-23 14:30:51 +02:00
194
2018-04-10 16:33:43 +02:00
199
2018-03-13 17:06:32 -04:00
206
2018-05-30 13:31:18 +02:00
209
2018-03-13 15:44:09 -05:00
210
2018-05-30 13:31:18 +02:00
211
2018-05-30 13:31:18 +02:00
212
2018-05-30 13:31:18 +02:00
213
2018-05-30 13:31:18 +02:00
2018-05-15 16:15:21 +02:00
218
2018-10-26 17:17:32 +02:00
219
2018-06-11 16:18:45 +02:00
222
2018-07-10 11:55:11 +02:00
2018-11-19 11:16:46 -06:00
2018-06-01 16:01:29 +01:00

=== This is the QEMU I/O test suite ===

* Intro

This package contains a simple test suite for the I/O layer of qemu.
It does not require a guest, but only the qemu, qemu-img and qemu-io
binaries.  This does limit it to exercise the low-level I/O path only
but no actual block drivers like ide, scsi or virtio.

* Usage

Just run ./check to run all tests for the raw image format, or ./check
-qcow2 to test the qcow2 image format.  The output of ./check -h explains
additional options to test further image formats or I/O methods.

* Feedback and patches

Please send improvements to the test suite, general feedback or just
reports of failing tests cases to qemu-devel@nongnu.org with a CC:
to qemu-block@nongnu.org.