All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zorro Lang <zlang@kernel.org>
To: Lukas Herbolt <lukas@herbolt.com>
Cc: fstests@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH] src/locktest.c: fix build failure of struct delegation
Date: Mon, 12 Oct 2026 22:42:50 +0800	[thread overview]
Message-ID: <aszxpKDR3-Ktb0dE@zlang-mailbox> (raw)
In-Reply-To: <dabaefbef09950a167e315b05c6c2fe7@herbolt.com>

On Wed, Oct 07, 2026 at 07:30:12PM +0200, Lukas Herbolt wrote:
> On 2026-09-13 16:29, Zorro Lang wrote:
> > On Thu, Aug 13, 2026 at 11:08:46PM +0800, Zorro Lang wrote:
> > > 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 <fcntl.h>.
> > > 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 <zlang@kernel.org>
> > > ---
> > > 
> > > 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
> > > <linux/fcntl.h>,
> > > but we cannot simply include both <fcntl.h> and <linux/fcntl.h> 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?
> > 
> > Friendly ping...
> > 
> > Am I the only one seeing this? Without this patch, xfstests won't
> > compile on
> > the latest Fedora:
> >   glibc-devel-2.44.9000-1.fc46.x86_64
> >   gcc-16.2.1-2.fc46.x86_64
> > 
> > I keep running into the build error below [1].
> > 
> > Thanks,
> > Zorro
> > 
> > [1]
> > locktest.c: In function 'initialize':
> > locktest.c:1018:17: warning: variable 'offset' set but not used
> > [-Wunused-but-set-variable=]
> >  1018 |     int         offset = 0;
> >       |                 ^~~~~~
> > locktest.c: In function 'release_lease':
> > locktest.c:1065:16: error: variable 'deleg' has initializer but
> > incomplete type
> >  1065 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                ^~~~~~~~~~
> > locktest.c:1065:38: error: 'struct delegation' has no member named
> > 'd_type'
> >  1065 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                                      ^~~~~~
> > locktest.c:1065:47: warning: excess elements in struct initializer
> >  1065 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                                               ^~~~~~~
> > locktest.c:1065:47: note: (near initialization for 'deleg')
> > locktest.c:1065:27: error: storage size of 'deleg' isn't known
> >  1065 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                           ^~~~~
> > locktest.c:1065:27: warning: unused variable 'deleg' [-Wunused-variable]
> > locktest.c: In function 'do_deleg':
> > locktest.c:1365:12: error: variable 'deleg' has initializer but
> > incomplete type
> >  1365 |     struct delegation deleg = { .d_type = arg };
> >       |            ^~~~~~~~~~
> > locktest.c:1365:34: error: 'struct delegation' has no member named
> > 'd_type'
> >  1365 |     struct delegation deleg = { .d_type = arg };
> >       |                                  ^~~~~~
> > locktest.c:1365:43: warning: excess elements in struct initializer
> >  1365 |     struct delegation deleg = { .d_type = arg };
> >       |                                           ^~~
> > locktest.c:1365:43: note: (near initialization for 'deleg')
> > locktest.c:1365:23: error: storage size of 'deleg' isn't known
> >  1365 |     struct delegation deleg = { .d_type = arg };
> >       |                       ^~~~~
> > locktest.c:1365:23: warning: unused variable 'deleg' [-Wunused-variable]
> > locktest.c: In function 'main':
> > locktest.c:1615:16: error: variable 'deleg' has initializer but
> > incomplete type
> >  1615 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                ^~~~~~~~~~
> > locktest.c:1615:38: error: 'struct delegation' has no member named
> > 'd_type'
> >  1615 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                                      ^~~~~~
> > locktest.c:1615:47: warning: excess elements in struct initializer
> >  1615 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                                               ^~~~~~~
> > locktest.c:1615:47: note: (near initialization for 'deleg')
> > locktest.c:1615:27: error: storage size of 'deleg' isn't known
> >  1615 |         struct delegation deleg = { .d_type = F_UNLCK };
> >       |                           ^~~~~
> > locktest.c:1615:27: warning: unused variable 'deleg' [-Wunused-variable]
> >     [CC]    chprojid_fail
> >     [CC]    detached_mounts_propagation
> > gmake[2]: *** [Makefile:139: locktest] Error 1
> > gmake[2]: *** Waiting for unfinished jobs....
> > gmake[1]: *** [include/buildrules:30: src] Error 2
> > make: *** [Makefile:65: default] Error 2
> > 
> > > 
> > > 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 <stddef.h>
> > >  #include <linux/btrfs.h>
> > >  ]])
> > > +AC_CHECK_TYPES([struct delegation], [], [], [[
> > > +#include <stddef.h>
> > > +#include <fcntl.h>
> > > +]])
> > >  AC_CHECK_HEADERS([linux/btrfs.h linux/btrfs_tree.h])
> > >  AC_CHECK_MEMBERS([struct btrfs_ioctl_vol_args_v2.subvolid], [], [],
> > > [[
> > >  #include <stddef.h>
> > > 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
> > > 
> > > 
> 
> Hit the same on fedora-rawhide looks good to me.
> Reviewed-by: "Lukas Herbolt" <lukas@herbolt.com>

Thanks! I finally don't have to keep rebasing this patch locally :)

> 
> -- 
> -lhe
> 

      reply	other threads:[~2026-10-12 14:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-13 15:08 [PATCH] src/locktest.c: fix build failure of struct delegation Zorro Lang
2026-09-13 14:29 ` Zorro Lang
2026-10-07 17:30   ` Lukas Herbolt
2026-10-12 14:42     ` Zorro Lang [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aszxpKDR3-Ktb0dE@zlang-mailbox \
    --to=zlang@kernel.org \
    --cc=fstests@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=lukas@herbolt.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.