* [PATCH V3] xfsprogs: remove platform_zero_range wrapper
@ 2024-06-07 15:24 Eric Sandeen
2024-06-12 18:28 ` Darrick J. Wong
2024-06-19 16:17 ` Petr Vorel
0 siblings, 2 replies; 3+ messages in thread
From: Eric Sandeen @ 2024-06-07 15:24 UTC (permalink / raw)
To: linux-xfs@vger.kernel.org
Cc: Carlos Maiolino, Christoph Hellwig, Zorro Lang, Darrick J. Wong
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>
---
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
diff --git a/include/linux.h b/include/linux.h
index 95a0deee..a13072d2 100644
--- a/include/linux.h
+++ b/include/linux.h
@@ -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.
diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c
index 153007d5..b54505b5 100644
--- a/libxfs/rdwr.c
+++ b/libxfs/rdwr.c
@@ -73,7 +73,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;
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V3] xfsprogs: remove platform_zero_range wrapper
2024-06-07 15:24 [PATCH V3] xfsprogs: remove platform_zero_range wrapper Eric Sandeen
@ 2024-06-12 18:28 ` Darrick J. Wong
2024-06-19 16:17 ` Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: Darrick J. Wong @ 2024-06-12 18:28 UTC (permalink / raw)
To: Eric Sandeen
Cc: linux-xfs@vger.kernel.org, Carlos Maiolino, Christoph Hellwig,
Zorro Lang
On Fri, Jun 07, 2024 at 10:24:52AM -0500, Eric Sandeen wrote:
> 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>
Ok I'm convinced
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
>
> 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
>
> diff --git a/include/linux.h b/include/linux.h
> index 95a0deee..a13072d2 100644
> --- a/include/linux.h
> +++ b/include/linux.h
> @@ -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.
> diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c
> index 153007d5..b54505b5 100644
> --- a/libxfs/rdwr.c
> +++ b/libxfs/rdwr.c
> @@ -73,7 +73,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;
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH V3] xfsprogs: remove platform_zero_range wrapper
2024-06-07 15:24 [PATCH V3] xfsprogs: remove platform_zero_range wrapper Eric Sandeen
2024-06-12 18:28 ` Darrick J. Wong
@ 2024-06-19 16:17 ` Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: Petr Vorel @ 2024-06-19 16:17 UTC (permalink / raw)
To: sandeen, linux-xfs@vger.kernel.org
Cc: cmaiolino, djwong, hch, zlang, Petr Vorel
From: Eric Sandeen <sandeen@sandeen.net>
> 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.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Tested-by: Petr Vorel <pvorel@suse.cz>
I suppose this should be added
Fixes: 9d6023a8 ("libxfs: use FALLOC_FL_ZERO_RANGE in libxfs_device_zero")
Kind regards,
Petr
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> ---
> 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
> diff --git a/include/linux.h b/include/linux.h
> index 95a0deee..a13072d2 100644
> --- a/include/linux.h
> +++ b/include/linux.h
> @@ -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.
> diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c
> index 153007d5..b54505b5 100644
> --- a/libxfs/rdwr.c
> +++ b/libxfs/rdwr.c
> @@ -73,7 +73,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;
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-06-19 16:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-07 15:24 [PATCH V3] xfsprogs: remove platform_zero_range wrapper Eric Sandeen
2024-06-12 18:28 ` Darrick J. Wong
2024-06-19 16:17 ` Petr Vorel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox