提交 c180a3dc 编写于 作者: C Cole Robinson

storage: Don't leave stale state file if pool startup fails

After pool startup we call refreshPool(). If that fails, we leave
a stale pool state file hanging around.

Hit this trying to create a pool with qemu:///session containing
root owned files.
上级 b29aff32
......@@ -180,6 +180,8 @@ storageDriverAutostart(void)
virStoragePoolSaveState(stateFile, pool->def) < 0 ||
backend->refreshPool(conn, pool) < 0) {
virErrorPtr err = virGetLastError();
if (stateFile)
unlink(stateFile);
if (backend->stopPool)
backend->stopPool(conn, pool);
VIR_ERROR(_("Failed to autostart storage pool '%s': %s"),
......@@ -690,6 +692,8 @@ storagePoolCreateXML(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);
virStoragePoolObjRemove(&driver->pools, pool);
......@@ -856,6 +860,8 @@ storagePoolCreate(virStoragePoolPtr obj,
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);
goto cleanup;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册