From 6db4a409524d7a4749c8094286b6afbcd01b97dc Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Fri, 12 Apr 2024 07:58:26 +0200 Subject: [PATCH] FOLD: xfs: refactor is static metadata inode checks --- include/xfs_inode.h | 24 ++++++++++++++++++++++++ libxfs/libxfs_api_defs.h | 2 +- repair/rmap.c | 2 +- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/include/xfs_inode.h b/include/xfs_inode.h index 70b960a46..0f4ba3284 100644 --- a/include/xfs_inode.h +++ b/include/xfs_inode.h @@ -404,6 +404,30 @@ static inline bool xfs_is_metadir_inode(struct xfs_inode *ip) return ip->i_diflags2 & XFS_DIFLAG2_METADIR; } +/* + * Before metadata directories, the only metadata inodes were the three quota + * files, the realtime bitmap, and the realtime summary. + */ +static inline bool xfs_is_static_metadata_ino(struct xfs_mount *mp, + xfs_ino_t ino) +{ + if (xfs_has_metadir(mp)) + return false; + return ino == mp->m_sb.sb_uquotino || + ino == mp->m_sb.sb_gquotino || + ino == mp->m_sb.sb_pquotino || + ino == mp->m_sb.sb_rbmino || + ino == mp->m_sb.sb_rsumino; +} + +static inline bool xfs_is_metadata_inode(struct xfs_inode *ip) +{ + /* Any file in the metadata directory tree is a metadata inode. */ + if (xfs_has_metadir(ip->i_mount)) + return xfs_is_metadir_inode(ip); + return xfs_is_static_metadata_ino(ip->i_mount, ip->i_ino); +} + extern void libxfs_trans_inode_alloc_buf (struct xfs_trans *, struct xfs_buf *); diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h index d75df95a7..21daf7ad6 100644 --- a/libxfs/libxfs_api_defs.h +++ b/libxfs/libxfs_api_defs.h @@ -231,7 +231,7 @@ #define xfs_inode_validate_cowextsize libxfs_inode_validate_cowextsize #define xfs_inode_validate_extsize libxfs_inode_validate_extsize -#define xfs_internal_inum libxfs_internal_inum +#define xfs_is_static_metadata_ino libxfs_is_static_metadata_ino #define xfs_iread_extents libxfs_iread_extents #define xfs_irele libxfs_irele diff --git a/repair/rmap.c b/repair/rmap.c index 27e56bcaa..222021fc7 100644 --- a/repair/rmap.c +++ b/repair/rmap.c @@ -1111,7 +1111,7 @@ rmap_shareable( return false; /* Metadata in files are never shareable */ - if (libxfs_internal_inum(mp, rmap->rm_owner)) + if (libxfs_is_static_metadata_ino(mp, rmap->rm_owner)) return false; /* Metadata and unwritten file blocks are not shareable. */ -- 2.50.1