Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13b41b09 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Linus Torvalds
Browse files

[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: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 99f89551
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -951,7 +951,7 @@ static ssize_t proc_loginuid_write(struct file * file, const char __user * buf,
	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)
@@ -1363,8 +1363,8 @@ static struct inode *proc_pid_make_inode(struct super_block * sb, struct task_st
	/*
	 * 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;
@@ -1482,7 +1482,7 @@ static int pid_delete_dentry(struct dentry * dentry)
	 * 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 =
+2 −2
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ static void proc_delete_inode(struct inode *inode)
	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(struct super_block *sb)
	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;
+3 −4
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@
 */

#include <linux/proc_fs.h>
#include <linux/task_ref.h>

struct vmalloc_info {
	unsigned long	used;
@@ -51,14 +50,14 @@ void free_proc_entry(struct proc_dir_entry *de);

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)
+2 −2
Original line number Diff line number Diff line
@@ -320,7 +320,7 @@ static void *m_start(struct seq_file *m, loff_t *pos)
	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;

@@ -416,7 +416,7 @@ static int do_maps_open(struct inode *inode, struct file *file,
	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;
+2 −2
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ extern void kclist_add(struct kcore_list *, void *, size_t);
#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(const struct inode *inode)
}

struct proc_maps_private {
	struct task_ref *tref;
	struct pid *pid;
	struct task_struct *task;
	struct vm_area_struct *tail_vma;
};
Loading