On Fri, Apr 22, 2022 at 10:12:26AM -0400, Brian Foster wrote: > The filestream AG selection loop uses pagf data to aid in AG > selection, which depends on pagf initialization. If the in-core > structure is not initialized, the caller invokes the AGF read path > to do so and carries on. If another task enters the loop and finds > a pagf init already in progress, the AGF read returns -EAGAIN and > the task continues the loop. This does not increment the current ag > index, however, which means the task spins on the current AGF buffer > until unlocked. > > If the AGF read I/O submitted by the initial task happens to be > delayed for whatever reason, this results in soft lockup warnings Is there a specific 'whatever reason' going on here? > via the spinning task. This is reproduced by xfs/170. To avoid this > problem, fix the AGF trylock failure path to properly iterate to the > next AG. If a task iterates all AGs without making progress, the > trylock behavior is dropped in favor of blocking locks and thus a > soft lockup is no longer possible. > > Fixes: f48e2df8a877ca1c ("xfs: make xfs_*read_agf return EAGAIN to ALLOC_FLAG_TRYLOCK callers") Ooops, this was a major braino on my part. Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> > --- > > I included the Fixes: tag because this looks like a regression in said > commit, but I've not explicitly verified. > > Brian > > fs/xfs/xfs_filestream.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c > index 6a3ce0f6dc9e..be9bcf8a1f99 100644 > --- a/fs/xfs/xfs_filestream.c > +++ b/fs/xfs/xfs_filestream.c > @@ -128,11 +128,12 @@ xfs_filestream_pick_ag( > if (!pag->pagf_init) { > err = xfs_alloc_pagf_init(mp, NULL, ag, trylock); > if (err) { > - xfs_perag_put(pag); > - if (err != -EAGAIN) > + if (err != -EAGAIN) { > + xfs_perag_put(pag); > return err; > + } > /* Couldn't lock the AGF, skip this AG. */ > - continue; > + goto next_ag; > } > } > > -- > 2.34.1 >