Since glibc commit f2e3dacbff88 ("Add new constants from Linux 6.12, 6.18 and 6.19 to bits/fcntl-linux.h"), the F_GETDELEG and F_SETDELEG constants from Linux 6.19 have been added directly into . However, the corresponding full definition for 'struct delegation' was not included in glibc's userspace wrapper. That causes below build error: locktest.c:1065:16: error: variable 'deleg' has initializer but incomplete type 1065 | struct delegation deleg = { .d_type = F_UNLCK }; ... Fix this by isolating the definition of 'struct delegation' from the command macros via autoconf capability probing: 1. Add an AC_CHECK_TYPES check for 'struct delegation' in configure.ac. 2. In locktest.c, unbind 'struct delegation' from the '#ifndef F_GETDELEG' guard and wrap it with '#ifndef HAVE_STRUCT_DELEGATION' instead. Signed-off-by: Zorro Lang --- Hi, fstests currently fails to build against the latest glibc, with the root cause detailed in the commit log above. The glibc now defines F_GETDELEG and F_SETDELEG, but leaves out the actual 'struct delegation' definition. The complete struct is available in , but we cannot simply include both and due to nasty namespace redefinition conflicts. I am not entirely sure if glibc will bring in 'struct delegation', so for now, I chose to decouple and handle the structure definition independently via autoconf. Any thoughts or better suggestions on how we should handle this transition? Thanks, Zorro configure.ac | 4 ++++ src/locktest.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/configure.ac b/configure.ac index feb24ddd..6d7ff3ba 100644 --- a/configure.ac +++ b/configure.ac @@ -111,6 +111,10 @@ AC_CHECK_TYPES([struct btrfs_ioctl_received_subvol_args], [], [], [[ #include #include ]]) +AC_CHECK_TYPES([struct delegation], [], [], [[ +#include +#include +]]) AC_CHECK_HEADERS([linux/btrfs.h linux/btrfs_tree.h]) AC_CHECK_MEMBERS([struct btrfs_ioctl_vol_args_v2.subvolid], [], [], [[ #include diff --git a/src/locktest.c b/src/locktest.c index 54ee1f07..d0264c94 100644 --- a/src/locktest.c +++ b/src/locktest.c @@ -80,7 +80,9 @@ extern int h_errno; #ifndef F_GETDELEG #define F_GETDELEG (1024 + 15) #define F_SETDELEG (1024 + 16) +#endif +#ifndef HAVE_STRUCT_DELEGATION struct delegation { uint32_t d_flags; uint16_t d_type; -- 2.55.0