summaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_icache.c
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2020-05-21 23:08:47 +0300
committerDarrick J. Wong <darrick.wong@oracle.com>2020-05-27 18:49:26 +0300
commit9be0590453cdae1b7aa2eb08515cc140ecc850c3 (patch)
treedaa82bf13dee4d4e6fef810ba6564756abec42ce /fs/xfs/xfs_icache.c
parent43d24bcf19d139b904752b5727def241920cff37 (diff)
downloadlinux-9be0590453cdae1b7aa2eb08515cc140ecc850c3.tar.xz
xfs: remove xfs_inode_ag_iterator_flags
Combine xfs_inode_ag_iterator_flags and xfs_inode_ag_iterator_tag into a single wrapper function since there's only one caller of the _flags variant. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_icache.c')
-rw-r--r--fs/xfs/xfs_icache.c43
1 files changed, 13 insertions, 30 deletions
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 89c935b29021..77dfbcfff06c 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -976,38 +976,22 @@ xfs_cowblocks_worker(
xfs_queue_cowblocks(mp);
}
-int
-xfs_inode_ag_iterator_flags(
+/* Fetch the next (possibly tagged) per-AG structure. */
+static inline struct xfs_perag *
+xfs_inode_walk_get_perag(
struct xfs_mount *mp,
- int (*execute)(struct xfs_inode *ip, int flags,
- void *args),
- int flags,
- void *args,
- int iter_flags)
+ xfs_agnumber_t agno,
+ int tag)
{
- struct xfs_perag *pag;
- int error = 0;
- int last_error = 0;
- xfs_agnumber_t ag;
-
- ag = 0;
- while ((pag = xfs_perag_get(mp, ag))) {
- ag = pag->pag_agno + 1;
- error = xfs_inode_ag_walk(mp, pag, execute, flags, args,
- XFS_ICI_NO_TAG, iter_flags);
- xfs_perag_put(pag);
- if (error) {
- last_error = error;
- if (error == -EFSCORRUPTED)
- break;
- }
- }
- return last_error;
+ 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_tag(
+xfs_inode_ag_iterator(
struct xfs_mount *mp,
+ int iter_flags,
int (*execute)(struct xfs_inode *ip, int flags,
void *args),
int flags,
@@ -1020,10 +1004,10 @@ xfs_inode_ag_iterator_tag(
xfs_agnumber_t ag;
ag = 0;
- while ((pag = xfs_perag_get_tag(mp, ag, tag))) {
+ while ((pag = xfs_inode_walk_get_perag(mp, ag, tag))) {
ag = pag->pag_agno + 1;
error = xfs_inode_ag_walk(mp, pag, execute, flags, args, tag,
- 0);
+ iter_flags);
xfs_perag_put(pag);
if (error) {
last_error = error;
@@ -1543,8 +1527,7 @@ __xfs_icache_free_eofblocks(
if (eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC))
flags = SYNC_WAIT;
- return xfs_inode_ag_iterator_tag(mp, execute, flags,
- eofb, tag);
+ return xfs_inode_ag_iterator(mp, 0, execute, flags, eofb, tag);
}
int