]> git.ipfire.org Git - thirdparty/qemu.git/commit - block.c
block: Attach bs->file only during .bdrv_open()
authorKevin Wolf <kwolf@redhat.com>
Fri, 16 Dec 2016 17:52:37 +0000 (18:52 +0100)
committerKevin Wolf <kwolf@redhat.com>
Fri, 24 Feb 2017 15:09:23 +0000 (16:09 +0100)
commit4e4bf5c42c8b2847a90367936a6df6c277f4a76a
tree2b2003718fbd7652d35daf6bb209db90792ce88f
parent52cdbc5869a3fbbe4d91c83e97dffb212af28ce3
block: Attach bs->file only during .bdrv_open()

The way that attaching bs->file worked was a bit unusual in that it was
the only child that would be attached to a node which is not opened yet.
Because of this, the block layer couldn't know yet which permissions the
driver would eventually need.

This patch moves the point where bs->file is attached to the beginning
of the individual .bdrv_open() implementations, so drivers already know
what they are going to do with the child. This is also more consistent
with how driver-specific children work.

For a moment, bdrv_open() gets its own BdrvChild to perform image
probing, but instead of directly assigning this BdrvChild to the BDS, it
becomes a temporary one and the node name is passed as an option to the
drivers, so that they can simply use bdrv_open_child() to create another
reference for their own use.

This duplicated child for (the not opened yet) bs is not the final
state, a follow-up patch will change the image probing code to use a
BlockBackend, which is completely independent of bs.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
17 files changed:
block.c
block/bochs.c
block/cloop.c
block/crypto.c
block/dmg.c
block/parallels.c
block/qcow.c
block/qcow2.c
block/qed.c
block/raw-format.c
block/replication.c
block/vdi.c
block/vhdx.c
block/vmdk.c
block/vpc.c
tests/qemu-iotests/051.out
tests/qemu-iotests/051.pc.out