[libvirt] [PATCH 1/3] use virFileAllocate in virStorageFileResize

John Ferlan jferlan at redhat.com
Tue Sep 26 21:22:59 UTC 2017



On 09/25/2017 11:46 AM, Ján Tomko wrote:
> Introduce a new function virFileAllocate that will call the
> non-destructive variants of safezero, essentially reverting
> my commit 1390c268
>     safezero: fall back to writing zeroes even when resizing
> back to the state as of commit 18f0316
>     virstoragefile: Have virStorageFileResize use safezero
> 
> This means that _ALLOCATE flag will no longer work on platforms
> without the allocate syscalls, but it will not overwrite data
> either.
> ---
>  src/util/virfile.c        | 11 +++++++++++
>  src/util/virfile.h        |  2 ++
>  src/util/virstoragefile.c | 15 ++++++++++-----
>  3 files changed, 23 insertions(+), 5 deletions(-)
> 
> diff --git a/src/util/virfile.c b/src/util/virfile.c
> index a03a23fab..7ca60052d 100644
> --- a/src/util/virfile.c
> +++ b/src/util/virfile.c
> @@ -1216,6 +1216,17 @@ int safezero(int fd, off_t offset, off_t len)
>      return safezero_slow(fd, offset, len);
>  }
>  

Two blank lines between functions...

> +int virFileAllocate(int fd, off_t offset, off_t len)

int
virFileAllocation(int fd,
                  off_t offset,
                  off_t len)

Is the format more recently being used.

> +{
> +    int ret;
> +
> +    ret = safezero_posix_fallocate(fd, offset, len);
> +    if (ret != -2)
> +        return ret;
> +
> +    return safezero_sys_fallocate(fd, offset, len);
> +}
> +

Extra blank line here too.

>  #if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R
>  /* search /proc/mounts for mount point of *type; return pointer to
>   * malloc'ed string of the path if found, otherwise return NULL
> diff --git a/src/util/virfile.h b/src/util/virfile.h
> index 57ceb8072..21fb41b70 100644
> --- a/src/util/virfile.h
> +++ b/src/util/virfile.h
> @@ -44,6 +44,8 @@ ssize_t safewrite(int fd, const void *buf, size_t count)
>      ATTRIBUTE_RETURN_CHECK;
>  int safezero(int fd, off_t offset, off_t len)
>      ATTRIBUTE_RETURN_CHECK;
> +int virFileAllocate(int fd, off_t offset, off_t len)
> +    ATTRIBUTE_RETURN_CHECK;
>  
>  /* Don't call these directly - use the macros below */
>  int virFileClose(int *fdptr, virFileCloseFlags flags)
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 484a5c806..b3da0a452 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -1320,7 +1320,7 @@ virStorageFileResize(const char *path,
>  {
>      int fd = -1;
>      int ret = -1;
> -    int rc ATTRIBUTE_UNUSED;
> +    int rc;
>      off_t offset ATTRIBUTE_UNUSED;
>      off_t len ATTRIBUTE_UNUSED;

One would think the ATTRIBUTE_UNUSED are no longer necessary since
18f0316 too - what was I thinking then?  But they're removed on the next
patch, so no big deal I guess, <sigh>.

Reviewed-by: John Ferlan <jferlan at redhat.com>

John

>  
> @@ -1333,10 +1333,15 @@ virStorageFileResize(const char *path,
>      }
>  
>      if (pre_allocate) {
> -        if (safezero(fd, offset, len) != 0) {
> -            virReportSystemError(errno,
> -                                 _("Failed to pre-allocate space for "
> -                                   "file '%s'"), path);
> +        if ((rc = virFileAllocate(fd, offset, len)) != 0) {
> +            if (rc == -2) {
> +                virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> +                               _("preallocate is not supported on this platform"));
> +            } else {
> +                virReportSystemError(errno,
> +                                     _("Failed to pre-allocate space for "
> +                                       "file '%s'"), path);
> +            }
>              goto cleanup;
>          }
>      } else {
> 




More information about the libvir-list mailing list