[PATCH] (3/5) sane procfs/dcache interaction
authorAlexander Viro <viro@math.psu.edu>
Mon, 22 Apr 2002 06:03:37 +0000 (23:03 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Mon, 22 Apr 2002 06:03:37 +0000 (23:03 -0700)
commit0030633355db2bba32d97655df73b04215018ab9
treeb5f226845875c106f4da600ee01fa08dbdd778d9
parent981936da6234efee942e2b79f93f5c4be57a4ed4
[PATCH] (3/5) sane procfs/dcache interaction

 - sane dentry retention.  Namely, we don't kill /proc/<pid> dentries at the
   first opportunity (as the current tree does).  Instead we do the following:
* ->d_delete() kills it only if process is already dead.
* all ->lookup() in proc/base.c end with checking if process is still
  alive and unhash if it isn't.
* proc_pid_lookup() (lookup for /proc/<pid>) caches reference to dentry
  in task_struct.  It's _not_ counted in ->d_count.
* ->d_iput() resets said reference to NULL.
* release_task() (burying a zombie) checks if there is a cached
  reference and if there is - shrinks the subtree.
* tasklist_lock is used for exclusion.
   That way we are guaranteed that after release_task() all dentries in
   /proc/<pid> will go away as soon as possible; OTOH, before release_task()
   we have normal retention policy - they go away under memory pressure with
   the same rules as for dentries on any other fs.
fs/proc/base.c
include/linux/sched.h
kernel/exit.c
kernel/fork.c