summaryrefslogtreecommitdiff
path: root/fs/xfs/libxfs/xfs_inode_buf.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/libxfs/xfs_inode_buf.c')
-rw-r--r--fs/xfs/libxfs/xfs_inode_buf.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
index 045118c7bf78..23c19e632c2d 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.c
+++ b/fs/xfs/libxfs/xfs_inode_buf.c
@@ -589,6 +589,19 @@ xfs_inode_validate_extsize(
inherit_flag = (flags & XFS_DIFLAG_EXTSZINHERIT);
extsize_bytes = XFS_FSB_TO_B(mp, extsize);
+ /*
+ * This comment describes a historic gap in this verifier function.
+ * On older kernels, XFS doesnt't check that the extent size hint is
+ * an integer multiple of the rt extent size on a directory with both
+ * RTINHERIT and EXTSZINHERIT flags set. This results in corruption
+ * shutdowns when the misaligned hint propagates into new realtime
+ * files, since they do check the rextsize alignment of the hint for
+ * files with the REALTIME flag set. There could be filesystems with
+ * misconfigured directories in the wild, so we cannot add it to the
+ * verifier now because that would cause new corruption shutdowns on
+ * the directories.
+ */
+
if (rt_flag)
blocksize_bytes = mp->m_sb.sb_rextsize << mp->m_sb.sb_blocklog;
else