xfs: don't pick up IOLOCK during rmapbt repair scan
authorDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:55:15 +0000 (14:55 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 21:59:02 +0000 (14:59 -0700)
Now that we've fixed the directory operations to hold the ILOCK until
they're finished with rmapbt updates for directory shape changes, we no
longer need to take this lock when scanning directories for rmapbt
records.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/scrub/rmap_repair.c

index e8e07b683eab696676138cf9143d0d8fd76ca5ff..25acd69614c2ceb92a5d7c3fff09ae64d7f44623 100644 (file)
@@ -578,23 +578,9 @@ xrep_rmap_scan_inode(
        struct xrep_rmap        *rr,
        struct xfs_inode        *ip)
 {
-       unsigned int            lock_mode = 0;
+       unsigned int            lock_mode = xrep_rmap_scan_ilock(ip);
        int                     error;
 
-       /*
-        * Directory updates (create/link/unlink/rename) drop the directory's
-        * ILOCK before finishing any rmapbt updates associated with directory
-        * shape changes.  For this scan to coordinate correctly with the live
-        * update hook, we must take the only lock (i_rwsem) that is held all
-        * the way to dir op completion.  This will get fixed by the parent
-        * pointer patchset.
-        */
-       if (S_ISDIR(VFS_I(ip)->i_mode)) {
-               lock_mode = XFS_IOLOCK_SHARED;
-               xfs_ilock(ip, lock_mode);
-       }
-       lock_mode |= xrep_rmap_scan_ilock(ip);
-
        /* Check the data fork. */
        error = xrep_rmap_scan_ifork(rr, ip, XFS_DATA_FORK);
        if (error)