]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
storage: Refactor disk label checking
authorJohn Ferlan <jferlan@redhat.com>
Thu, 1 Oct 2015 12:07:35 +0000 (08:07 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 5 Oct 2015 12:14:44 +0000 (08:14 -0400)
Create a new function virStorageBackendDiskValidLabel to handle checking
whether there is a label on the device and whether it's valid or not.
While initially for the purpose of determining whether the label can be
overwritten during DiskBuild, a future use during DiskStart could determine
whether the pool should be started using the label found.

src/storage/storage_backend_disk.c

index ba70a5a4bec35093b357f36056d38a99c822d176..da2a4d492916ccefa046e7b3904747d4471ba56c 100644 (file)
@@ -431,6 +431,33 @@ virStorageBackendDiskFindLabel(const char* device)
 }
 
 
+/**
+ * Determine whether the label on the disk is valid or in a known format
+ * for the purpose of rewriting the label during build
+ *
+ * Return: True if it's OK
+ *         False if something's wrong
+ */
+static bool
+virStorageBackendDiskValidLabel(const char *device)
+{
+    bool valid = false;
+    int check;
+
+    check = virStorageBackendDiskFindLabel(device);
+    if (check > 0) {
+        valid = true;
+    } else if (check < 0) {
+        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                       _("Error checking for disk label"));
+    } else {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("Disk label already present"));
+    }
+    return valid;
+}
+
+
 /**
  * Write a new partition table header
  */
@@ -450,23 +477,11 @@ virStorageBackendDiskBuildPool(virConnectPtr conn ATTRIBUTE_UNUSED,
                              VIR_STORAGE_POOL_BUILD_NO_OVERWRITE,
                              error);
 
-    if (flags & VIR_STORAGE_POOL_BUILD_OVERWRITE) {
+    if (flags & VIR_STORAGE_POOL_BUILD_OVERWRITE)
         ok_to_mklabel = true;
-    } else {
-        int check;
-
-        check = virStorageBackendDiskFindLabel(
-                    pool->def->source.devices[0].path);
-        if (check > 0) {
-            ok_to_mklabel = true;
-        } else if (check < 0) {
-            virReportError(VIR_ERR_OPERATION_FAILED, "%s",
-                           _("Error checking for disk label"));
-        } else {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("Disk label already present"));
-        }
-    }
+    else
+        ok_to_mklabel = virStorageBackendDiskValidLabel(
+                                            pool->def->source.devices[0].path);
 
     if (ok_to_mklabel) {
         /* eg parted /dev/sda mklabel --script msdos */