On Wed, Nov 06, 2024 at 08:10:41PM +0100, Stefano Brivio wrote: > On Wed, 6 Nov 2024 17:54:15 +1100 > David Gibson wrote: > > > log.c has several #ifdefs on FALLOC_FL_COLLAPSE_RANGE that won't attempt > > to use it if not defined. But even if the value is defined at compile > > time, it might not be available in the runtime kernel, so we need to check > > for errors from a fallocate() call and fall back to other methods. > > > > Simplify this to only need the runtime check by using linux_dep.h to define > > FALLOC_FL_COLLAPSE_RANGE if it's not in the kernel headers. > > > > Signed-off-by: David Gibson > > --- > > Makefile | 5 ----- > > linux_dep.h | 6 ++++++ > > log.c | 9 +-------- > > 3 files changed, 7 insertions(+), 13 deletions(-) > > > > diff --git a/Makefile b/Makefile > > index 56bf2e8..cb91535 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -59,11 +59,6 @@ ifeq ($(shell :|$(CC) -fstack-protector-strong -S -xc - -o - >/dev/null 2>&1; ec > > FLAGS += -fstack-protector-strong > > endif > > > > -C := \#define _GNU_SOURCE\n\#include \nint x = FALLOC_FL_COLLAPSE_RANGE; > > -ifeq ($(shell printf "$(C)" | $(CC) -S -xc - -o - >/dev/null 2>&1; echo $$?),0) > > - EXTRA_SYSCALLS += fallocate > > -endif > > - > > prefix ?= /usr/local > > exec_prefix ?= $(prefix) > > bindir ?= $(exec_prefix)/bin > > diff --git a/linux_dep.h b/linux_dep.h > > index 8921623..eae9c3c 100644 > > --- a/linux_dep.h > > +++ b/linux_dep.h > > @@ -119,4 +119,10 @@ struct tcp_info_linux { > > */ > > }; > > > > +#include > > + > > +#ifndef FALLOC_FL_COLLAPSE_RANGE > > +#define FALLOC_FL_COLLAPSE_RANGE 0x08 > > +#endif > > + > > #endif /* LINUX_DEP_H */ > > diff --git a/log.c b/log.c > > index 19f1d98..3c1b39c 100644 > > --- a/log.c > > +++ b/log.c > > @@ -92,7 +92,6 @@ const char *logfile_prefix[] = { > > " ", /* LOG_DEBUG */ > > }; > > > > -#ifdef FALLOC_FL_COLLAPSE_RANGE > > This breaks the build on Alpine (and I suppose on Void Linux too, that > is, whenever we build against musl): > > log.c: In function 'logfile_rotate': > log.c:207:28: error: 'FALLOC_FL_COLLAPSE_RANGE' undeclared (first use in this function) > 207 | if (!fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, 0, log_cut_size)) > | ^~~~~~~~~~~~~~~~~~~~~~~~ > log.c:207:28: note: each undeclared identifier is reported only once for each function it appears in > > and it's fixed by including linux_dep.h from log.c. Oops, that was careless. Fixed for the next spin. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson