From 8b316fe5da8e459349b1a3ee0037bc7988d6f8aa Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Tomko?= Date: Wed, 27 May 2015 16:33:22 +0200 Subject: [PATCH] Fix shrinking volumes with the delta flag This never worked. In 0.9.10 when this API was introduced, it was intended that the SHRINK flag combined with DELTA would shrink the volume by the specified capacity (to avoid passing negative numbers). See commit 055bbf4. When the SHRINK flag was finally implemented for the first backend in 1.2.13 (commit aa9aa6a), it was only implemented for the absolute values and with the delta flag the volume is always extended, regardless of the SHRINK flag. Treat the SHRINK flag as a minus sign when used together with DELTA, to allow shrinking volumes as was documented in the API since 0.9.10. https://bugzilla.redhat.com/show_bug.cgi?id=1220213 --- src/storage/storage_driver.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 5312032366..148df7a280 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -2320,7 +2320,10 @@ storageVolResize(virStorageVolPtr obj, } if (flags & VIR_STORAGE_VOL_RESIZE_DELTA) { - abs_capacity = vol->target.capacity + capacity; + if (flags & VIR_STORAGE_VOL_RESIZE_SHRINK) + abs_capacity = vol->target.capacity - MIN(capacity, vol->target.capacity); + else + abs_capacity = vol->target.capacity + capacity; flags &= ~VIR_STORAGE_VOL_RESIZE_DELTA; } else { abs_capacity = capacity; -- 2.47.2