On Tue, Aug 13, 2024 at 09:35:00AM +0200, Christoph Hellwig wrote: > Update the localy provided statx definition to the latest kernel UAPI, > and use it unconditionally instead only if no kernel version is provided. > > This allows using more recent additions than provided in the system > headers. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > src/statx.h | 32 ++++++++++++++++++++++++++------ > 1 file changed, 26 insertions(+), 6 deletions(-) > > diff --git a/src/statx.h b/src/statx.h > index 3f239d791..ab29fe22d 100644 > --- a/src/statx.h > +++ b/src/statx.h > @@ -28,8 +28,6 @@ > # endif > #endif > > -#ifndef STATX_TYPE > - > /* > * Timestamp structure for the timestamps in struct statx. > * > @@ -44,6 +42,7 @@ > * > * __reserved is held in case we need a yet finer resolution. > */ > +#define statx_timestamp statx_timestamp_fstests Might want to put these #defines at the top with a comment so that future people copy-pastaing too fast (i.e. me) don't obliterate them accidentally. /* * Use a fstests-specific name for these structures so we can always * find the latest version of the abi. */ #define statx_timestamp statx_timestamp_fstests #define statx statx_fstests [all the statx.h stuff here] Otherwise looks fine to me. --D > struct statx_timestamp { > __s64 tv_sec; > __s32 tv_nsec; > @@ -87,6 +86,7 @@ struct statx_timestamp { > * will have values installed for compatibility purposes so that stat() and > * co. can be emulated in userspace. > */ > +#define statx statx_fstests > struct statx { > /* 0x00 */ > __u32 stx_mask; /* What results were written [uncond] */ > @@ -102,7 +102,8 @@ struct statx { > __u64 stx_ino; /* Inode number */ > __u64 stx_size; /* File size */ > __u64 stx_blocks; /* Number of 512-byte blocks allocated */ > - __u64 __spare1[1]; > + __u64 stx_attributes_mask; /* Mask to show what's supported in stx_attributes */ > + > /* 0x40 */ > struct statx_timestamp stx_atime; /* Last access time */ > struct statx_timestamp stx_btime; /* File creation time */ > @@ -114,7 +115,18 @@ struct statx { > __u32 stx_dev_major; /* ID of device containing file [uncond] */ > __u32 stx_dev_minor; > /* 0x90 */ > - __u64 __spare2[14]; /* Spare space for future expansion */ > + __u64 stx_mnt_id; > + __u32 stx_dio_mem_align; /* Memory buffer alignment for direct I/O */ > + __u32 stx_dio_offset_align; /* File offset alignment for direct I/O */ > + /* 0xa0 */ > + __u64 stx_subvol; /* Subvolume identifier */ > + __u32 stx_atomic_write_unit_min; /* Min atomic write unit in bytes */ > + __u32 stx_atomic_write_unit_max; /* Max atomic write unit in bytes */ > + /* 0xb0 */ > + __u32 stx_atomic_write_segments_max; /* Max atomic write segment count */ > + __u32 __spare1[1]; > + /* 0xb8 */ > + __u64 __spare3[9]; /* Spare space for future expansion */ > /* 0x100 */ > }; > > @@ -139,6 +151,12 @@ struct statx { > #define STATX_BLOCKS 0x00000400U /* Want/got stx_blocks */ > #define STATX_BASIC_STATS 0x000007ffU /* The stuff in the normal stat struct */ > #define STATX_BTIME 0x00000800U /* Want/got stx_btime */ > +#define STATX_MNT_ID 0x00001000U /* Got stx_mnt_id */ > +#define STATX_DIOALIGN 0x00002000U /* Want/got direct I/O alignment info */ > +#define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */ > +#define STATX_SUBVOL 0x00008000U /* Want/got stx_subvol */ > +#define STATX_WRITE_ATOMIC 0x00010000U /* Want/got atomic_write_* fields */ > + > #define STATX_ALL 0x00000fffU /* All currently supported flags */ > > /* > @@ -157,9 +175,11 @@ struct statx { > #define STATX_ATTR_APPEND 0x00000020 /* [I] File is append-only */ > #define STATX_ATTR_NODUMP 0x00000040 /* [I] File is not to be dumped */ > #define STATX_ATTR_ENCRYPTED 0x00000800 /* [I] File requires key to decrypt in fs */ > - > #define STATX_ATTR_AUTOMOUNT 0x00001000 /* Dir: Automount trigger */ > -#endif /* STATX_TYPE */ > +#define STATX_ATTR_MOUNT_ROOT 0x00002000 /* Root of a mount */ > +#define STATX_ATTR_VERITY 0x00100000 /* [I] Verity protected file */ > +#define STATX_ATTR_DAX 0x00200000 /* File is currently in DAX state */ > +#define STATX_ATTR_WRITE_ATOMIC 0x00400000 /* File supports atomic write operations */ > > static inline > int xfstests_statx(int dfd, const char *filename, unsigned flags, > -- > 2.43.0 > >