提交 13b41b09 编写于 作者: E Eric W. Biederman 提交者: Linus Torvalds

[PATCH] proc: Use struct pid not struct task_ref

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: NEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 99f89551
...@@ -951,7 +951,7 @@ static ssize_t proc_loginuid_write(struct file * file, const char __user * buf, ...@@ -951,7 +951,7 @@ static ssize_t proc_loginuid_write(struct file * file, const char __user * buf,
if (!capable(CAP_AUDIT_CONTROL)) if (!capable(CAP_AUDIT_CONTROL))
return -EPERM; return -EPERM;
if (current != proc_tref(inode)->task) if (current != pid_task(proc_pid(inode), PIDTYPE_PID))
return -EPERM; return -EPERM;
if (count >= PAGE_SIZE) if (count >= PAGE_SIZE)
...@@ -1363,8 +1363,8 @@ static struct inode *proc_pid_make_inode(struct super_block * sb, struct task_st ...@@ -1363,8 +1363,8 @@ static struct inode *proc_pid_make_inode(struct super_block * sb, struct task_st
/* /*
* grab the reference to task. * grab the reference to task.
*/ */
ei->tref = tref_get_by_task(task); ei->pid = get_pid(task->pids[PIDTYPE_PID].pid);
if (!tref_task(ei->tref)) if (!ei->pid)
goto out_unlock; goto out_unlock;
inode->i_uid = 0; inode->i_uid = 0;
...@@ -1482,7 +1482,7 @@ static int pid_delete_dentry(struct dentry * dentry) ...@@ -1482,7 +1482,7 @@ static int pid_delete_dentry(struct dentry * dentry)
* If so, then don't put the dentry on the lru list, * If so, then don't put the dentry on the lru list,
* kill it immediately. * 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 = static struct dentry_operations tid_fd_dentry_operations =
......
...@@ -62,7 +62,7 @@ static void proc_delete_inode(struct inode *inode) ...@@ -62,7 +62,7 @@ static void proc_delete_inode(struct inode *inode)
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
/* Stop tracking associated processes */ /* Stop tracking associated processes */
tref_put(PROC_I(inode)->tref); put_pid(PROC_I(inode)->pid);
/* Let go of any associated proc directory entry */ /* Let go of any associated proc directory entry */
de = PROC_I(inode)->pde; de = PROC_I(inode)->pde;
...@@ -91,7 +91,7 @@ static struct inode *proc_alloc_inode(struct super_block *sb) ...@@ -91,7 +91,7 @@ static struct inode *proc_alloc_inode(struct super_block *sb)
ei = (struct proc_inode *)kmem_cache_alloc(proc_inode_cachep, SLAB_KERNEL); ei = (struct proc_inode *)kmem_cache_alloc(proc_inode_cachep, SLAB_KERNEL);
if (!ei) if (!ei)
return NULL; return NULL;
ei->tref = NULL; ei->pid = NULL;
ei->fd = 0; ei->fd = 0;
ei->op.proc_get_link = NULL; ei->op.proc_get_link = NULL;
ei->pde = NULL; ei->pde = NULL;
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
*/ */
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/task_ref.h>
struct vmalloc_info { struct vmalloc_info {
unsigned long used; unsigned long used;
...@@ -51,14 +50,14 @@ void free_proc_entry(struct proc_dir_entry *de); ...@@ -51,14 +50,14 @@ void free_proc_entry(struct proc_dir_entry *de);
int proc_init_inodecache(void); 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) 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) static inline int proc_fd(struct inode *inode)
......
...@@ -320,7 +320,7 @@ static void *m_start(struct seq_file *m, loff_t *pos) ...@@ -320,7 +320,7 @@ static void *m_start(struct seq_file *m, loff_t *pos)
if (last_addr == -1UL) if (last_addr == -1UL)
return NULL; return NULL;
priv->task = get_tref_task(priv->tref); priv->task = get_pid_task(priv->pid, PIDTYPE_PID);
if (!priv->task) if (!priv->task)
return NULL; return NULL;
...@@ -416,7 +416,7 @@ static int do_maps_open(struct inode *inode, struct file *file, ...@@ -416,7 +416,7 @@ static int do_maps_open(struct inode *inode, struct file *file,
int ret = -ENOMEM; int ret = -ENOMEM;
priv = kzalloc(sizeof(*priv), GFP_KERNEL); priv = kzalloc(sizeof(*priv), GFP_KERNEL);
if (priv) { if (priv) {
priv->tref = proc_tref(inode); priv->pid = proc_pid(inode);
ret = seq_open(file, ops); ret = seq_open(file, ops);
if (!ret) { if (!ret) {
struct seq_file *m = file->private_data; struct seq_file *m = file->private_data;
......
...@@ -246,7 +246,7 @@ extern void kclist_add(struct kcore_list *, void *, size_t); ...@@ -246,7 +246,7 @@ extern void kclist_add(struct kcore_list *, void *, size_t);
#endif #endif
struct proc_inode { struct proc_inode {
struct task_ref *tref; struct pid *pid;
int fd; int fd;
union { union {
int (*proc_get_link)(struct inode *, struct dentry **, struct vfsmount **); int (*proc_get_link)(struct inode *, struct dentry **, struct vfsmount **);
...@@ -267,7 +267,7 @@ static inline struct proc_dir_entry *PDE(const struct inode *inode) ...@@ -267,7 +267,7 @@ static inline struct proc_dir_entry *PDE(const struct inode *inode)
} }
struct proc_maps_private { struct proc_maps_private {
struct task_ref *tref; struct pid *pid;
struct task_struct *task; struct task_struct *task;
struct vm_area_struct *tail_vma; struct vm_area_struct *tail_vma;
}; };
......
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
#include <linux/time.h> #include <linux/time.h>
#include <linux/backing-dev.h> #include <linux/backing-dev.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/task_ref.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/atomic.h> #include <asm/atomic.h>
...@@ -2443,7 +2442,7 @@ void __cpuset_memory_pressure_bump(void) ...@@ -2443,7 +2442,7 @@ void __cpuset_memory_pressure_bump(void)
*/ */
static int proc_cpuset_show(struct seq_file *m, void *v) static int proc_cpuset_show(struct seq_file *m, void *v)
{ {
struct task_ref *tref; struct pid *pid;
struct task_struct *tsk; struct task_struct *tsk;
char *buf; char *buf;
int retval; int retval;
...@@ -2454,8 +2453,8 @@ static int proc_cpuset_show(struct seq_file *m, void *v) ...@@ -2454,8 +2453,8 @@ static int proc_cpuset_show(struct seq_file *m, void *v)
goto out; goto out;
retval = -ESRCH; retval = -ESRCH;
tref = m->private; pid = m->private;
tsk = get_tref_task(tref); tsk = get_pid_task(pid, PIDTYPE_PID);
if (!tsk) if (!tsk)
goto out_free; goto out_free;
...@@ -2478,8 +2477,8 @@ static int proc_cpuset_show(struct seq_file *m, void *v) ...@@ -2478,8 +2477,8 @@ static int proc_cpuset_show(struct seq_file *m, void *v)
static int cpuset_open(struct inode *inode, struct file *file) static int cpuset_open(struct inode *inode, struct file *file)
{ {
struct task_ref *tref = PROC_I(inode)->tref; struct pid *pid = PROC_I(inode)->pid;
return single_open(file, proc_cpuset_show, tref); return single_open(file, proc_cpuset_show, pid);
} }
struct file_operations proc_cpuset_operations = { struct file_operations proc_cpuset_operations = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册