Hi Theodore, Thanks for your reply.
> On Thu, Dec 11, 2025 at 07:51:42PM +0800, Li Chen wrote: > > Fast commits only log operations that have dedicated replay support. > > EXT4_IOC_GROUP_EXTEND grows the filesystem to the end of the last > > block group and updates the same on-disk metadata without going > > through the fast commit tracking paths. > > In practice these operations are rare and usually followed by further > > updates, but mixing them into a fast commit makes the overall > > semantics harder to reason about and risks replay gaps if new call > > sites appear. > > > > Teach ext4 to mark the filesystem fast-commit ineligible when > > EXT4_IOC_GROUP_EXTEND grows the filesystem. > > This forces those transactions to fall back to a full commit, > > ensuring that the group extension changes are captured by the normal > > journal rather than partially encoded in fast commit TLVs. > > This change should not affect common workloads but makes online > > resize via GROUP_EXTEND safer and easier to reason about under fast > > commit. > > > > Testing: > > 1. prepare: > > dd if=/dev/zero of=/root/fc_resize.img bs=1M count=0 seek=256 > > mkfs.ext4 -O fast_commit -F /root/fc_resize.img > > mkdir -p /mnt/fc_resize && mount -t ext4 -o loop /root/fc_resize.img > > /mnt/fc_resize > > 2. Extended the filesystem to the end of the last block group using a > > helper that calls EXT4_IOC_GROUP_EXTEND on the mounted filesystem > > and checked fc_info: > > ./group_extend_helper /mnt/fc_resize > > cat /proc/fs/ext4/loop0/fc_info > > shows the "Resize" ineligible reason increased. > > 3. Fsynced a file on the resized filesystem and confirmed that the fast > > commit ineligible counter incremented for the resize transaction: > > touch /mnt/fc_resize/file > > /root/fsync_file /mnt/fc_resize/file > > sync > > cat /proc/fs/ext4/loop0/fc_info > > > > Signed-off-by: Li Chen <[email protected]> > > I'm curious what version of the kernel you were testing against? I > needed to mnake the final fix up to allow the patch to compile: I'm sorry I didn't mention the kernel version in the cover letter. This patchset is built against 7d0a66e4bb90 (tag: v6.18) Linux 6.18. Regards, Li > diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c > index 9354083222b1..ce1f738dff93 100644 > --- a/fs/ext4/move_extent.c > +++ b/fs/ext4/move_extent.c > @@ -321,7 +321,8 @@ static int mext_move_extent(struct mext_data *mext, u64 > *m_len) > ret = PTR_ERR(handle); > goto out; > } > - ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_MOVE_EXT, handle); > + ext4_fc_mark_ineligible(orig_inode->i_sb, EXT4_FC_REASON_MOVE_EXT, > + handle); > > ret = mext_move_begin(mext, folio, &move_type); > if (ret) > > - Ted >
