--- /dev/null
+--- 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 @@
+ continue;
+ 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++;
+