From: John Ferlan Date: Thu, 8 Oct 2015 21:26:01 +0000 (-0400) Subject: storage: Track successful creation of LV for removal X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c4dd2a1fafe564d72b50c6e6d2c76a37edfae108;p=people%2Fliuw%2Flibxenctrl-split%2Flibvirt.git storage: Track successful creation of LV for removal 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 --- diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c index 070f2bd9f..f1321db42 100644 --- a/src/storage/storage_backend_logical.c +++ b/src/storage/storage_backend_logical.c @@ -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);