On 01/30/2016 10:15 AM, Wido den Hollander wrote: > Modify virCheckFlags that it accepts both VIR_STORAGE_VOL_RESIZE_DELTA > and VIR_STORAGE_VOL_RESIZE_SHRINK as valid flags for resizing RBD > volumes. > > This still does not solve the problem where RBD volumes can't be > shrinked using libvirt. The allocation and capacity of RBD volumes > are equal for a RBD volume and this makes libvirt think the volume > is fully allocated and therefor can't be shrinked. 'shrinked' is just a strange word. Typically it's shrunk (US movie "Honey I shrunk the kids". Still the problem seems to be that shrinking an RBD volume ran into problems because allocation and capacity values are checked by the driver and perhaps some assumptions made about the underlying storage In any case - is what you're seeing because the storage_driver (storageVolResize) has some checks? Could you provide some context? Is it this check?: if (abs_capacity < vol->target.allocation) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("can't shrink capacity below " "existing allocation")); goto cleanup; } Since only _fs and _sheepdog support 'resizeVol' - maybe those checks are more _fs specific rather than general for all storage drivers. > > Signed-off-by: Wido den Hollander <wido@xxxxxxxxx> > --- > src/storage/storage_backend_rbd.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c > index 80a1d33..88b613a 100644 > --- a/src/storage/storage_backend_rbd.c > +++ b/src/storage/storage_backend_rbd.c > @@ -1041,7 +1041,8 @@ static int virStorageBackendRBDResizeVol(virConnectPtr conn ATTRIBUTE_UNUSED, > int ret = -1; > int r = 0; > > - virCheckFlags(0, -1); > + virCheckFlags(VIR_STORAGE_VOL_RESIZE_DELTA | > + VIR_STORAGE_VOL_RESIZE_SHRINK, -1); > > if (virStorageBackendRBDOpenRADOSConn(&ptr, conn, &pool->def->source) < 0) > goto cleanup; > To add to Jan's comments, the virsh-volume.c tells us 'delta' is just a way to tell the storage driver that capacity is delta to current size rather than the new size. Perhaps a better explanation in virStorageVolResize to indicate that the flag is used only by the storage driver. Also, I would assume _rbd can increase (ALLOCATE) too, right? John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list