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@xxxxxxxxxx> 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 { > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list