[libvirt] [PATCH 4/3] snapshot: also delete empty directory

Eric Blake eblake at redhat.com
Wed Sep 21 22:08:42 UTC 2011


The previous patch removed all snapshots, but not the directory
where the snapshots lived, which is still a form of stale data.

* src/qemu/qemu_domain.c (qemuDomainRemoveInactive): Wipe any
snapshot directory.
---

I could probably also just squash this into 2/3.

 src/qemu/qemu_domain.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 9436245..4023648 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1537,7 +1537,6 @@ qemuDomainSnapshotDiscardAllMetadata(struct qemud_driver *driver,
     rem.err = 0;
     virHashForEach(vm->snapshots.objs, qemuDomainSnapshotDiscardAll, &rem);

-    /* XXX also do rmdir ? */
     return rem.err;
 }

@@ -1549,10 +1548,21 @@ void
 qemuDomainRemoveInactive(struct qemud_driver *driver,
                          virDomainObjPtr vm)
 {
+    char *snapDir;
+
     /* Remove any snapshot metadata prior to removing the domain */
     if (qemuDomainSnapshotDiscardAllMetadata(driver, vm) < 0) {
         VIR_WARN("unable to remove all snapshots for domain %s",
                  vm->def->name);
     }
+    else if (virAsprintf(&snapDir, "%s/%s", driver->snapshotDir,
+                         vm->def->name) < 0) {
+        VIR_WARN("unable to remove snapshot directory %s/%s",
+                 driver->snapshotDir, vm->def->name);
+    } else {
+        if (rmdir(snapDir) < 0 && errno != ENOENT)
+            VIR_WARN("unable to remove snapshot directory %s", snapDir);
+        VIR_FREE(snapDir);
+    }
     virDomainRemoveInactive(&driver->domains, vm);
 }
-- 
1.7.4.4




More information about the libvir-list mailing list