mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 16:30:52 +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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For a given per-AG structure @pag, grab, @execute, and rele all incore
|
||||||
|
* inodes with the given radix tree @tag.
|
||||||
|
*/
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_inode_ag_walk(
|
xfs_inode_ag_walk(
|
||||||
struct xfs_mount *mp,
|
struct xfs_mount *mp,
|
||||||
@ -916,6 +920,50 @@ xfs_inode_ag_walk(
|
|||||||
return last_error;
|
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
|
* Background scanning to trim post-EOF preallocated space. This is queued
|
||||||
* based on the 'speculative_prealloc_lifetime' tunable (5m by default).
|
* based on the 'speculative_prealloc_lifetime' tunable (5m by default).
|
||||||
@ -979,46 +1027,6 @@ xfs_cowblocks_worker(
|
|||||||
xfs_queue_cowblocks(mp);
|
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.
|
* Grab the inode for reclaim exclusively.
|
||||||
* Return 0 if we grabbed it, non-zero otherwise.
|
* Return 0 if we grabbed it, non-zero otherwise.
|
||||||
|
Loading…
Reference in New Issue
Block a user