
On 11/03/2010 09:50 AM, Adam Litke wrote:
I am trying to use a qcow image with libvirt where the backing 'file' is a qemu-nbd server. Unfortunately virDomainDiskDefForeachPath() assumes that backingStore is always a real file so something like 'nbd:0:3333' is rejected because a file with that name cannot be accessed. Note that I am not worried about directly using nbd images. That would require a new disk type with XML markup, etc. I only want it to be permitted as a backingStore
The following patch implements danpb's suggestion:
I think I'm inclined to push the logic for skipping NBD one stage higher. I'd rather expect virStorageFileGetMetadata() to return all backing stores, even if not files. The virDomainDiskDefForeachPath() method should definitely ignore non-file backing stores though.
So what I'm thinking is to extend the virStorageFileMetadata struct and just add a 'bool isFile' field to it. Default this field to true, unless you see the prefix of nbd: in which case set it to false. The virDomainDiskDefForeachPath() method can then skip over any backing store with isFile == false
Signed-off-by: Adam Litke <agl@us.ibm.com> Cc: Daniel P. Berrange <berrange@redhat.com> --- src/conf/domain_conf.c | 7 +++++++ src/util/storage_file.c | 16 +++++++++++++++- src/util/storage_file.h | 1 + 3 files changed, 23 insertions(+), 1 deletions(-)
ACK, and I've pushed this after adjusting one nit.
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index fe93711..2d11785 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7813,6 +7813,13 @@ int virDomainDiskDefForeachPath(virDomainDiskDefPtr disk, depth++; nextpath = meta.backingStore;
+ /* Stop iterating if we reach a non-file backing store */ + if (nextpath && meta.backingStoreIsFile == false) {
When I know a variable is bool, then I prefer using 'var' or '!var' rather than the more verbose 'var == true' or 'var == false'. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org