After an interesting set of review comments this patchset is back with very modest changes. I spent quite a bit of timing trying to see if I could understand and possibly reproduce the poor issues reported by Fengguang Wu. Ultimately I wound up running dbench and will-it-scale/unlink2 on a ramfs filesystem with a fixed clock speed so I could get enough jitter out of the benchmark numbers to that I could make some sense of the results. On my bitty box I could not find any problems with dbench, will-it-scale/unlink2 I measured a small loss of performance because detach_mounts was silly and took the lock before testing d_mountpoint. With that fixed I can not see any performance differences between my code and unmodified 3.14-rcX. Nor can I see any reason to suspect there might be. The core vfs changes are quite modest. Now I did not benchark d_invalidate, but check_submounts_and_drop is what any sane distributed filesystem is doing today, and as discussed in the review the actual changes are very modest even in d_invalidate. In the first round of this patchset the semantics of dropping mounts on unlink were agreed to so long as we preserve the current semantics in a single mount namespace. The are really only two changes in this version of the patchset. 1) is_local_mountpoint now returns a bool. 2) detach_mounts was simplified/cleanup and made more performant. In net this should result in a kernel that is more comprehensible and maintainble as well as fixing some possible mount leaks, and removing the possibility of DOS attacks from evily placed mount points, in other mount namespaces. For people who prefer git trees these changes are available at: git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace.git vfs-detach-mounts3 Eric W. Biederman (12): vfs: Document the effect of d_revalidate on d_find_alias vfs: More precise tests in d_invalidate vfs: Don't allow overwriting mounts in the current mount namespace vfs: Keep a list of mounts on a mount point vfs: factor out lookup_mountpoint from new_mountpoint vfs: Add a function to lazily unmount all mounts from any dentry. vfs: Lazily remove mounts on unlinked files and directories. vfs: Remove unnecessary calls of check_submounts_and_drop vfs: Merge check_submounts_and_drop and d_invalidate vfs: Make d_invalidate return void vfs: Remove d_drop calls from d_revalidate implementations proc: Update proc_flush_task_mnt to use d_invalidate fs/afs/dir.c | 5 -- fs/btrfs/ioctl.c | 5 +-- fs/ceph/dir.c | 1 - fs/cifs/readdir.c | 6 +-- fs/dcache.c | 140 +++++++++++++++++------------------------------- fs/fuse/dir.c | 7 +-- fs/gfs2/dentry.c | 3 - fs/kernfs/dir.c | 11 ---- fs/mount.h | 20 +++++++ fs/namei.c | 28 ++++++---- fs/namespace.c | 87 +++++++++++++++++++++++++++++- fs/nfs/dir.c | 7 +-- fs/proc/base.c | 10 +--- fs/proc/fd.c | 2 - include/linux/dcache.h | 3 +- 15 files changed, 178 insertions(+), 157 deletions(-) Eric -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html