qemu/include
Max Reitz 274fccee2b block/mirror: Fix target backing BDS
Currently, we are trying to move the backing BDS from the source to the
target in bdrv_replace_in_backing_chain() which is called from
mirror_exit(). However, mirror_complete() already tries to open the
target's backing chain with a call to bdrv_open_backing_file().

First, we should only set the target's backing BDS once. Second, the
mirroring block job has a better idea of what to set it to than the
generic code in bdrv_replace_in_backing_chain() (in fact, the latter's
conditions on when to move the backing BDS from source to target are not
really correct).

Therefore, remove that code from bdrv_replace_in_backing_chain() and
leave it to mirror_complete().

Depending on what kind of mirroring is performed, we furthermore want to
use different strategies to open the target's backing chain:

- If blockdev-mirror is used, we can assume the user made sure that the
  target already has the correct backing chain. In particular, we should
  not try to open a backing file if the target does not have any yet.

- If drive-mirror with mode=absolute-paths is used, we can and should
  reuse the already existing chain of nodes that the source BDS is in.
  In case of sync=full, no backing BDS is required; with sync=top, we
  just link the source's backing BDS to the target, and with sync=none,
  we use the source BDS as the target's backing BDS.
  We should not try to open these backing files anew because this would
  lead to two BDSs existing per physical file in the backing chain, and
  we would like to avoid such concurrent access.

- If drive-mirror with mode=existing is used, we have to use the
  information provided in the physical image file which means opening
  the target's backing chain completely anew, just as it has been done
  already.
  If the target's backing chain shares images with the source, this may
  lead to multiple BDSs per physical image file. But since we cannot
  reliably ascertain this case, there is nothing we can do about it.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20160610185750.30956-3-mreitz@redhat.com
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2016-06-16 15:20:37 +02:00
..
block block/mirror: Fix target backing BDS 2016-06-16 15:20:37 +02:00
crypto crypto: aes: always rename internal symbols 2016-06-13 12:41:17 +01:00
disas qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
exec tb hash: track translated blocks with qht 2016-06-11 17:11:16 -07:00
fpu include: Clean up includes 2016-02-23 12:43:05 +00:00
hw target-i386: Implement CPUID[0xB] (Extended Topology Enumeration) 2016-06-14 16:17:08 -03:00
io Fix some typos found by codespell 2016-05-18 15:04:27 +03:00
libdecnumber include: Clean up includes 2016-02-23 12:43:05 +00:00
migration migration: rename functions to starting migrations 2016-06-16 09:51:37 +05:30
monitor Use scripts/clean-includes to drop redundant qemu/typedefs.h 2016-03-22 22:20:16 +01:00
net net_pkt: Extend packet abstraction as required by e1000e functionality 2016-06-02 10:42:28 +08:00
qapi migration: add reporting of errors for outgoing migration 2016-05-26 11:31:30 +05:30
qemu qht: QEMU's fast, resizable and scalable Hash Table 2016-06-11 23:10:20 +00:00
qom all: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
standard-headers linux-headers: update 2016-06-14 13:34:50 +02:00
sysemu vl: Eliminate usb_enabled() 2016-06-13 13:24:41 +02:00
ui spice: Initialization stubs on qemu-spice.h 2016-05-20 14:28:53 -03:00
elf.h Add PowerPC AT_HWCAP2 definitions 2016-06-14 10:41:38 +10:00
glib-compat.h glib: add compatibility interface for g_hash_table_add() 2015-10-30 09:01:03 +01:00
qemu-common.h qemu-common.h: Drop WORDS_ALIGNED define 2016-06-07 18:19:24 +03:00
qemu-io.h qemu-io: Use BlockBackend 2015-02-16 15:07:19 +00:00
trace-tcg.h trace: [tcg] Generate TCG tracing routines 2014-08-12 14:26:12 +01:00
trace.h trace: [tcg] Include event definitions in "trace.h" 2014-08-12 14:26:12 +01:00