mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 02:21:39 -04:00
xfs: pass runtime errors from xrep_iunlink_mark_ondisk_rec up to callers
LOLLM points out that the only error that xrep_iunlink_mark_ondisk_rec
returns is ENOMEM, but we ignore that, and can end up writing a garbage
AGI based on incomplete information. We shouldn't do that, though here
we must be screen out EFSCORRUPTED/EFSBASDCRC because we haven't
checked the inobt yet.
Cc: stable@vger.kernel.org # v6.10
Fixes: ab97f4b1c0 ("xfs: repair AGI unlinked inode bucket lists")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
committed by
Carlos Maiolino
parent
6b9cd54013
commit
5644fab990
@@ -1309,7 +1309,7 @@ xrep_iunlink_mark_ondisk_rec(
|
||||
* iunlink_bmp. We haven't checked the inobt yet, so we don't error out if
|
||||
* the btree is corrupt.
|
||||
*/
|
||||
STATIC void
|
||||
STATIC int
|
||||
xrep_iunlink_mark_ondisk(
|
||||
struct xrep_agi *ragi)
|
||||
{
|
||||
@@ -1321,6 +1321,14 @@ xrep_iunlink_mark_ondisk(
|
||||
cur = xfs_inobt_init_cursor(sc->sa.pag, sc->tp, agi_bp);
|
||||
error = xfs_btree_query_all(cur, xrep_iunlink_mark_ondisk_rec, ragi);
|
||||
xfs_btree_del_cursor(cur, error);
|
||||
|
||||
/*
|
||||
* Don't proceed if we couldn't set a bit in the bitmap. All other
|
||||
* errors we ignore because we haven't actually checked the inobt yet.
|
||||
*/
|
||||
if (error == -ENOMEM)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1508,7 +1516,9 @@ xrep_iunlink_rebuild_buckets(
|
||||
* If there are ondisk inodes that are unlinked and are not been loaded
|
||||
* into cache, record them in iunlink_bmp.
|
||||
*/
|
||||
xrep_iunlink_mark_ondisk(ragi);
|
||||
error = xrep_iunlink_mark_ondisk(ragi);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* Walk each iunlink bucket to (re)construct as much of the incore list
|
||||
|
||||
Reference in New Issue
Block a user