On Mon, Aug 23, 2021 at 11:21:38AM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > The struct btrfs_ioctl_vol_args_v2 in /usr/include/linux/btrfs.h on my > system predates the inclusion of the "subvolid" field. This causes the > following build failure: > > idmapped-mounts.c: In function 'btrfs_delete_subvolume_id': > idmapped-mounts.c:9730:6: error: 'struct btrfs_ioctl_vol_args_v2' has no member named 'subvolid' > 9730 | args.subvolid = subvolid; > | ^ > > Since this source file contains its own more uptodate copy of that > structure, add some more autoconf/cpp magic so that we can override the > struct definition if the system header doesn't have the desired field. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- Thanks, I just hit it[1] too. This patch works on my old and new systems, so good and helpful to me. I'd like to see it can be merged ASAP. Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx> [1] [CC] idmapped-mounts [CC] mount-idmapped idmapped-mounts.c: In function 'btrfs_delete_subvolume_id': idmapped-mounts.c:9730:6: error: 'struct btrfs_ioctl_vol_args_v2' has no member named 'subvolid' args.subvolid = subvolid; ^ gmake[3]: *** [Makefile:30: idmapped-mounts] Error 1 gmake[2]: *** [../include/buildrules:30: idmapped-mounts] Error 2 gmake[1]: *** [include/buildrules:30: src] Error 2 > configure.ac | 2 +- > src/idmapped-mounts/idmapped-mounts.c | 6 +++++- > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 4117a302..36960910 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -79,7 +79,7 @@ AC_CHECK_TYPES([struct btrfs_ioctl_ino_lookup_args], [], [], [[#include <linux/b > AC_CHECK_TYPES([struct btrfs_ioctl_ino_lookup_user_args], [], [], [[#include <linux/btrfs.h>]]) > AC_CHECK_TYPES([struct btrfs_ioctl_get_subvol_rootref_args], [], [], [[#include <linux/btrfs.h>]]) > AC_CHECK_HEADERS([linux/btrfs.h linux/btrfs_tree.h]) > - > +AC_CHECK_MEMBERS([struct btrfs_ioctl_vol_args_v2.subvolid], [], [], [[#include <linux/btrfs.h>]]) > > AC_CONFIG_HEADER(include/config.h) > AC_CONFIG_FILES([include/builddefs]) > diff --git a/src/idmapped-mounts/idmapped-mounts.c b/src/idmapped-mounts/idmapped-mounts.c > index 78b7cc09..40eb2cc6 100644 > --- a/src/idmapped-mounts/idmapped-mounts.c > +++ b/src/idmapped-mounts/idmapped-mounts.c > @@ -23,7 +23,11 @@ > #include <unistd.h> > > #ifdef HAVE_LINUX_BTRFS_H > +# ifndef HAVE_STRUCT_BTRFS_IOCTL_VOL_ARGS_V2_SUBVOLID > +# define btrfs_ioctl_vol_args_v2 override_btrfs_ioctl_vol_args_v2 > +# endif > #include <linux/btrfs.h> > +# undef btrfs_ioctl_vol_args_v2 > #endif > > #ifdef HAVE_LINUX_BTRFS_TREE_H > @@ -9570,7 +9574,7 @@ struct btrfs_qgroup_inherit { > }; > #endif > > -#ifndef HAVE_STRUCT_BTRFS_IOCTL_VOL_ARGS_V2 > +#if !defined(HAVE_STRUCT_BTRFS_IOCTL_VOL_ARGS_V2) || !defined(HAVE_STRUCT_BTRFS_IOCTL_VOL_ARGS_V2_SUBVOLID) > > #ifndef BTRFS_SUBVOL_NAME_MAX > #define BTRFS_SUBVOL_NAME_MAX 4039 >