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(a)us.ibm.com>
Cc: Daniel P. Berrange <berrange(a)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(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org