• Alexander Viro's avatar
    [PATCH] (3/5) sane procfs/dcache interaction · 00306333
    Alexander Viro authored
     - 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.
    00306333
base.c 25 KB