]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
storage: Error out earlier if the volume target path already exists
authorOsier Yang <jyang@redhat.com>
Wed, 5 Dec 2012 04:44:11 +0000 (12:44 +0800)
committerCole Robinson <crobinso@redhat.com>
Sun, 9 Dec 2012 21:53:42 +0000 (16:53 -0500)
https://bugzilla.redhat.com/show_bug.cgi?id=832302

It's odd to fall through to buildVol, and the existed file is
removed when buildVol fails. This checks if the volume target
path already exists in createVol. The reason for not using
error like "Volume already exists" is that there isn't volume
maintained by libvirt for the path until a operation like
pool-refresh, using error like that will just cause confusion.
(cherry picked from commit d1f3d14974b4213193130d4b01d4449ad1533cbb)

src/storage/storage_backend_fs.c

index 780f93f951a2c9945c9b3210b9208512f87cdc88..205d3ed7e1113b609e5c78620d8568ba937e6dd6 100644 (file)
@@ -1006,6 +1006,13 @@ virStorageBackendFileSystemVolCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
         return -1;
     }
 
+    if (virFileExists(vol->target.path)) {
+        virReportError(VIR_ERR_OPERATION_INVALID,
+                       _("volume target path '%s' already exists"),
+                       vol->target.path);
+        return -1;
+    }
+
     VIR_FREE(vol->key);
     vol->key = strdup(vol->target.path);
     if (vol->key == NULL) {