]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: storage: Add helper for determining whether a backing chain requires PR
authorPeter Krempa <pkrempa@redhat.com>
Thu, 17 May 2018 10:52:02 +0000 (12:52 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 5 Jun 2018 06:14:00 +0000 (08:14 +0200)
With blockdev support we will need to introspect whether any of the
backing chain members requires PR rather just one of them. Add a helper
and reuse it in virDomainDefHasManagedPR.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/libvirt_private.syms
src/util/virstoragefile.c
src/util/virstoragefile.h

index 71daa539e3fe9b520e84f9145b793ee9c88061ed..2cdcd88713e7a454c4d3083d02befbb91d0d515f 100644 (file)
@@ -29946,7 +29946,7 @@ virDomainDefHasManagedPR(const virDomainDef *def)
     size_t i;
 
     for (i = 0; i < def->ndisks; i++) {
-        if (virStoragePRDefIsManaged(def->disks[i]->src->pr))
+        if (virStorageSourceChainHasManagedPR(def->disks[i]->src))
             return true;
     }
 
index b2decc12fb0c2896dac010fd044f6674f967bbc5..059229ff70472146dee5dd5ad3053db09955b10f 100644 (file)
@@ -2815,6 +2815,7 @@ virStoragePRDefIsEqual;
 virStoragePRDefIsManaged;
 virStoragePRDefParseXML;
 virStorageSourceBackingStoreClear;
+virStorageSourceChainHasManagedPR;
 virStorageSourceClear;
 virStorageSourceCopy;
 virStorageSourceFindByNodeName;
index 10fe0f201a96ff7076699e36524ae00652985ae3..62768af9687e36a1877eed4710a1de7262c23078 100644 (file)
@@ -2025,6 +2025,20 @@ virStoragePRDefIsManaged(virStoragePRDefPtr prd)
 }
 
 
+bool
+virStorageSourceChainHasManagedPR(virStorageSourcePtr src)
+{
+    virStorageSourcePtr n;
+
+    for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
+        if (virStoragePRDefIsManaged(src->pr))
+            return true;
+    }
+
+    return false;
+}
+
+
 virSecurityDeviceLabelDefPtr
 virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
                                     const char *model)
index 4591e6e2138b8f01d88aa75620af5a1596d0ea7e..33fc853fcdd3ec9aff3be52ae5c676f80e4a8c83 100644 (file)
@@ -400,6 +400,9 @@ bool virStoragePRDefIsEqual(virStoragePRDefPtr a,
                             virStoragePRDefPtr b);
 bool virStoragePRDefIsManaged(virStoragePRDefPtr prd);
 
+bool
+virStorageSourceChainHasManagedPR(virStorageSourcePtr src);
+
 virSecurityDeviceLabelDefPtr
 virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
                                     const char *model);