]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfsprogs: remove platform_zero_range wrapper
authorEric Sandeen <sandeen@sandeen.net>
Fri, 7 Jun 2024 15:24:52 +0000 (10:24 -0500)
committerCarlos Maiolino <cem@kernel.org>
Mon, 17 Jun 2024 11:51:49 +0000 (13:51 +0200)
Now that the HAVE_FALLOCATE guard around including
<linux/falloc.h> in linux/xfs.h has been removed via
15fb447f ("configure: don't check for fallocate"),
bad things can happen because we reference fallocate in
<xfs/linux.h> without defining _GNU_SOURCE:

$ cat test.c
#include <xfs/linux.h>

int main(void)
{
return 0;
}

$ gcc -o test test.c
In file included from test.c:1:
/usr/include/xfs/linux.h: In function ‘platform_zero_range’:
/usr/include/xfs/linux.h:186:15: error: implicit declaration of function ‘fallocate’ [-Wimplicit-function-declaration]
  186 |         ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, start, len);
      |               ^~~~~~~~~

i.e. xfs/linux.h includes fcntl.h without _GNU_SOURCE, so we
don't get an fallocate prototype.

Rather than playing games with header files, just remove the
platform_zero_range() wrapper - we have only one platform, and
only one caller after all - and simply call fallocate directly
if we have the FALLOC_FL_ZERO_RANGE flag defined.

(LTP also runs into this sort of problem at configure time ...)

Darrick points out that this changes a public header, but
platform_zero_range() has only been exposed by default
(without the oddball / internal xfsprogs guard) for a couple
of xfsprogs releases, so it's quite unlikely that anyone is
using this oddball fallocate wrapper.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
V2: remove error variable, add to commit msg
V3: Drop FALLOC_FL_ZERO_RANGE #ifdef per hch's suggestion and
    add his RVB from V2, with changes.

NOTE: compile tested only

include/linux.h
libxfs/rdwr.c

index 95a0deee25945cf00a6339964e438acd04f4a481..a13072d2f3af349dd958aa39aac150a3b4da7d0a 100644 (file)
@@ -174,24 +174,6 @@ static inline void platform_mntent_close(struct mntent_cursor * cursor)
        endmntent(cursor->mtabp);
 }
 
-#if defined(FALLOC_FL_ZERO_RANGE)
-static inline int
-platform_zero_range(
-       int             fd,
-       xfs_off_t       start,
-       size_t          len)
-{
-       int ret;
-
-       ret = fallocate(fd, FALLOC_FL_ZERO_RANGE, start, len);
-       if (!ret)
-               return 0;
-       return -errno;
-}
-#else
-#define platform_zero_range(fd, s, l)  (-EOPNOTSUPP)
-#endif
-
 /*
  * Use SIGKILL to simulate an immediate program crash, without a chance to run
  * atexit handlers.
index 50760cd866e3efa2e217b8dee217d07fa62a87cd..0a87e5b6da9fab4af354394b01ecba44f83e4d0d 100644 (file)
@@ -77,7 +77,7 @@ libxfs_device_zero(struct xfs_buftarg *btp, xfs_daddr_t start, uint len)
 
        /* try to use special zeroing methods, fall back to writes if needed */
        len_bytes = LIBXFS_BBTOOFF64(len);
-       error = platform_zero_range(fd, start_offset, len_bytes);
+       error = fallocate(fd, FALLOC_FL_ZERO_RANGE, start_offset, len_bytes);
        if (!error) {
                xfs_buftarg_trip_write(btp);
                return 0;