From: Osier Yang Date: Wed, 5 Dec 2012 04:44:11 +0000 (+0800) Subject: storage: Error out earlier if the volume target path already exists X-Git-Tag: v0.10.2.2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b625cbcf036e042989b6af9cb1e470cf53e1924;p=thirdparty%2Flibvirt.git storage: Error out earlier if the volume target path already exists 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) --- diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index 780f93f951..205d3ed7e1 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -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) {