summaryrefslogtreecommitdiff
path: root/fs/xfs/scrub
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2024-04-25 15:16:59 +0200
committerChandan Babu R <chandanbabu@kernel.org>2024-04-26 11:19:03 +0530
commit14ee22fef420c864c0869419e54aa4e88f64b4e6 (patch)
tree98cd75e66707afa3511e0b700fa0a7cee173b972 /fs/xfs/scrub
parent08e012a62de877e77d7d44d5bddace63d760741b (diff)
xfs: factor out a xfs_dir_lookup_args helper
Add a helper to switch between the different directory formats for lookup and to handle the -EEXIST return for a successful lookup. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Diffstat (limited to 'fs/xfs/scrub')
-rw-r--r--fs/xfs/scrub/readdir.c35
1 files changed, 1 insertions, 34 deletions
diff --git a/fs/xfs/scrub/readdir.c b/fs/xfs/scrub/readdir.c
index 28a94c78b0b1..0ac77359d8e9 100644
--- a/fs/xfs/scrub/readdir.c
+++ b/fs/xfs/scrub/readdir.c
@@ -328,7 +328,6 @@ xchk_dir_lookup(
.op_flags = XFS_DA_OP_OKNOENT,
.owner = dp->i_ino,
};
- bool isblock, isleaf;
int error;
if (xfs_is_shutdown(dp->i_mount))
@@ -344,39 +343,7 @@ xchk_dir_lookup(
ASSERT(S_ISDIR(VFS_I(dp)->i_mode));
xfs_assert_ilocked(dp, XFS_ILOCK_SHARED | XFS_ILOCK_EXCL);
- if (dp->i_df.if_format == XFS_DINODE_FMT_LOCAL) {
- error = xfs_dir2_sf_lookup(&args);
- goto out_check_rval;
- }
-
- /* dir2 functions require that the data fork is loaded */
- error = xfs_iread_extents(sc->tp, dp, XFS_DATA_FORK);
- if (error)
- return error;
-
- error = xfs_dir2_isblock(&args, &isblock);
- if (error)
- return error;
-
- if (isblock) {
- error = xfs_dir2_block_lookup(&args);
- goto out_check_rval;
- }
-
- error = xfs_dir2_isleaf(&args, &isleaf);
- if (error)
- return error;
-
- if (isleaf) {
- error = xfs_dir2_leaf_lookup(&args);
- goto out_check_rval;
- }
-
- error = xfs_dir2_node_lookup(&args);
-
-out_check_rval:
- if (error == -EEXIST)
- error = 0;
+ error = xfs_dir_lookup_args(&args);
if (!error)
*ino = args.inumber;
return error;