[5/6] storage: Unlink stateFile in storagePoolSetInactive

Message ID 107986c706e93e31c5b3de471688f0c4b542e256.1466640165.git.crobinso@redhat.com
State New
Headers show

Commit Message

Cole Robinson June 23, 2016, 12:12 a.m.
There are several places in the storage driver where a runtime
stateFile is not being unlinked when the pool is shutdown. Move
the unlinking to storagePoolSetInactive to fix those locations

One minor semantic change is that we no longer fail PoolDestroy
if we fail to build the stateFile path string, but I don't think
that matters.
---
 src/storage/storage_driver.c | 32 ++++++++------------------------
 1 file changed, 8 insertions(+), 24 deletions(-)

-- 
2.7.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Patch

diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 9e97f62..8f8d098 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -89,6 +89,13 @@  storagePoolSetInactive(virStoragePoolObjPtr pool)
 {
     bool ret = false;
     pool->active = false;
+    char *stateFile;
+
+    stateFile = virFileBuildPath(driver->stateDir, pool->def->name, ".xml");
+    if (stateFile) {
+        unlink(stateFile);
+        VIR_FREE(stateFile);
+    }
 
     if (pool->configFile == NULL) {
         virStoragePoolObjRemove(&driver->pools, pool);
@@ -112,11 +119,6 @@  storagePoolUpdateState(virStoragePoolObjPtr pool)
     bool active = false;
     virStorageBackendPtr backend;
     bool ret = false;
-    char *stateFile;
-
-    if (!(stateFile = virFileBuildPath(driver->stateDir,
-                                       pool->def->name, ".xml")))
-        goto error;
 
     if ((backend = virStorageBackendForType(pool->def->type)) == NULL) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -153,12 +155,8 @@  storagePoolUpdateState(virStoragePoolObjPtr pool)
 
     pool->active = active;
  error:
-    if (!active) {
+    if (!active)
         ret = storagePoolSetInactive(pool);
-        if (stateFile)
-            unlink(stateFile);
-    }
-    VIR_FREE(stateFile);
 
     return ret;
 }
@@ -210,8 +208,6 @@  storageDriverAutostartPool(virConnectPtr conn,
     if (!stateFile ||
         virStoragePoolSaveState(stateFile, pool->def) < 0 ||
         backend->refreshPool(conn, pool) < 0) {
-        if (stateFile)
-            unlink(stateFile);
         if (backend->stopPool)
             backend->stopPool(conn, pool);
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -774,8 +770,6 @@  storagePoolCreateXML(virConnectPtr conn,
     virStoragePoolObjClearVols(pool);
     if (!stateFile || virStoragePoolSaveState(stateFile, pool->def) < 0 ||
         backend->refreshPool(conn, pool) < 0) {
-        if (stateFile)
-            unlink(stateFile);
         if (backend->stopPool)
             backend->stopPool(conn, pool);
         if (storagePoolSetInactive(pool))
@@ -991,8 +985,6 @@  storagePoolCreate(virStoragePoolPtr obj,
     virStoragePoolObjClearVols(pool);
     if (!stateFile || virStoragePoolSaveState(stateFile, pool->def) < 0 ||
         backend->refreshPool(obj->conn, pool) < 0) {
-        if (stateFile)
-            unlink(stateFile);
         if (backend->stopPool)
             backend->stopPool(obj->conn, pool);
 
@@ -1060,7 +1052,6 @@  storagePoolDestroy(virStoragePoolPtr obj)
     virStoragePoolObjPtr pool;
     virStorageBackendPtr backend;
     virObjectEventPtr event = NULL;
-    char *stateFile = NULL;
     int ret = -1;
 
     storageDriverLock();
@@ -1094,13 +1085,6 @@  storagePoolDestroy(virStoragePoolPtr obj)
         goto cleanup;
     }
 
-    if (!(stateFile = virFileBuildPath(driver->stateDir,
-                                       pool->def->name,
-                                       ".xml")))
-        goto cleanup;
-
-    unlink(stateFile);
-    VIR_FREE(stateFile);
 
     if (backend->stopPool &&
         backend->stopPool(obj->conn, pool) < 0)