[PATCH] proc: Rewrite the proc dentry flush on exit optimization
To keep the dcache from filling up with dead /proc entries we flush them on process exit. However over the years that code has gotten hairy with a dentry_pointer and a lock in task_struct and misdocumented as a correctness feature. I have rewritten this code to look and see if we have a corresponding entry in the dcache and if so flush it on process exit. This removes the extra fields in the task_struct and allows me to trivially handle the case of a /proc/<tgid>/task/<pid> entry as well as the current /proc/<pid> entries. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
662795deb8
commit
48e6484d49
10
fs/exec.c
10
fs/exec.c
@@ -666,8 +666,6 @@ static int de_thread(struct task_struct *tsk)
|
||||
* and to assume its PID:
|
||||
*/
|
||||
if (!thread_group_leader(current)) {
|
||||
struct dentry *proc_dentry1, *proc_dentry2;
|
||||
|
||||
/*
|
||||
* Wait for the thread group leader to be a zombie.
|
||||
* It should already be zombie at this point, most
|
||||
@@ -689,10 +687,6 @@ static int de_thread(struct task_struct *tsk)
|
||||
*/
|
||||
current->start_time = leader->start_time;
|
||||
|
||||
spin_lock(&leader->proc_lock);
|
||||
spin_lock(¤t->proc_lock);
|
||||
proc_dentry1 = proc_pid_unhash(current);
|
||||
proc_dentry2 = proc_pid_unhash(leader);
|
||||
write_lock_irq(&tasklist_lock);
|
||||
|
||||
BUG_ON(leader->tgid != current->tgid);
|
||||
@@ -729,10 +723,6 @@ static int de_thread(struct task_struct *tsk)
|
||||
leader->exit_state = EXIT_DEAD;
|
||||
|
||||
write_unlock_irq(&tasklist_lock);
|
||||
spin_unlock(&leader->proc_lock);
|
||||
spin_unlock(¤t->proc_lock);
|
||||
proc_pid_flush(proc_dentry1);
|
||||
proc_pid_flush(proc_dentry2);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user