Commit 34ef5e17 authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: don't pick up IOLOCK during rmapbt repair scan

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: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 69291726
...@@ -578,23 +578,9 @@ xrep_rmap_scan_inode( ...@@ -578,23 +578,9 @@ xrep_rmap_scan_inode(
struct xrep_rmap *rr, struct xrep_rmap *rr,
struct xfs_inode *ip) struct xfs_inode *ip)
{ {
unsigned int lock_mode = 0; unsigned int lock_mode = xrep_rmap_scan_ilock(ip);
int error; 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. */ /* Check the data fork. */
error = xrep_rmap_scan_ifork(rr, ip, XFS_DATA_FORK); error = xrep_rmap_scan_ifork(rr, ip, XFS_DATA_FORK);
if (error) if (error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment