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>
Showing
- fs/xfs/Makefile 1 addition, 0 deletionsfs/xfs/Makefile
- fs/xfs/scrub/dir.c 58 additions, 130 deletionsfs/xfs/scrub/dir.c
- fs/xfs/scrub/parent.c 20 additions, 53 deletionsfs/xfs/scrub/parent.c
- fs/xfs/scrub/readdir.c 375 additions, 0 deletionsfs/xfs/scrub/readdir.c
- fs/xfs/scrub/readdir.h 19 additions, 0 deletionsfs/xfs/scrub/readdir.h
Please register or sign in to comment