Skip to contentSkip to conversation

Unlock inode before calling xfs_idestroy()

PATCH In review Lachlan McIlroy 2 participants 2 messages Sep 22, 2008 XFS filesystem

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 Unlock inode before calling xfs_idestroy()

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.

fs/xfs/xfs_iget.c +0 -0
@@ -210,9 +210,6 @@ finish_inode:
 
	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);
@@ -228,6 +225,10 @@ finish_inode:
		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);
@@ -239,6 +240,8 @@ finish_inode:
		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;
#1 lore raw
Quoted 3 lines · Lachlan McIlroy

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.

Looks good.