]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: Replace virDomainDiskSourceIsBlockType with a new helper
authorPeter Krempa <pkrempa@redhat.com>
Mon, 2 May 2016 11:42:32 +0000 (13:42 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 9 May 2016 10:36:52 +0000 (12:36 +0200)
For disks sources described by a libvirt volume we don't need to do a
complicated check since virStorageTranslateDiskSourcePool already
correctly determines the actual disk type.

Replace the checks using a new accessor that does not open-code the
whole logic.

src/libvirt_private.syms
src/lxc/lxc_cgroup.c
src/qemu/qemu_conf.c
src/util/virstoragefile.c
src/util/virstoragefile.h

index c445d9faedf3fe9e045fe92e888c3309c96bec99..9ad473dde4d298e246bd72f1aee3112ad3f1ad31 100644 (file)
@@ -2279,6 +2279,7 @@ virStorageSourceFree;
 virStorageSourceGetActualType;
 virStorageSourceGetSecurityLabelDef;
 virStorageSourceInitChainElement;
+virStorageSourceIsBlockLocal;
 virStorageSourceIsEmpty;
 virStorageSourceIsLocalStorage;
 virStorageSourceNewFromBacking;
index 4afe7e229eeb5329c8e1cf7b1ca97cb0c183ee9e..ea86d3603aefe921e9197232e302f1990b4971a8 100644 (file)
@@ -393,7 +393,8 @@ static int virLXCCgroupSetupDeviceACL(virDomainDefPtr def,
 
     VIR_DEBUG("Allowing any disk block devs");
     for (i = 0; i < def->ndisks; i++) {
-        if (!virDomainDiskSourceIsBlockType(def->disks[i]->src, false))
+        if (virStorageSourceIsEmpty(def->disks[i]->src) ||
+            !virStorageSourceIsBlockLocal(def->disks[i]->src))
             continue;
 
         if (virCgroupAllowDevicePath(cgroup,
index 5ed5776a457488d6d1c4f5f96e8b80517ce235f5..e00ddcaa572ea887f2abdef2b4ffb8ed30298630 100644 (file)
@@ -1243,7 +1243,9 @@ qemuAddSharedDisk(virQEMUDriverPtr driver,
     char *key = NULL;
     int ret = -1;
 
-    if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false))
+    if (virStorageSourceIsEmpty(disk->src) ||
+        !disk->src->shared ||
+        !virStorageSourceIsBlockLocal(disk->src))
         return 0;
 
     qemuDriverLock(driver);
@@ -1388,7 +1390,9 @@ qemuRemoveSharedDisk(virQEMUDriverPtr driver,
     char *key = NULL;
     int ret = -1;
 
-    if (!disk->src->shared || !virDomainDiskSourceIsBlockType(disk->src, false))
+    if (virStorageSourceIsEmpty(disk->src) ||
+        !disk->src->shared ||
+        !virStorageSourceIsBlockLocal(disk->src))
         return 0;
 
     qemuDriverLock(driver);
@@ -1476,7 +1480,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
         disk = dev->data.disk;
 
         if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
-            !virDomainDiskSourceIsBlockType(disk->src, false))
+            !virStorageSourceIsBlockLocal(disk->src))
             return 0;
 
         path = virDomainDiskGetSource(disk);
index 05ac2546bdcd9499c42ec4c98309f0c835024203..4f44e05de5d2bc5514f8dbab0d0819d83f0a64fe 100644 (file)
@@ -1955,7 +1955,7 @@ virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def)
 
 
 int
-virStorageSourceGetActualType(virStorageSourcePtr def)
+virStorageSourceGetActualType(const virStorageSource *def)
 {
     if (def->type == VIR_STORAGE_TYPE_VOLUME && def->srcpool)
         return def->srcpool->actualtype;
@@ -2011,6 +2011,20 @@ virStorageSourceIsEmpty(virStorageSourcePtr src)
 }
 
 
+/**
+ * virStorageSourceIsBlockLocal:
+ * @src: disk source definition
+ *
+ * Returns true if @src describes a locally accessible block storage source.
+ * This includes block devices and host-mapped iSCSI volumes.
+ */
+bool
+virStorageSourceIsBlockLocal(const virStorageSource *src)
+{
+    return virStorageSourceGetActualType(src) == VIR_STORAGE_TYPE_BLOCK;
+}
+
+
 /**
  * virStorageSourceBackingStoreClear:
  *
index b98fe2587181ecb4d45f650773da0b65e5b055ec..17e12779c119de56c279e92eaad5b6e130205083 100644 (file)
@@ -357,9 +357,10 @@ int virStorageSourceInitChainElement(virStorageSourcePtr newelem,
                                      bool force);
 void virStorageSourcePoolDefFree(virStorageSourcePoolDefPtr def);
 void virStorageSourceClear(virStorageSourcePtr def);
-int virStorageSourceGetActualType(virStorageSourcePtr def);
+int virStorageSourceGetActualType(const virStorageSource *def);
 bool virStorageSourceIsLocalStorage(virStorageSourcePtr src);
 bool virStorageSourceIsEmpty(virStorageSourcePtr src);
+bool virStorageSourceIsBlockLocal(const virStorageSource *src);
 void virStorageSourceFree(virStorageSourcePtr def);
 void virStorageSourceBackingStoreClear(virStorageSourcePtr def);
 int virStorageSourceUpdateBlockPhysicalSize(virStorageSourcePtr src,