[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: 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:
parent
99f8955183
commit
13b41b0949
|
@ -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
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
* 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)
|
||||||
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)
|
||||||
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 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#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);
|
||||||
|
|
||||||
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)
|
||||||
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,
|
||||||
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);
|
||||||
#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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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 @@
|
||||||
#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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
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 @@ out:
|
||||||
|
|
||||||
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 = {
|
||||||
|
|
Loading…
Reference in New Issue