]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
conf: Reuse virDomainDefCheckDuplicateDiskWWN to check disk serial too
authorPeter Krempa <pkrempa@redhat.com>
Tue, 29 Sep 2015 16:33:40 +0000 (18:33 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 5 Oct 2015 05:25:21 +0000 (07:25 +0200)
Rename the function to virDomainDefCheckDuplicateDiskInfo and make it
check disk serials too.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1245013

src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms
src/qemu/qemu_process.c

index 393ece7a4daeb6ad38f3d6e9a7f74bd15b933a2a..29e55f29861956859d55d59fc8d8ec4d48949b43 100644 (file)
@@ -24451,15 +24451,16 @@ virDomainDefNeedsPlacementAdvice(virDomainDefPtr def)
 
 
 int
-virDomainDefCheckDuplicateDiskWWN(virDomainDefPtr def)
+virDomainDefCheckDuplicateDiskInfo(virDomainDefPtr def)
 {
     size_t i;
     size_t j;
 
     for (i = 0; i < def->ndisks; i++) {
-        if (def->disks[i]->wwn) {
+        if (def->disks[i]->wwn || def->disks[i]->serial) {
             for (j = i + 1; j < def->ndisks; j++) {
-                if (STREQ_NULLABLE(def->disks[i]->wwn,
+                if (def->disks[i]->wwn &&
+                    STREQ_NULLABLE(def->disks[i]->wwn,
                                    def->disks[j]->wwn)) {
                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                    _("Disks '%s' and '%s' have identical WWN"),
@@ -24467,6 +24468,16 @@ virDomainDefCheckDuplicateDiskWWN(virDomainDefPtr def)
                                    def->disks[j]->dst);
                     return -1;
                 }
+
+                if (def->disks[i]->serial &&
+                    STREQ_NULLABLE(def->disks[i]->serial,
+                                   def->disks[j]->serial)) {
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("Disks '%s' and '%s' have identical serial"),
+                                   def->disks[i]->dst,
+                                   def->disks[j]->dst);
+                    return -1;
+                }
             }
         }
     }
index a101e2a55358a20ac834b89240a3334d8bd2bf95..fd4ef823b176a23b06c6b821e35c1a38e17c1c26 100644 (file)
@@ -3219,7 +3219,7 @@ virDomainParseMemory(const char *xpath,
 bool virDomainDefNeedsPlacementAdvice(virDomainDefPtr def)
     ATTRIBUTE_NONNULL(1);
 
-int virDomainDefCheckDuplicateDiskWWN(virDomainDefPtr def)
+int virDomainDefCheckDuplicateDiskInfo(virDomainDefPtr def)
     ATTRIBUTE_NONNULL(1);
 
 #endif /* __DOMAIN_CONF_H */
index c87efa1d075b57ef1498a95833167758351c0ad7..c1b7b87e91dad5ed840698f53c08c029a4ee6c83 100644 (file)
@@ -200,7 +200,7 @@ virDomainCpuPlacementModeTypeFromString;
 virDomainCpuPlacementModeTypeToString;
 virDomainDefAddImplicitControllers;
 virDomainDefCheckABIStability;
-virDomainDefCheckDuplicateDiskWWN;
+virDomainDefCheckDuplicateDiskInfo;
 virDomainDefCheckUnsupportedMemoryHotplug;
 virDomainDefClearCCWAddresses;
 virDomainDefClearDeviceAliases;
index 9c107bd528547c7e50a2df1aa57e39677cb9516b..8cd713f946bbe0a0739ac47687a313ccbf85dd30 100644 (file)
@@ -4629,7 +4629,7 @@ int qemuProcessStart(virConnectPtr conn,
     }
 
     if (!migrateFrom && !snapshot &&
-        virDomainDefCheckDuplicateDiskWWN(vm->def) < 0)
+        virDomainDefCheckDuplicateDiskInfo(vm->def) < 0)
         goto cleanup;
 
     /* "volume" type disk's source must be translated before