FAILED: patch "[PATCH] xfs: don't ignore runtime errors in xrep_iunlink_reload_next" failed to apply to 6.12-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x 0052633527158b49762ab427e73924e4f8d25e6c
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026082011-careless-penalize-eae8@gregkh' --subject-prefix 'PATCH 6.12.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0052633527158b49762ab427e73924e4f8d25e6c Mon Sep 17 00:00:00 2001
From: "Darrick J. Wong" <[email protected]>
Date: Sun, 26 Jul 2026 22:26:52 -0700
Subject: [PATCH] xfs: don't ignore runtime errors in xrep_iunlink_reload_next
LOLLM complained that this function ignores runtime errors being returned by xrep_iunlink_store_*. Rework the function signature so that we can return runtime errors to abort the repair.
fs/xfs/scrub/agheader_repair.c +22 -10
@@ -1041,31 +1041,40 @@ xrep_iunlink_next(* the chain or if we should stop walking the chain due to corruption; or a * per-AG inode number. */ -STATIC xfs_agino_t +STATIC intxrep_iunlink_reload_next (struct xrep_agi *ragi,xfs_agino_t prev_agino, -xfs_agino_t agino) +xfs_agino_t agino, +xfs_agino_t *next_agino) {struct xfs_scrub *sc = ragi->sc;struct xfs_inode *ip; -xfs_agino_t ret =NULLAGINO ;int error; + *next_agino =NULLAGINO ; + error =xchk_iget (ragi->sc,xfs_agino_to_ino (sc->sa.pag, agino), &ip);if (error) -return ret; +return 0 ;trace_xrep_iunlink_reload_next (ip, prev_agino);/* If this is a linked inode, stop processing the chain. */ if (VFS_I (ip)->i_nlink !=0 ) { -xrep_iunlink_store_next (ragi, agino,NULLAGINO ); + error =xrep_iunlink_store_next (ragi, agino,NULLAGINO ); +if (error) +return error; + + error =xrep_iunlink_store_prev (ragi, agino,LINKED_AGINO ); +if (error) +return error; + goto rele; } ip->i_prev_unlinked = prev_agino; - ret = ip->i_next_unlinked; + *next_agino = ip->i_next_unlinked;/* * Drop the inode reference that we just took. We hold the AGI, so
@@ -1074,7 +1083,7 @@ xrep_iunlink_reload_next(*/ rele:xchk_irele (sc, ip); -return ret; +return 0 ; }/*
@@ -1114,9 +1123,12 @@ xrep_iunlink_walk_ondisk_bucket(break ; next_agino =xrep_iunlink_next (sc, agino); -if (!next_agino) - next_agino =xrep_iunlink_reload_next (ragi, prev_agino, - agino); +if (!next_agino) { + error =xrep_iunlink_reload_next (ragi, prev_agino, + agino, &next_agino); +if (error) +break ; + } error =xagino_bitmap_set (&seen, agino,1 );if (error)