qemu/block
Kevin Wolf d3c8c67469 block: Skip implicit nodes in query-block/blockstats
Commits 0db832f and 6cdbceb introduced the automatic insertion of filter
nodes above the top layer of mirror and commit block jobs. The
assumption made there was that since libvirt doesn't do node-level
management of the block layer yet, it shouldn't be affected by added
nodes.

This is true as far as commands issued by libvirt are concerned. It only
uses BlockBackend names to address nodes, so any operations it performs
still operate on the root of the tree as intended.

However, the assumption breaks down when you consider query commands,
which return data for the wrong node now. These commands also return
information on some child nodes (bs->file and/or bs->backing), which
libvirt does make use of, and which refer to the wrong nodes, too.

One of the consequences is that oVirt gets wrong information about the
image size and stops the VM in response as long as a mirror or commit
job is running:

https://bugzilla.redhat.com/show_bug.cgi?id=1470634

This patch fixes the problem by hiding the implicit nodes created
automatically by the mirror and commit block jobs in the output of
query-block and BlockBackend-based query-blockstats as long as the user
doesn't indicate that they are aware of those nodes by providing a node
name for them in the QMP command to start the block job.

The node-based commands query-named-block-nodes and query-blockstats
with query-nodes=true still show all nodes, including implicit ones.
This ensures that users that are capable of node-level management can
still access the full information; users that only know BlockBackends
won't use these commands.

Cc: qemu-stable@nongnu.org
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Tested-by: Eric Blake <eblake@redhat.com>
2017-07-24 15:06:04 +02:00
..
accounting.c
backup.c Convert error_report() to warn_report() 2017-07-13 13:49:58 +02:00
blkdebug.c block: Add PreallocMode to bdrv_truncate() 2017-07-11 17:45:01 +02:00
blkreplay.c
blkverify.c
block-backend.c block: Make blk_all_next() public 2017-07-18 15:14:36 +02:00
bochs.c
cloop.c
commit.c block: Skip implicit nodes in query-block/blockstats 2017-07-24 15:06:04 +02:00
crypto.c block: Add PreallocMode to bdrv_truncate() 2017-07-11 17:45:01 +02:00
crypto.h
curl.c
dirty-bitmap.c dirty-bitmap: Report BlockDirtyInfo.count in bytes, as documented 2017-07-24 15:06:04 +02:00
dmg-bz2.c
dmg.c
dmg.h
file-posix.c block/file-posix: Preallocation for truncate 2017-07-11 17:45:01 +02:00
file-win32.c block: Add PreallocMode to BD.bdrv_truncate() 2017-07-11 17:45:01 +02:00
gluster.c Error reporting patches for 2017-07-13 2017-07-14 09:36:40 +01:00
io.c -----BEGIN PGP SIGNATURE----- 2017-07-18 13:09:51 +01:00
iscsi-opts.c
iscsi.c Error reporting patches for 2017-07-13 2017-07-14 09:36:40 +01:00
linux-aio.c
Makefile.objs
mirror.c block: Skip implicit nodes in query-block/blockstats 2017-07-24 15:06:04 +02:00
nbd-client.c nbd: Implement NBD_INFO_BLOCK_SIZE on client 2017-07-14 12:04:42 +02:00
nbd-client.h nbd: Create struct for tracking export info 2017-07-14 12:04:41 +02:00
nbd.c nbd: Implement NBD_INFO_BLOCK_SIZE on client 2017-07-14 12:04:42 +02:00
nfs.c Error reporting patches for 2017-07-13 2017-07-14 09:36:40 +01:00
null.c
parallels.c block: Add PreallocMode to blk_truncate() 2017-07-11 17:45:01 +02:00
qapi.c block: Skip implicit nodes in query-block/blockstats 2017-07-24 15:06:04 +02:00
qcow2-bitmap.c
qcow2-cache.c
qcow2-cluster.c
qcow2-refcount.c block/qcow2: falloc/full preallocating growth 2017-07-11 17:45:02 +02:00
qcow2-snapshot.c
qcow2.c qcow2: Fix sector calculation in qcow2_measure() 2017-07-24 15:06:04 +02:00
qcow2.h block/qcow2: falloc/full preallocating growth 2017-07-11 17:45:02 +02:00
qcow.c block: Add PreallocMode to blk_truncate() 2017-07-11 17:45:01 +02:00
qed-check.c
qed-cluster.c qed: protect table cache with CoMutex 2017-07-17 11:34:11 +08:00
qed-l2-cache.c qed: protect table cache with CoMutex 2017-07-17 11:34:11 +08:00
qed-table.c qed: protect table cache with CoMutex 2017-07-17 11:34:11 +08:00
qed.c qed: protect table cache with CoMutex 2017-07-17 11:34:11 +08:00
qed.h qed: protect table cache with CoMutex 2017-07-17 11:34:11 +08:00
quorum.c
raw-format.c block: Add PreallocMode to bdrv_truncate() 2017-07-11 17:45:01 +02:00
rbd.c Error reporting patches for 2017-07-13 2017-07-14 09:36:40 +01:00
replication.c
sheepdog.c sheepdog: add queue_lock 2017-07-17 11:34:20 +08:00
snapshot.c
ssh.c ssh: support I/O from any AioContext 2017-07-17 11:34:20 +08:00
stream.c
throttle-groups.c block: remove timer canceling in throttle_config() 2017-07-18 15:14:35 +02:00
trace-events
vdi.c vdi: make it thread-safe 2017-07-17 11:28:15 +08:00
vhdx-endian.c
vhdx-log.c block: Add PreallocMode to bdrv_truncate() 2017-07-11 17:45:01 +02:00
vhdx.c block: Add PreallocMode to blk_truncate() 2017-07-11 17:45:01 +02:00
vhdx.h
vmdk.c block/vmdk: Report failures in vmdk_read_cid() 2017-07-18 15:14:35 +02:00
vpc.c block/vpc: fix uninitialised variable compiler warning 2017-07-21 15:00:07 +01:00
vvfat.c block/vvfat: Fix compiler warning with gcc 7 2017-07-18 15:14:36 +02:00
vxhs.c
win32-aio.c
write-threshold.c