Hi! > 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. > Agree, will check BTRFS_IOC_SNAP_DESTROY_V2 in configure.ac. Best Regards Yang Xu >> >> 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.