Patch "xfs: flush inode gc workqueue before clearing agi bucket" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    xfs: flush inode gc workqueue before clearing agi bucket

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     xfs-flush-inode-gc-workqueue-before-clearing-agi-buc.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 8f948ad0ae2dd0d2d0f83a858ebb3a9af97215e0
Author: Zhang Yi <yi.zhang@xxxxxxxxxx>
Date:   Wed Nov 15 18:28:22 2023 -0800

    xfs: flush inode gc workqueue before clearing agi bucket
    
    [ Upstream commit 04a98a036cf8b810dda172a9dcfcbd783bf63655 ]
    
    In the procedure of recover AGI unlinked lists, if something bad
    happenes on one of the unlinked inode in the bucket list, we would call
    xlog_recover_clear_agi_bucket() to clear the whole unlinked bucket list,
    not the unlinked inodes after the bad one. If we have already added some
    inodes to the gc workqueue before the bad inode in the list, we could
    get below error when freeing those inodes, and finaly fail to complete
    the log recover procedure.
    
     XFS (ram0): Internal error xfs_iunlink_remove at line 2456 of file
     fs/xfs/xfs_inode.c.  Caller xfs_ifree+0xb0/0x360 [xfs]
    
    The problem is xlog_recover_clear_agi_bucket() clear the bucket list, so
    the gc worker fail to check the agino in xfs_verify_agino(). Fix this by
    flush workqueue before clearing the bucket.
    
    Fixes: ab23a7768739 ("xfs: per-cpu deferred inode inactivation queues")
    Signed-off-by: Zhang Yi <yi.zhang@xxxxxxxxxx>
    Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
    Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx>
    Signed-off-by: Dave Chinner <david@xxxxxxxxxxxxx>
    Signed-off-by: Leah Rumancik <leah.rumancik@xxxxxxxxx>
    Acked-by: Chandan Babu R <chandanbabu@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index aeb01d4c0423b..04961ebf16ea2 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2739,6 +2739,7 @@ xlog_recover_process_one_iunlink(
 	 * Call xlog_recover_clear_agi_bucket() to perform a transaction to
 	 * clear the inode pointer in the bucket.
 	 */
+	xfs_inodegc_flush(mp);
 	xlog_recover_clear_agi_bucket(mp, agno, bucket);
 	return NULLAGINO;
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux