@@ -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.
@@ -67,17 +67,17 @@ libxfs_device_zero(struct xfs_buftarg *btp, xfs_daddr_t start, uint len)
ssize_t zsize, bytes;
size_t len_bytes;
char *z;
- int error;
start_offset = LIBXFS_BBTOOFF64(start);
/* 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);
- if (!error) {
+#if defined(FALLOC_FL_ZERO_RANGE)
+ if (!fallocate(fd, FALLOC_FL_ZERO_RANGE, start_offset, len_bytes)) {
xfs_buftarg_trip_write(btp);
return 0;
}
+#endif
zsize = min(BDSTRAT_SIZE, BBTOB(len));
if ((z = memalign(libxfs_device_alignment(), zsize)) == NULL) {
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> --- V2: remove error variable, add to commit msg NOTE: compile tested only