[Libguestfs] [PATCH v4 1/4] file: Avoid unsupported fallocate() calls

Eric Blake eblake at redhat.com
Mon Aug 20 17:29:09 UTC 2018


On 08/19/2018 11:56 AM, Nir Soffer wrote:
> When using file systems not supporting ZERO_RANGE (e.g. NFS 4.2) or
> block device on kernel < 4.9, we used to call fallocate() for every
> zero, fail with EOPNOTSUPP, and fallback to manual zeroing.  When
> trimming, we used to try unsupported fallocate() on every call.
> 
> Change file handle to remember if punching holes or zeroing range are
> supported, and avoid unsupported calls.
> 
> - zero changed to:
>    1. If we can punch hole and may trim, try PUNCH_HOLE
>    2. If we can zero range, try ZERO_RANGE
>    3. Fall back to manual writing
> 
> - trim changed to:
>    1. If we can punch hole, try PUNCH_HOLE
>    2. Succeed
> ---
>   plugins/file/file.c | 84 +++++++++++++++++++++++++++++----------------
>   1 file changed, 55 insertions(+), 29 deletions(-)

> @@ -146,6 +149,18 @@ file_open (int readonly)
>       return NULL;
>     }
>   
> +#ifdef FALLOC_FL_PUNCH_HOLE
> +  h->can_punch_hole = true;
> +#else
> +  h->can_punch_hole = false;
> +#endif

h was allocated with malloc(). If we switched to allocating with 
calloc(), we could get rid of the '= false' branches, for fewer lines. 
Not a big enough deal for me to care (so I didn't modify anything).

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org




More information about the Libguestfs mailing list