I think it's wrong to unhash dentries while they are possibly stilld_invalidate() calls shrink_dcache_parent() as needed and will fail if there are other users of the dentry.
being used. You can do the shrink_dcache_parent() here, but should
leave the unhashing to be done by prune_one_dentry(), after it's been
checked that there are no other users of the dentry.