On Fri, Jan 24, 2020 at 11:23:46 +0100, Max Reitz wrote:
On 23.01.20 16:57, Peter Krempa wrote:
> QEMU requires us to pass the topmost node(-name) in the backing chain as
> the 'device' argument for the blockdev-mirror/block-commit commands.
> Otherwise QEMU complains:
>
> "Need a root block node"
>
> Since libvirt always puts the copy-on-read driver on top of the backing
> chain, blockjobs on disks which use "copy_on_read" fail.
>
> The series below fixes that by passing the proper node. This fixes it
> just fine for the mirror, but for block-commit we still get another
> error due to a bug in qemu:
>
> "'libvirt-4-format' is not in this backing file chain"
>
> Additionally one weird thing happens with block-stream (blockpull). If I
> pass the layer below the copy-on-read as 'device', everything works.
> This is kind of weird as the documentation for that is the same. If I
> pass the nodename of copy-on-read.
It isn’t. block-stream says:
> # @device: the device or node name of the top image
block-commit says:
> # @device: the device name or node-name of a root node
blockdev-mirror says:
> # @device: The device name or node-name of a root node whose writes should be
> # mirrored.
Note the subtle difference: “top” != “root”. “top” is meant just as
part of the job: There’s a base image, and a top image. The top image
is the target (for stream, that is), the base is the first image in the
chain that will be kept.
Ah, right. The distinction was too subtle for me to detect :)
“root node” means actually a root node in the graph.
Hence, stream doesn’t require @device to point to a root node. (Before
qemu commit 554b6147650 it did, but that commit relaxed block-stream.)
Cool, thanks for the version info. Since we use this only starting from
qemu-4.2 we are safe to always use it.
> Max, Kevin, could you please comment on the block-stream part
and
> possibly also on the plans to fix the issue with block-commit?
The plans are to fix it. The latest version of the series is here:
https://lists.nongnu.org/archive/html/qemu-block/2019-08/msg00350.html
It’s from August because it’s an extreme churn to work on new versions.
It touches basically everything in the block layer, so rebasing it
alone takes time. And then there are facts like reviews leading to new
prerequesite series, namely:
https://lists.nongnu.org/archive/html/qemu-block/2019-11/msg00370.html
https://lists.nongnu.org/archive/html/qemu-block/2019-11/msg00908.html
So in total, there are 96 patches. The churn for each version is hard.
Finding willing reviewers is even harder.
(I actually have basically no reviews for one of those prerequisite
series (“block: Introduce real BdrvChildRole”) yet, so there’s little
point in working on v7 of the main series.)
Thanks for the info. Unfortunately I'm not too familiar with qemu to
warant a review for this :(
Thank you for the information!