xfs: streamline the directory iteration code for scrub
authorDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:17 +0000 (19:00 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:17 +0000 (19:00 -0700)
commit4c233b5c4f29dff11eeb64b2b1cc0831b9904a4f
tree4e2dd6ce8ae2f1d2894f1b3ac9cd92ac6b09a897
parent9dceccc5822f2ecea12a89f24d7cad1f3e5eab7c
xfs: streamline the directory iteration code for scrub

Currently, online scrub reuses the xfs_readdir code to walk every entry
in a directory.  This isn't awesome for performance, since we end up
cycling the directory ILOCK needlessly and coding around the particular
quirks of the VFS dir_context interface.

Create a streamlined version of readdir that keeps the ILOCK (since the
walk function isn't going to copy stuff to userspace), skips a whole lot
of directory walk cursor checks (since we start at 0 and walk to the
end) and has a sane way to return error codes.

Note: Porting the dotdot checking code is left for a subsequent patch.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/Makefile
fs/xfs/scrub/dir.c
fs/xfs/scrub/parent.c
fs/xfs/scrub/readdir.c [new file with mode: 0644]
fs/xfs/scrub/readdir.h [new file with mode: 0644]