On Wed, Jul 14, 2021 at 02:19:02PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > This provides separation of mount time feature flags from runtime > mount flags and mount option state. It also makes the feature > checks use the same interface as the superblock features. i.e. we > don't care if the feature is enabled by superblock flags or mount > options, we just care if it's enabled or not. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_mount.h | 50 +++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 47 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index 8c0f928febac..b0e8c3825ce8 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -258,6 +258,25 @@ typedef struct xfs_mount { > #define XFS_FEAT_BIGTIME (1ULL << 24) /* large timestamps */ > #define XFS_FEAT_NEEDSREPAIR (1ULL << 25) /* needs xfs_repair */ > > +/* Mount features */ > +#define XFS_FEAT_NOATTR2 (1ULL << 48) /* disable attr2 creation */ > +#define XFS_FEAT_NOALIGN (1ULL << 49) /* ignore alignment */ > +#define XFS_FEAT_ALLOCSIZE (1ULL << 50) /* user specified allocation size */ > +#define XFS_FEAT_LARGE_IOSIZE (1ULL << 51) /* report large preferred > + * I/O size in stat() */ > +#define XFS_FEAT_WSYNC (1ULL << 52) /* synchronous metadata ops */ > +#define XFS_FEAT_DIRSYNC (1ULL << 53) /* synchronous directory ops */ > +#define XFS_FEAT_DISCARD (1ULL << 54) /* discard unused blocks */ > +#define XFS_FEAT_GRPID (1ULL << 55) /* group-ID assigned from directory */ > +#define XFS_FEAT_SMALL_INUMS (1ULL << 56) /* user wants 32bit inodes */ > +#define XFS_FEAT_IKEEP (1ULL << 57) /* keep empty inode clusters*/ > +#define XFS_FEAT_SWALLOC (1ULL << 58) /* stripe width allocation */ > +#define XFS_FEAT_FILESTREAMS (1ULL << 59) /* use filestreams allocator */ > +#define XFS_FEAT_DAX_ALWAYS (1ULL << 60) /* DAX always enabled */ > +#define XFS_FEAT_DAX_NEVER (1ULL << 61) /* DAX never enabled */ > +#define XFS_FEAT_NORECOVERY (1ULL << 62) /* no recovery - dirty fs */ > +#define XFS_FEAT_NOUUID (1ULL << 63) /* ignore uuid during mount */ > + > #define __XFS_HAS_FEAT(name, NAME) \ > static inline bool xfs_has_ ## name (struct xfs_mount *mp) \ > { \ > @@ -273,6 +292,7 @@ static inline void xfs_add_ ## name (struct xfs_mount *mp) \ > xfs_sb_version_add ## name(&mp->m_sb); \ > } > > +/* Superblock features */ > __XFS_ADD_FEAT(attr, ATTR) > __XFS_HAS_FEAT(nlink, NLINK) > __XFS_ADD_FEAT(quota, QUOTA) > @@ -296,9 +316,33 @@ __XFS_HAS_FEAT(reflink, REFLINK) > __XFS_HAS_FEAT(sparseinodes, SPINODES) > __XFS_HAS_FEAT(metauuid, META_UUID) > __XFS_HAS_FEAT(realtime, REALTIME) > -__XFS_HAS_FEAT(inobtcounts, REALTIME) > -__XFS_HAS_FEAT(bigtime, REALTIME) > -__XFS_HAS_FEAT(needsrepair, REALTIME) > +__XFS_HAS_FEAT(inobtcounts, INOBTCNT) > +__XFS_HAS_FEAT(bigtime, BIGTIME) > +__XFS_HAS_FEAT(needsrepair, NEEDSREPAIR) This ought to go in the previous patch. Otherwise looks fine to me, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > + > +/* > + * Mount features > + * > + * These do not change dynamically - features that can come and go, > + * such as 32 bit inodes and read-only state, are kept as flags rather than > + * features. > + */ > +__XFS_HAS_FEAT(noattr2, NOATTR2) > +__XFS_HAS_FEAT(noalign, NOALIGN) > +__XFS_HAS_FEAT(allocsize, ALLOCSIZE) > +__XFS_HAS_FEAT(large_iosize, LARGE_IOSIZE) > +__XFS_HAS_FEAT(wsync, WSYNC) > +__XFS_HAS_FEAT(dirsync, DIRSYNC) > +__XFS_HAS_FEAT(discard, DISCARD) > +__XFS_HAS_FEAT(grpid, GRPID) > +__XFS_HAS_FEAT(small_inums, SMALL_INUMS) > +__XFS_HAS_FEAT(ikeep, IKEEP) > +__XFS_HAS_FEAT(swalloc, SWALLOC) > +__XFS_HAS_FEAT(filestreams, FILESTREAMS) > +__XFS_HAS_FEAT(dax_always, DAX_ALWAYS) > +__XFS_HAS_FEAT(dax_never, DAX_NEVER) > +__XFS_HAS_FEAT(norecovery, NORECOVERY) > +__XFS_HAS_FEAT(nouuid, NOUUID) > > /* > * Flags for m_flags. > -- > 2.31.1 >