]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: fix rtgroup cleanup in CoW fork repair
authorYingjie Gao <gaoyingjie@uniontech.com>
Wed, 27 May 2026 04:31:34 +0000 (12:31 +0800)
committerCarlos Maiolino <cem@kernel.org>
Sat, 30 May 2026 06:26:18 +0000 (08:26 +0200)
xrep_cow_find_bad_rt() initializes scrub rtgroup state before the
force-rebuild path calls xrep_cow_mark_file_range(). If that call
fails, the code jumps directly to out_rtg, which skips the scrub
rtgroup cleanup and only drops the local rtgroup reference.

Remove the unnecessary jump so the function falls through to out_sr,
ensuring the realtime cursors, lock state, and sr->rtg reference are
released before returning.

Fixes: fd97fe111208 ("xfs: fix CoW forks for realtime files")
Cc: <stable@vger.kernel.org> # v6.14
Signed-off-by: Yingjie Gao <gaoyingjie@uniontech.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/scrub/cow_repair.c

index a6ff09ace43df65f70a1f11c3c2db55414c22561..c25716fc4feee41ed105fb1aeccc65d73fd9ab6d 100644 (file)
@@ -382,12 +382,9 @@ xrep_cow_find_bad_rt(
         * CoW fork and then scan for staging extents in the refcountbt.
         */
        if ((sc->sm->sm_flags & XFS_SCRUB_IFLAG_FORCE_REBUILD) ||
-           XFS_TEST_ERROR(sc->mp, XFS_ERRTAG_FORCE_SCRUB_REPAIR)) {
+           XFS_TEST_ERROR(sc->mp, XFS_ERRTAG_FORCE_SCRUB_REPAIR))
                error = xrep_cow_mark_file_range(xc, xc->irec.br_startblock,
                                xc->irec.br_blockcount);
-               if (error)
-                       goto out_rtg;
-       }
 
 out_sr:
        xchk_rtgroup_btcur_free(&sc->sr);