Skip to content

Commit

Permalink
[XFS] Unlock inode before calling xfs_idestroy()
Browse files Browse the repository at this point in the history
Lock debugging reported the ilock was being destroyed without being
unlocked. We don't need to lock the inode until we are going to insert it
into the radix tree.

SGI-PV: 987246

SGI-Modid: xfs-linux-melb:xfs-kern:32159a

Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
  • Loading branch information
Lachlan McIlroy committed Oct 30, 2008
1 parent a357a12 commit f338f90
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions fs/xfs/xfs_iget.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,9 +210,6 @@ xfs_iget_core(

xfs_itrace_exit_tag(ip, "xfs_iget.alloc");

if (lock_flags)
xfs_ilock(ip, lock_flags);

if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) {
xfs_idestroy(ip);
xfs_put_perag(mp, pag);
Expand All @@ -228,6 +225,10 @@ xfs_iget_core(
delay(1);
goto again;
}

if (lock_flags)
xfs_ilock(ip, lock_flags);

mask = ~(((XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog)) - 1);
first_index = agino & mask;
write_lock(&pag->pag_ici_lock);
Expand All @@ -239,6 +240,8 @@ xfs_iget_core(
BUG_ON(error != -EEXIST);
write_unlock(&pag->pag_ici_lock);
radix_tree_preload_end();
if (lock_flags)
xfs_iunlock(ip, lock_flags);
xfs_idestroy(ip);
XFS_STATS_INC(xs_ig_dup);
goto again;
Expand Down

0 comments on commit f338f90

Please sign in to comment.