Re: [PATCH 2/5] xfs: ensuere deleting item from AIL after shutdown in dquot flush

Darrick J. Wong
2024-08-23T17:00:06Z

On Fri, Aug 23, 2024 at 07:04:36PM +0800, Long Li wrote:
> Deleting items from the AIL before the log is shut down can result in the
> log tail moving forward in the journal on disk because log writes can still
> be taking place. As a result, items that have been deleted from the AIL
> might not be recovered during the next mount, even though they should be,
> as they were never written back to disk.
>
> Signed-off-by: Long Li <leo.lilong@huawei.com>
> ---
> fs/xfs/xfs_dquot.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index c1b211c260a9..4cbe3db6fc32 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -1332,9 +1332,15 @@ xfs_qm_dqflush(
> return 0;
>
> out_abort:
> + /*
> + * Shutdown first to stop the log before deleting items from the AIL.
> + * Deleting items from the AIL before the log is shut down can result
> + * in the log tail moving forward in the journal on disk because log
> + * writes can still be taking place.
> + */
> + xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> dqp->q_flags &= ~XFS_DQFLAG_DIRTY;
> xfs_trans_ail_delete(lip, 0);
> - xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);

I see the logic in shutting down the log before letting go of the dquot
log item that triggered the shutdown, but I wonder, why do we delete the
item from the AIL? AFAICT the inode items don't do that on iflush
failure, but OTOH I couldn't figure out how the log items in the AIL get
deleted from the AIL after a shutdown. Or maybe during a shutdown we
just stop xfsaild and let the higher level objects free the log items
during reclaim?

--D

> out_unlock:
> xfs_dqfunlock(dqp);
> return error;
> --
> 2.39.2
>
>