[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
+1
-6
@@ -137,12 +137,8 @@ void release_task(struct task_struct * p)
|
||||
{
|
||||
int zap_leader;
|
||||
task_t *leader;
|
||||
struct dentry *proc_dentry;
|
||||
|
||||
repeat:
|
||||
atomic_dec(&p->user->processes);
|
||||
spin_lock(&p->proc_lock);
|
||||
proc_dentry = proc_pid_unhash(p);
|
||||
write_lock_irq(&tasklist_lock);
|
||||
ptrace_unlink(p);
|
||||
BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children));
|
||||
@@ -171,8 +167,7 @@ repeat:
|
||||
|
||||
sched_exit(p);
|
||||
write_unlock_irq(&tasklist_lock);
|
||||
spin_unlock(&p->proc_lock);
|
||||
proc_pid_flush(proc_dentry);
|
||||
proc_flush_task(p);
|
||||
release_thread(p);
|
||||
call_rcu(&p->rcu, delayed_put_task_struct);
|
||||
|
||||
|
||||
@@ -993,13 +993,10 @@ static task_t *copy_process(unsigned long clone_flags,
|
||||
if (put_user(p->pid, parent_tidptr))
|
||||
goto bad_fork_cleanup;
|
||||
|
||||
p->proc_dentry = NULL;
|
||||
|
||||
INIT_LIST_HEAD(&p->children);
|
||||
INIT_LIST_HEAD(&p->sibling);
|
||||
p->vfork_done = NULL;
|
||||
spin_lock_init(&p->alloc_lock);
|
||||
spin_lock_init(&p->proc_lock);
|
||||
|
||||
clear_tsk_thread_flag(p, TIF_SIGPENDING);
|
||||
init_sigpending(&p->pending);
|
||||
|
||||
Reference in New Issue
Block a user