From: Eric W. Biederman Incrementally update my proc-dont-lock-task_structs-indefinitely patches so that they work with struct pid instead of struct task_ref. Mostly this is a straight 1-1 substitution. Signed-off-by: Eric W. Biederman Signed-off-by: Andrew Morton --- fs/proc/base.c | 8 ++++---- fs/proc/inode.c | 4 ++-- fs/proc/internal.h | 7 +++---- fs/proc/task_mmu.c | 4 ++-- include/linux/proc_fs.h | 4 ++-- kernel/cpuset.c | 11 +++++------ 6 files changed, 18 insertions(+), 20 deletions(-) diff -puN fs/proc/base.c~proc-use-struct-pid-not-struct-task_ref fs/proc/base.c --- devel/fs/proc/base.c~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/fs/proc/base.c 2006-05-19 16:01:36.000000000 -0700 @@ -947,7 +947,7 @@ static ssize_t proc_loginuid_write(struc if (!capable(CAP_AUDIT_CONTROL)) return -EPERM; - if (current != proc_tref(inode)->task) + if (current != pid_task(proc_pid(inode), PIDTYPE_PID)) return -EPERM; if (count > PAGE_SIZE) @@ -1358,8 +1358,8 @@ static struct inode *proc_pid_make_inode /* * grab the reference to task. */ - ei->tref = tref_get_by_task(task); - if (!tref_task(ei->tref)) + ei->pid = get_pid(task->pids[PIDTYPE_PID].pid); + if (!ei->pid) goto out_unlock; inode->i_uid = 0; @@ -1477,7 +1477,7 @@ static int pid_delete_dentry(struct dent * If so, then don't put the dentry on the lru list, * kill it immediately. */ - return !proc_tref(dentry->d_inode)->task; + return !proc_pid(dentry->d_inode)->tasks[PIDTYPE_PID].first; } static struct dentry_operations tid_fd_dentry_operations = diff -puN fs/proc/inode.c~proc-use-struct-pid-not-struct-task_ref fs/proc/inode.c --- devel/fs/proc/inode.c~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/fs/proc/inode.c 2006-05-19 16:01:36.000000000 -0700 @@ -62,7 +62,7 @@ static void proc_delete_inode(struct ino truncate_inode_pages(&inode->i_data, 0); /* Stop tracking associated processes */ - tref_put(PROC_I(inode)->tref); + put_pid(PROC_I(inode)->pid); /* Let go of any associated proc directory entry */ de = PROC_I(inode)->pde; @@ -91,7 +91,7 @@ static struct inode *proc_alloc_inode(st ei = (struct proc_inode *)kmem_cache_alloc(proc_inode_cachep, SLAB_KERNEL); if (!ei) return NULL; - ei->tref = NULL; + ei->pid = NULL; ei->fd = 0; ei->op.proc_get_link = NULL; ei->pde = NULL; diff -puN fs/proc/internal.h~proc-use-struct-pid-not-struct-task_ref fs/proc/internal.h --- devel/fs/proc/internal.h~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/fs/proc/internal.h 2006-05-19 16:01:36.000000000 -0700 @@ -10,7 +10,6 @@ */ #include -#include struct vmalloc_info { unsigned long used; @@ -51,14 +50,14 @@ void free_proc_entry(struct proc_dir_ent int proc_init_inodecache(void); -static inline struct task_ref *proc_tref(struct inode *inode) +static inline struct pid *proc_pid(struct inode *inode) { - return PROC_I(inode)->tref; + return PROC_I(inode)->pid; } static inline struct task_struct *get_proc_task(struct inode *inode) { - return get_tref_task(proc_tref(inode)); + return get_pid_task(proc_pid(inode), PIDTYPE_PID); } static inline int proc_fd(struct inode *inode) diff -puN fs/proc/task_mmu.c~proc-use-struct-pid-not-struct-task_ref fs/proc/task_mmu.c --- devel/fs/proc/task_mmu.c~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/fs/proc/task_mmu.c 2006-05-19 16:01:36.000000000 -0700 @@ -326,7 +326,7 @@ static void *m_start(struct seq_file *m, if (last_addr == -1UL) return NULL; - priv->task = get_tref_task(priv->tref); + priv->task = get_pid_task(priv->pid, PIDTYPE_PID); if (!priv->task) return NULL; @@ -422,7 +422,7 @@ static int do_maps_open(struct inode *in int ret = -ENOMEM; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (priv) { - priv->tref = proc_tref(inode); + priv->pid = proc_pid(inode); ret = seq_open(file, ops); if (!ret) { struct seq_file *m = file->private_data; diff -puN include/linux/proc_fs.h~proc-use-struct-pid-not-struct-task_ref include/linux/proc_fs.h --- devel/include/linux/proc_fs.h~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/include/linux/proc_fs.h 2006-05-19 16:01:36.000000000 -0700 @@ -246,7 +246,7 @@ extern void kclist_add(struct kcore_list #endif struct proc_inode { - struct task_ref *tref; + struct pid *pid; int fd; union { int (*proc_get_link)(struct inode *, struct dentry **, struct vfsmount **); @@ -267,7 +267,7 @@ static inline struct proc_dir_entry *PDE } struct proc_maps_private { - struct task_ref *tref; + struct pid *pid; struct task_struct *task; struct vm_area_struct *tail_vma; }; diff -puN kernel/cpuset.c~proc-use-struct-pid-not-struct-task_ref kernel/cpuset.c --- devel/kernel/cpuset.c~proc-use-struct-pid-not-struct-task_ref 2006-05-19 16:01:36.000000000 -0700 +++ devel-akpm/kernel/cpuset.c 2006-05-19 16:01:36.000000000 -0700 @@ -49,7 +49,6 @@ #include #include #include -#include #include #include @@ -2435,7 +2434,7 @@ void __cpuset_memory_pressure_bump(void) */ static int proc_cpuset_show(struct seq_file *m, void *v) { - struct task_ref *tref; + struct pid *pid; struct task_struct *tsk; char *buf; int retval; @@ -2446,8 +2445,8 @@ static int proc_cpuset_show(struct seq_f goto out; retval = -ESRCH; - tref = m->private; - tsk = get_tref_task(tref); + pid = m->private; + tsk = get_pid_task(pid, PIDTYPE_PID); if (!tsk) goto out_free; @@ -2470,8 +2469,8 @@ out: static int cpuset_open(struct inode *inode, struct file *file) { - struct task_ref *tref = PROC_I(inode)->tref; - return single_open(file, proc_cpuset_show, tref); + struct pid *pid = PROC_I(inode)->pid; + return single_open(file, proc_cpuset_show, pid); } struct file_operations proc_cpuset_operations = { _