mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 14:30:58 +07:00
xfs: move xfs_inode_ag_iterator to be closer to the perag walking code
Move the xfs_inode_ag_iterator function to be nearer xfs_inode_ag_walk so that we don't have to scroll back and forth to figure out how the incore inode walking function works. No functional changes. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
7e88d31423
commit
5662d38ccd
@ -811,6 +811,10 @@ xfs_inode_ag_walk_grab(
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* For a given per-AG structure @pag, grab, @execute, and rele all incore
|
||||
* inodes with the given radix tree @tag.
|
||||
*/
|
||||
STATIC int
|
||||
xfs_inode_ag_walk(
|
||||
struct xfs_mount *mp,
|
||||
@ -916,6 +920,50 @@ xfs_inode_ag_walk(
|
||||
return last_error;
|
||||
}
|
||||
|
||||
/* Fetch the next (possibly tagged) per-AG structure. */
|
||||
static inline struct xfs_perag *
|
||||
xfs_inode_walk_get_perag(
|
||||
struct xfs_mount *mp,
|
||||
xfs_agnumber_t agno,
|
||||
int tag)
|
||||
{
|
||||
if (tag == XFS_ICI_NO_TAG)
|
||||
return xfs_perag_get(mp, agno);
|
||||
return xfs_perag_get_tag(mp, agno, tag);
|
||||
}
|
||||
|
||||
/*
|
||||
* Call the @execute function on all incore inodes matching the radix tree
|
||||
* @tag.
|
||||
*/
|
||||
int
|
||||
xfs_inode_ag_iterator(
|
||||
struct xfs_mount *mp,
|
||||
int iter_flags,
|
||||
int (*execute)(struct xfs_inode *ip, void *args),
|
||||
void *args,
|
||||
int tag)
|
||||
{
|
||||
struct xfs_perag *pag;
|
||||
int error = 0;
|
||||
int last_error = 0;
|
||||
xfs_agnumber_t ag;
|
||||
|
||||
ag = 0;
|
||||
while ((pag = xfs_inode_walk_get_perag(mp, ag, tag))) {
|
||||
ag = pag->pag_agno + 1;
|
||||
error = xfs_inode_ag_walk(mp, pag, execute, args, tag,
|
||||
iter_flags);
|
||||
xfs_perag_put(pag);
|
||||
if (error) {
|
||||
last_error = error;
|
||||
if (error == -EFSCORRUPTED)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return last_error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Background scanning to trim post-EOF preallocated space. This is queued
|
||||
* based on the 'speculative_prealloc_lifetime' tunable (5m by default).
|
||||
@ -979,46 +1027,6 @@ xfs_cowblocks_worker(
|
||||
xfs_queue_cowblocks(mp);
|
||||
}
|
||||
|
||||
/* Fetch the next (possibly tagged) per-AG structure. */
|
||||
static inline struct xfs_perag *
|
||||
xfs_inode_walk_get_perag(
|
||||
struct xfs_mount *mp,
|
||||
xfs_agnumber_t agno,
|
||||
int tag)
|
||||
{
|
||||
if (tag == XFS_ICI_NO_TAG)
|
||||
return xfs_perag_get(mp, agno);
|
||||
return xfs_perag_get_tag(mp, agno, tag);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_inode_ag_iterator(
|
||||
struct xfs_mount *mp,
|
||||
int iter_flags,
|
||||
int (*execute)(struct xfs_inode *ip, void *args),
|
||||
void *args,
|
||||
int tag)
|
||||
{
|
||||
struct xfs_perag *pag;
|
||||
int error = 0;
|
||||
int last_error = 0;
|
||||
xfs_agnumber_t ag;
|
||||
|
||||
ag = 0;
|
||||
while ((pag = xfs_inode_walk_get_perag(mp, ag, tag))) {
|
||||
ag = pag->pag_agno + 1;
|
||||
error = xfs_inode_ag_walk(mp, pag, execute, args, tag,
|
||||
iter_flags);
|
||||
xfs_perag_put(pag);
|
||||
if (error) {
|
||||
last_error = error;
|
||||
if (error == -EFSCORRUPTED)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return last_error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Grab the inode for reclaim exclusively.
|
||||
* Return 0 if we grabbed it, non-zero otherwise.
|
||||
|
Loading…
Reference in New Issue
Block a user