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 *);
#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
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. */