On 12/08/2014 06:03 AM, Peter Krempa wrote:
On 12/06/14 09:14, Eric Blake wrote:
> Right now, grabbing blockinfo always calls stat on the disk, then
> opens the image to determine the capacity, using a throw-away
> virStorageSourcePtr. This has a couple of drawbacks:
>
> + * For read-only disks, nothing should be changing unless
the user
> + * has requested a block-commit action. For read-write disks, we
> + * know some special cases: capacity should not change without a
> + * block-resize (where capacity is the only stat that requires
> + * opening a file, and even then, only for non-raw files); and
> + * physical size of a raw image or of a block device should
> + * likewise not be changing without block-resize. On the other
> + * hand, allocation of a raw file can change (if the file is
> + * sparse, but the amount of sparseness changes due to writes or
> + * punching holes), and physical size of a non-raw file can
> + * change.
For a live VM we should grab all of the above directly from the monitor
and not ever touch the files on the disk. We do that already for the
bulk stats and for getting the right size when doing storage migration.
Agreed. On my next spin, I'll see about getting block info for live vms
done right. (But first, I'm still in the middle of building a scratch
image with this series, if only so that we have an easier binary to play
with for integration and testing purposes).
This function unfortunately is legacy code compared to the stuff I've
pointed out
Yes, blockinfo is quite old, so here's hoping I don't break any
semantics in touching it.
> +++ b/src/util/virstoragefile.h
> @@ -257,8 +257,9 @@ struct _virStorageSource {
>
> virStoragePermsPtr perms;
> virStorageTimestampsPtr timestamps;
> - unsigned long long allocation; /* in bytes, 0 if unknown */
Spurious move?
> unsigned long long capacity; /* in bytes, 0 if unknown */
> + unsigned long long allocation; /* in bytes, 0 if unknown */
> + unsigned long long physical; /* in bytes, 0 if unknown */
You know, Adam asked the same question last time :)
https://www.redhat.com/archives/libvir-list/2014-November/msg00599.html
It's intentional, to match the order in the public header for block
info. But I'll update the commit message to make it obvious.
> size_t nseclabels;
> virSecurityDeviceLabelDefPtr *seclabels;
>
Also an addition to virStorageSourceCopy is missing.
ACK with the tweak to virStorageSourceCopy
I'll probably wait on this patch until I see how the refactoring goes
for splitting offline vs. online stat gathering.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org