Andrew, I have test this patch for a while now and none of the users has seen the "busy inodes" message for a while now. Can you please apply and test it in -mm? This is an updated version of the patch which adresses some issues that came up during discussion. Although sb->prunes usually is 0, I'm testing it now before calling wake_up(). Besides that, the shrink_dcache_parent() is only waiting for prunes if we are called through generic_shutdown_super() when sb->s_root is NULL. Original patch description: Kirill Korotaev discovered a race between shrink_dcache_parent() and shrink_dcache_memory() which leads to "Busy inodes after unmount". When unmounting a file system shrink_dcache_parent() is racing against a possible shrink_dcache_memory(). This might lead to the situation that shrink_dcache_parent() is returning too early. In this situation the super_block is destroyed before shrink_dcache_memory() could put the inode. This patch fixes the problem through introducing a prunes counter which is incremented when a dentry is pruned but the corresponding inoded isn't put yet.When the prunes counter is not null, shrink_dcache_parent() is waiting and restarting its work. Signed-off-by: Jan Blunck