Skip to content

Commit

Permalink
xfs: detach inode dquots at the end of inactivation
Browse files Browse the repository at this point in the history
Once we're done with inactivating an inode, we're finished updating
metadata for that inode.  This means that we can detach the dquots at
the end and not have to wait for reclaim to do it for us.

Signed-off-by: Darrick J. Wong <[email protected]>
Reviewed-by: Dave Chinner <[email protected]>
  • Loading branch information
Darrick J. Wong committed Jun 3, 2021
1 parent 1ad2cfe commit 3ea06d7
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 12 deletions.
2 changes: 1 addition & 1 deletion fs/xfs/xfs_icache.c
Original file line number Diff line number Diff line change
Expand Up @@ -1093,7 +1093,7 @@ xfs_reclaim_inode(
* unlocked after the lookup before we go ahead and free it.
*/
xfs_ilock(ip, XFS_ILOCK_EXCL);
xfs_qm_dqdetach(ip);
ASSERT(!ip->i_udquot && !ip->i_gdquot && !ip->i_pdquot);
xfs_iunlock(ip, XFS_ILOCK_EXCL);
ASSERT(xfs_inode_clean(ip));

Expand Down
22 changes: 11 additions & 11 deletions fs/xfs/xfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1716,19 +1716,19 @@ xfs_inactive(
*/
if (VFS_I(ip)->i_mode == 0) {
ASSERT(ip->i_df.if_broot_bytes == 0);
return;
goto out;
}

mp = ip->i_mount;
ASSERT(!xfs_iflags_test(ip, XFS_IRECOVERY));

/* If this is a read-only mount, don't do this (would generate I/O) */
if (mp->m_flags & XFS_MOUNT_RDONLY)
return;
goto out;

/* Metadata inodes require explicit resource cleanup. */
if (xfs_is_metadata_inode(ip))
return;
goto out;

/* Try to clean out the cow blocks if there are any. */
if (xfs_inode_has_cow_data(ip))
Expand All @@ -1747,7 +1747,7 @@ xfs_inactive(
if (xfs_can_free_eofblocks(ip, true))
xfs_free_eofblocks(ip);

return;
goto out;
}

if (S_ISREG(VFS_I(ip)->i_mode) &&
Expand All @@ -1757,14 +1757,14 @@ xfs_inactive(

error = xfs_qm_dqattach(ip);
if (error)
return;
goto out;

if (S_ISLNK(VFS_I(ip)->i_mode))
error = xfs_inactive_symlink(ip);
else if (truncate)
error = xfs_inactive_truncate(ip);
if (error)
return;
goto out;

/*
* If there are attributes associated with the file then blow them away
Expand All @@ -1774,7 +1774,7 @@ xfs_inactive(
if (XFS_IFORK_Q(ip)) {
error = xfs_attr_inactive(ip);
if (error)
return;
goto out;
}

ASSERT(!ip->i_afp);
Expand All @@ -1783,12 +1783,12 @@ xfs_inactive(
/*
* Free the inode.
*/
error = xfs_inactive_ifree(ip);
if (error)
return;
xfs_inactive_ifree(ip);

out:
/*
* Release the dquots held by inode, if any.
* We're done making metadata updates for this inode, so we can release
* the attached dquots.
*/
xfs_qm_dqdetach(ip);
}
Expand Down

0 comments on commit 3ea06d7

Please sign in to comment.