On 01/30/2012 04:08 AM, Daniel P. Berrange wrote:
On Fri, Jan 27, 2012 at 05:28:15PM -0700, Eric Blake wrote:
> From: "Zeeshan Ali (Khattak)" <zeeshanak(a)gnome.org>
>
> Add a new function to allow changing of capacity of storage volumes.
> Plan out several flags, even if not all of them will be implemented
> up front.
>
> +typedef enum {
> + VIR_STORAGE_VOL_RESIZE_ALLOCATE = 1 << 0, /* force allocation of new size
*/
> + VIR_STORAGE_VOL_RESIZE_DELTA = 1 << 1, /* size is relative to current */
> + VIR_STORAGE_VOL_RESIZE_SHRINK = 1 << 2, /* allow decrease in capacity */
> +} virStorageVolResizeFlags;
> +
> +int virStorageVolResize (virStorageVolPtr vol,
> + long long capacity,
> + unsigned int flags);
Why has this changed from 'unsigned long long' to just 'long long'.
Because of VIR_STORAGE_VOL_RESIZE_DELTA and
VIR_STORAGE_VOL_RESIZE_SHRINK. That is,
virStorageVolResize(vol, -10 * 1024 * 1024, DELTA|SHRINK)
is a valid call to shave off 10 MiB of data.
In virStorageVolInfo we use 'unsigned long long', and you can't ever
have a negative capacity, so I don't see why this should be signed.
Remember, off_t is signed, so you can never have a storage volume larger
than 2**63 bytes anyways. Using signed capacity is no different than
using signed off_t (and if you can show me someone with a storage volume
with 2**64 bytes, I will be rather envious).
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org