Skip to content

Commit

Permalink
xfs: restore allocation trylock iteration
Browse files Browse the repository at this point in the history
It was accidentally dropped when refactoring the allocation code,
resulting in the AG iteration always doing blocking AG iteration.
This results in a small performance regression for a specific fsmark
test that runs more user data writer threads than there are AGs.

Reported-by: kernel test robot <oliver.sang@intel.com>
Fixes: 2edf06a ("xfs: factor xfs_alloc_vextent_this_ag() for _iterate_ags()")
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
  • Loading branch information
Dave Chinner authored and dchinner committed Jun 4, 2023
1 parent 89a4bf0 commit 00dcd17
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions fs/xfs/libxfs/xfs_alloc.c
Original file line number Diff line number Diff line change
@@ -3187,7 +3187,8 @@ xfs_alloc_vextent_check_args(
*/
static int
xfs_alloc_vextent_prepare_ag(
struct xfs_alloc_arg *args)
struct xfs_alloc_arg *args,
uint32_t flags)
{
bool need_pag = !args->pag;
int error;
@@ -3196,7 +3197,7 @@ xfs_alloc_vextent_prepare_ag(
args->pag = xfs_perag_get(args->mp, args->agno);

args->agbp = NULL;
error = xfs_alloc_fix_freelist(args, 0);
error = xfs_alloc_fix_freelist(args, flags);
if (error) {
trace_xfs_alloc_vextent_nofix(args);
if (need_pag)
@@ -3336,7 +3337,7 @@ xfs_alloc_vextent_this_ag(
return error;
}

error = xfs_alloc_vextent_prepare_ag(args);
error = xfs_alloc_vextent_prepare_ag(args, 0);
if (!error && args->agbp)
error = xfs_alloc_ag_vextent_size(args);

@@ -3380,7 +3381,7 @@ xfs_alloc_vextent_iterate_ags(
for_each_perag_wrap_range(mp, start_agno, restart_agno,
mp->m_sb.sb_agcount, agno, args->pag) {
args->agno = agno;
error = xfs_alloc_vextent_prepare_ag(args);
error = xfs_alloc_vextent_prepare_ag(args, flags);
if (error)
break;
if (!args->agbp) {
@@ -3546,7 +3547,7 @@ xfs_alloc_vextent_exact_bno(
return error;
}

error = xfs_alloc_vextent_prepare_ag(args);
error = xfs_alloc_vextent_prepare_ag(args, 0);
if (!error && args->agbp)
error = xfs_alloc_ag_vextent_exact(args);

@@ -3587,7 +3588,7 @@ xfs_alloc_vextent_near_bno(
if (needs_perag)
args->pag = xfs_perag_grab(mp, args->agno);

error = xfs_alloc_vextent_prepare_ag(args);
error = xfs_alloc_vextent_prepare_ag(args, 0);
if (!error && args->agbp)
error = xfs_alloc_ag_vextent_near(args);

0 comments on commit 00dcd17

Please sign in to comment.