]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
storage: Track successful creation of LV for removal
authorJohn Ferlan <jferlan@redhat.com>
Thu, 8 Oct 2015 21:26:01 +0000 (17:26 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 13 Oct 2015 22:03:55 +0000 (18:03 -0400)
https://bugzilla.redhat.com/show_bug.cgi?id=1233003

Track when the logical volume was successfully created in order to
properly handle the call to virStorageBackendLogicalDeleteVol. It's
possible that the failure to create was because someone created an
LV in the pool outside of libvirt's knowledge. In this case, we don't
want to delete that LV.  A subsequent or future refresh of the pool
will find the volume and cause an earlier failure

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/storage/storage_backend_logical.c

index 070f2bd9f3c6f148ff0103ba65d6287d674fe916..f1321db42c0355e78ce007c34faddeff075339fa 100644 (file)
@@ -731,6 +731,7 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
     virCommandPtr cmd = NULL;
     virErrorPtr err;
     struct stat sb;
+    bool created = false;
 
     if (vol->target.encryption != NULL) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -771,6 +772,7 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
     if (virCommandRun(cmd, NULL) < 0)
         goto error;
 
+    created = true;
     virCommandFree(cmd);
     cmd = NULL;
 
@@ -816,7 +818,8 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
  error:
     err = virSaveLastError();
     VIR_FORCE_CLOSE(fd);
-    virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
+    if (created)
+        virStorageBackendLogicalDeleteVol(conn, pool, vol, 0);
     virCommandFree(cmd);
     virSetError(err);
     virFreeError(err);