--- a/fs/inode.c.orig 2007-10-01 16:42:24.567821866 +0100 +++ b/fs/inode.c 2007-10-01 16:43:30.022037788 +0100 @@ -288,6 +288,12 @@ if (inode->i_data.nrpages) truncate_inode_pages(&inode->i_data, 0); clear_inode(inode); + + spin_lock(&inode_lock); + hlist_del_init(&inode->i_hash); + spin_unlock(&inode_lock); + + wake_up_inode(inode); destroy_inode(inode); nr_disposed++; } @@ -317,7 +323,6 @@ else { invalidate_inode_buffers(inode); if (!atomic_read(&inode->i_count)) { - hlist_del_init(&inode->i_hash); list_move(&inode->i_list, dispose); inode->i_state |= I_FREEING; count++; @@ -455,7 +460,6 @@ if (!can_unuse(inode)) continue; } - hlist_del_init(&inode->i_hash); list_move(&inode->i_list, &freeable); inode->i_state |= I_FREEING; nr_pruned++;