From: Peter Krempa Date: Thu, 30 Mar 2017 11:47:45 +0000 (+0200) Subject: storage: driver: Remove unavailable transient pools after restart X-Git-Tag: v2.2.1~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2d5c306616490744d586adad16b520d80522b4cc;p=thirdparty%2Flibvirt.git storage: driver: Remove unavailable transient pools after restart If a transient storage pool is deemed inactive after libvirtd restart it would not be deleted from the list. Reuse virStoragePoolUpdateInactive along with a refactor necessary to properly update the state. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1242801 (cherry picked from commit f3a8e80c130513c2b488df5a561c788133148685) --- diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index df3d78ca13..2e313bcbb6 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -104,31 +104,28 @@ virStoragePoolUpdateInactive(virStoragePoolObjPtr *poolptr) static void storagePoolUpdateState(virStoragePoolObjPtr pool) { - bool active; + bool active = false; virStorageBackendPtr backend; - int ret = -1; char *stateFile; if (!(stateFile = virFileBuildPath(driver->stateDir, pool->def->name, ".xml"))) - goto error; + goto cleanup; if ((backend = virStorageBackendForType(pool->def->type)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Missing backend %d"), pool->def->type); - goto error; + goto cleanup; } /* Backends which do not support 'checkPool' are considered - * inactive by default. - */ - active = false; + * inactive by default. */ if (backend->checkPool && backend->checkPool(pool, &active) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to initialize storage pool '%s': %s"), pool->def->name, virGetLastErrorMessage()); - goto error; + active = false; } /* We can pass NULL as connection, most backends do not use @@ -143,17 +140,18 @@ storagePoolUpdateState(virStoragePoolObjPtr pool) virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to restart storage pool '%s': %s"), pool->def->name, virGetLastErrorMessage()); - goto error; + active = false; } } pool->active = active; - ret = 0; - error: - if (ret < 0) { - if (stateFile) - unlink(stateFile); - } + + if (!pool->active) + virStoragePoolUpdateInactive(&pool); + + cleanup: + if (!active && stateFile) + ignore_value(unlink(stateFile)); VIR_FREE(stateFile); return;