From: Darrick J. Wong Date: Wed, 29 May 2024 04:11:54 +0000 (-0700) Subject: xfs: allow inodes with zero extents but nonzero nblocks X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=89db291db4e5a3dbaa67ecb200fcff8fd64d6a67;p=users%2Fhch%2Fxfs.git xfs: allow inodes with zero extents but nonzero nblocks Metadata inodes that store btrees will have zero extents and a nonzero nblocks. Adjust the inode verifier so that this combination is not flagged. Signed-off-by: Darrick J. Wong --- diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c index d01ca89a9369..0466b8a41aaa 100644 --- a/fs/xfs/libxfs/xfs_inode_buf.c +++ b/fs/xfs/libxfs/xfs_inode_buf.c @@ -634,9 +634,6 @@ xfs_dinode_verify( if (mode && nextents + naextents > nblocks) return __this_address; - if (nextents + naextents == 0 && nblocks != 0) - return __this_address; - if (S_ISDIR(mode) && nextents > mp->m_dir_geo->max_extents) return __this_address; @@ -740,6 +737,19 @@ xfs_dinode_verify( return fa; } + /* metadata inodes containing btrees always have zero extent count */ + if (flags2 & XFS_DIFLAG2_METADIR) { + switch (XFS_DFORK_FORMAT(dip, XFS_DATA_FORK)) { + case XFS_DINODE_FMT_RMAP: + break; + default: + if (nextents + naextents == 0 && nblocks != 0) + return __this_address; + break; + } + } else if (nextents + naextents == 0 && nblocks != 0) + return __this_address; + return NULL; }