]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemuDomainBlockCommit: Don't track top_canon path separately
authorJiri Denemark <jdenemar@redhat.com>
Fri, 18 Apr 2014 12:38:49 +0000 (14:38 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 25 Apr 2014 07:43:20 +0000 (09:43 +0200)
virStorageFileChainLookup is able to give use virStorageSourcePtr which
contains the pointer to its canonical path. There's no need for the
caller to store both of them.

Former top_meta maps to topSource and top_canon maps to topSource->path.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/qemu/qemu_driver.c

index c01da6c5d4eea6d76aa2a4205d878b8d3dd3a4d0..f230b77ed20003a7b4a4a9386b6652a79ebaa2dd 100644 (file)
@@ -15285,8 +15285,7 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
     int ret = -1;
     int idx;
     virDomainDiskDefPtr disk = NULL;
-    const char *top_canon = NULL;
-    virStorageSourcePtr top_meta = NULL;
+    virStorageSourcePtr topSource;
     const char *top_parent = NULL;
     const char *base_canon = NULL;
     bool clean_access = false;
@@ -15329,22 +15328,22 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
         goto endjob;
 
     if (!top) {
-        top_canon = disk->src.path;
-        top_meta = &disk->src;
-    } else if (!(top_canon = virStorageFileChainLookup(&disk->src,
-                                                       top, &top_meta,
-                                                       &top_parent))) {
+        topSource = &disk->src;
+    } else if (!(virStorageFileChainLookup(&disk->src,
+                                           top, &topSource,
+                                           &top_parent))) {
         goto endjob;
     }
-    if (!top_meta || !top_meta->backingStore) {
+    if (!topSource->backingStore) {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("top '%s' in chain for '%s' has no backing file"),
-                       top_canon, path);
+                       topSource->path, path);
         goto endjob;
     }
+
     if (!base && (flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW))
-        base_canon = top_meta->backingStore->path;
-    else if (!(base_canon = virStorageFileChainLookup(top_meta,
+        base_canon = topSource->backingStore->path;
+    else if (!(base_canon = virStorageFileChainLookup(topSource,
                                                       base, NULL, NULL)))
         goto endjob;
 
@@ -15352,11 +15351,11 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
      * virStorageFileChainLookup guarantees a simple pointer
      * comparison will work, rather than needing full-blown STREQ.  */
     if ((flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW) &&
-        base_canon != top_meta->backingStore->path) {
+        base_canon != topSource->backingStore->path) {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("base '%s' is not immediately below '%s' in chain "
                          "for '%s'"),
-                       base, top_canon, path);
+                       base, topSource->path, path);
         goto endjob;
     }
 
@@ -15383,7 +15382,7 @@ qemuDomainBlockCommit(virDomainPtr dom, const char *path, const char *base,
      * thing if the user specified a relative name). */
     qemuDomainObjEnterMonitor(driver, vm);
     ret = qemuMonitorBlockCommit(priv->mon, device,
-                                 top ? top : top_canon,
+                                 top ? top : topSource->path,
                                  base ? base : base_canon, bandwidth);
     qemuDomainObjExitMonitor(driver, vm);