Just because it is less of a fundamental change and less testing I went and looked at updating proc_flush_task to use a list as Al suggested. If we can stand an sget/deactivate_super pair for every dentry we want to invalidate I think I have something. Comments from anyone will be appreciated I gave this some light testing and the code is based on something similar already present in proc so I think there is a high chance this code is correct but I could easily be wrong. Linus, does this approach look like something you can stand? Eric Eric W. Biederman (7): proc: Rename in proc_inode rename sysctl_inodes sibling_inodes proc: Generalize proc_sys_prune_dcache into proc_prune_siblings_dcache proc: Mov rcu_read_(lock|unlock) in proc_prune_siblings_dcache proc: Use d_invalidate in proc_prune_siblings_dcache proc: Clear the pieces of proc_inode that proc_evict_inode cares about proc: Use a list of inodes to flush from proc proc: Ensure we see the exit of each process tid exactly once fs/exec.c | 5 +-- fs/proc/base.c | 111 ++++++++++++++++-------------------------------- fs/proc/inode.c | 60 +++++++++++++++++++++++--- fs/proc/internal.h | 4 +- fs/proc/proc_sysctl.c | 45 +++----------------- include/linux/pid.h | 2 + include/linux/proc_fs.h | 4 +- kernel/exit.c | 4 +- kernel/pid.c | 16 +++++++ 9 files changed, 124 insertions(+), 127 deletions(-)