From: Osier Yang Date: Fri, 31 May 2013 05:16:15 +0000 (+0800) Subject: storage: Forbid to shrink the vol's capacity if no --shrink is specified X-Git-Tag: v1.1.0-rc1~144 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38b90e4df3c897431a4a199cef34e80dce9e2617;p=thirdparty%2Flibvirt.git storage: Forbid to shrink the vol's capacity if no --shrink is specified As the document for "virsh-resize" says: <...> Attempts to shrink the volume will fail unless I<--shrink> is present; This makes sense as it at least prevent the user shrinking the important data of volume without a notice. --- diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index e7516eb040..858aeca163 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -1762,7 +1762,8 @@ storageVolResize(virStorageVolPtr obj, int ret = -1; virCheckFlags(VIR_STORAGE_VOL_RESIZE_ALLOCATE | - VIR_STORAGE_VOL_RESIZE_DELTA, -1); + VIR_STORAGE_VOL_RESIZE_DELTA | + VIR_STORAGE_VOL_RESIZE_SHRINK, -1); storageDriverLock(driver); pool = virStoragePoolObjFindByName(&driver->pools, obj->pool); @@ -1814,6 +1815,14 @@ storageVolResize(virStorageVolPtr obj, goto out; } + if (abs_capacity < vol->capacity && + !(flags & VIR_STORAGE_VOL_RESIZE_SHRINK)) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("Can't shrink capacity below current " + "capacity with shrink flag explicitly specified")); + goto out; + } + if (abs_capacity > vol->capacity + pool->def->available) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Not enough space left on storage pool"));