Hi all, This patchset improves the performance of log incompat feature bit handling by making a few changes to how the filesystem handles them. First, we now only clear the bits during a clean unmount to reduce calls to the (expensive) upgrade function to once per bit per mount. Second, we now only allow incompat feature upgrades for sysadmins or if the sysadmin explicitly allows it via mount option. Currently the only log incompat user is logged xattrs, which requires CONFIG_XFS_DEBUG=y, so there should be no user visible impact to this change. If you're going to start using this code, I strongly recommend pulling from my git trees, which are linked below. This has been running on the djcloud for months with no problems. Enjoy! Comments and questions are, as always, welcome. --D kernel git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=log-incompat-permissions-6.10 --- Commits in this patchset: * xfs: pass xfs_buf lookup flags to xfs_*read_agi * xfs: fix an AGI lock acquisition ordering problem in xrep_dinode_findmode * xfs: fix potential AGI <-> ILOCK ABBA deadlock in xrep_dinode_findmode_walk_directory * xfs: fix error bailout in xrep_abt_build_new_trees * xfs: only clear log incompat flags at clean unmount --- .../filesystems/xfs/xfs-online-fsck-design.rst | 3 - fs/xfs/libxfs/xfs_ag.c | 8 ++- fs/xfs/libxfs/xfs_ialloc.c | 16 ++++-- fs/xfs/libxfs/xfs_ialloc.h | 5 +- fs/xfs/libxfs/xfs_ialloc_btree.c | 4 +- fs/xfs/scrub/alloc_repair.c | 2 - fs/xfs/scrub/common.c | 4 +- fs/xfs/scrub/fscounters.c | 2 - fs/xfs/scrub/inode_repair.c | 50 ++++++++++++++++++++ fs/xfs/scrub/iscan.c | 36 ++++++++++++++ fs/xfs/scrub/iscan.h | 15 ++++++ fs/xfs/scrub/repair.c | 6 +- fs/xfs/scrub/trace.h | 10 +++- fs/xfs/xfs_inode.c | 8 ++- fs/xfs/xfs_iwalk.c | 4 +- fs/xfs/xfs_log.c | 28 ----------- fs/xfs/xfs_log.h | 2 - fs/xfs/xfs_log_priv.h | 3 - fs/xfs/xfs_log_recover.c | 19 +------- fs/xfs/xfs_mount.c | 8 +++ fs/xfs/xfs_mount.h | 6 ++ fs/xfs/xfs_xattr.c | 42 ++--------------- 22 files changed, 160 insertions(+), 121 deletions(-)