From: Darrick J. Wong Date: Mon, 24 Feb 2025 18:22:07 +0000 (-0800) Subject: mkfs: validate CoW extent size hint when rtinherit is set X-Git-Tag: v6.14.0~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c811cfb491a4d6e9af88c1b32eca72417aaada19;p=thirdparty%2Fxfsprogs-dev.git mkfs: validate CoW extent size hint when rtinherit is set Extent size hints exist to nudge the behavior of the file data block allocator towards trying to make aligned allocations. Therefore, it doesn't make sense to allow a hint that isn't a multiple of the fundamental allocation unit for a given file. This means that if the sysadmin is formatting with rtinherit set on the root dir, validate_cowextsize_hint needs to check the hint value on a simulated realtime file to make sure that it's correct. This hasn't been necessary in the past since one cannot have a CoW hint without a reflink filesystem, and we previously didn't allow rt reflink filesystems. Signed-off-by: "Darrick J. Wong" Reviewed-by: Christoph Hellwig --- diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index da83fb36..9dc71fb8 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -2985,6 +2985,26 @@ _("illegal CoW extent size hint %lld, must be less than %u.\n"), min(XFS_MAX_BMBT_EXTLEN, mp->m_sb.sb_agblocks / 2)); usage(); } + + /* + * If the value is to be passed on to realtime files, revalidate with + * a realtime file so that we know the hint and flag that get passed on + * to realtime files will be correct. + */ + if (!(cli->fsx.fsx_xflags & FS_XFLAG_RTINHERIT)) + return; + + fa = libxfs_inode_validate_cowextsize(mp, cli->fsx.fsx_cowextsize, + S_IFREG, XFS_DIFLAG_REALTIME, flags2); + + if (fa) { + fprintf(stderr, +_("illegal CoW extent size hint %lld, must be less than %u and a multiple of %u. %p\n"), + (long long)cli->fsx.fsx_cowextsize, + min(XFS_MAX_BMBT_EXTLEN, mp->m_sb.sb_agblocks / 2), + mp->m_sb.sb_rextsize, fa); + usage(); + } } /* Complain if this filesystem is not a supported configuration. */