On 05/30/2014 09:35 AM, Jeff Cody wrote:
> Now that node-names can reference an individual BlockDriverState without
> needing to navigate downwards from the 'device' level, in order to find
> the top-most image (active layer) we need a pointer to the overlay of a
> BDS.
> 
> This will allow QMP commands to reference an image solely by its
> node-name, without also needing to pass in the corresponding 'device'
> string.
> 
> This also adds a helper function to set the overlay pointer that is, for
> now, trivial.  But since we recently moved away from open coding
> bs->backing_hd assignment, we should probably also refrain from setting
> bs->overlay directly.
> 
> Signed-off-by: Jeff Cody <jc...@redhat.com>
> ---
>  block.c                   | 14 ++++++++++++++
>  include/block/block.h     |  1 +
>  include/block/block_int.h |  1 +
>  3 files changed, 16 insertions(+)

Question - can one bds ever belong to more than one chain?  That is,
could I create a guest that uses:
       / disk1
base <
       \ disk2

for two disks in parallel, but where I use blockdev referencing to pass
in a single readonly copy of base to both chains rather than the default
of opening base twice?  If so, then what does the overlay field get set
to for base: disk1 or disk2?  On the other hand, if base truly is
shared, it's non-deterministic which device is meant when using just the
node-name for the shared base bds.  So maybe the user gets what they
deserved.  Or maybe it argues that doing a bds lookup for a bds that has
more than one device chain returns a failure unless the device chain was
passed as well (but that may mean reference counting or even tracking an
array of overlays).

But if a bds can be in at most one chain at a time, then your patch
makes sense.

Reviewed-by: Eric Blake <ebl...@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to