On Fri, Jan 26, 2024 at 03:04:23AM -0500, Yang Xu wrote: > On some platform, struct btrfs_ioctl_vol_args_v2 is defined, but the > macros BTRFS_IOC_SNAP_DESTROY_V2, BTRFS_IOC_SNAP_CREATE_V2 and > BTRFS_IOC_SUBVOL_CREATE_V2 are not defined. This will cause compile > error. We should always check these macros and manually define them > if necessary. The BTRFS_IOC_SNAP_DESTROY_V2 was been added in 5.7 but the other two have been around since ages. This looks like there are missing configure-time checks for the macros. > > Signed-off-by: Yang Xu <xuyang2018.jy@xxxxxxxxxxx> > --- > src/t_snapshot_deleted_subvolume.c | 30 +++++++++++++++--------------- > 1 file changed, 15 insertions(+), 15 deletions(-) > > diff --git a/src/t_snapshot_deleted_subvolume.c b/src/t_snapshot_deleted_subvolume.c > index c3adb1c4..d84ba35a 100644 > --- a/src/t_snapshot_deleted_subvolume.c > +++ b/src/t_snapshot_deleted_subvolume.c > @@ -20,21 +20,6 @@ > #define BTRFS_IOCTL_MAGIC 0x94 > #endif > > -#ifndef BTRFS_IOC_SNAP_DESTROY_V2 > -#define BTRFS_IOC_SNAP_DESTROY_V2 \ > - _IOW(BTRFS_IOCTL_MAGIC, 63, struct btrfs_ioctl_vol_args_v2) > -#endif > - > -#ifndef BTRFS_IOC_SNAP_CREATE_V2 > -#define BTRFS_IOC_SNAP_CREATE_V2 \ > - _IOW(BTRFS_IOCTL_MAGIC, 23, struct btrfs_ioctl_vol_args_v2) > -#endif > - > -#ifndef BTRFS_IOC_SUBVOL_CREATE_V2 > -#define BTRFS_IOC_SUBVOL_CREATE_V2 \ > - _IOW(BTRFS_IOCTL_MAGIC, 24, struct btrfs_ioctl_vol_args_v2) > -#endif > - > #ifndef BTRFS_SUBVOL_NAME_MAX > #define BTRFS_SUBVOL_NAME_MAX 4039 > #endif > @@ -58,6 +43,21 @@ struct btrfs_ioctl_vol_args_v2 { > }; > #endif > > +#ifndef BTRFS_IOC_SNAP_DESTROY_V2 > +#define BTRFS_IOC_SNAP_DESTROY_V2 \ > + _IOW(BTRFS_IOCTL_MAGIC, 63, struct btrfs_ioctl_vol_args_v2) > +#endif > + > +#ifndef BTRFS_IOC_SNAP_CREATE_V2 > +#define BTRFS_IOC_SNAP_CREATE_V2 \ > + _IOW(BTRFS_IOCTL_MAGIC, 23, struct btrfs_ioctl_vol_args_v2) > +#endif > + > +#ifndef BTRFS_IOC_SUBVOL_CREATE_V2 > +#define BTRFS_IOC_SUBVOL_CREATE_V2 \ > + _IOW(BTRFS_IOCTL_MAGIC, 24, struct btrfs_ioctl_vol_args_v2) > +#endif So you're moving the conditional definitions out of the ifdef that includes the header where they're supposedly defined, this should be really done in configure and ifdef only BTRFS_IOC_SNAP_DESTROY_V2 as it's the newest one.