[PATCH 17/23] proc: Give the root directory a task.

From: Eric W. Biederman
Date: Thu Feb 23 2006 - 11:23:05 EST



Helper functions in base.c like proc_pident_readdir and proc_pident_lookup
assume the directories have an associated task, and cannot currently be used on
the /proc root directory because it does not have such a task.

This small changes allows for base.c to be simplified and later when multiple
pid spaces are introduced it makes getting the needed context information trivial.

Signed-off-by: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>


---

fs/proc/root.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)

516b38bf721663deded53591272bdfc8f032f885
diff --git a/fs/proc/root.c b/fs/proc/root.c
index c3fd361..a3ceff3 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -17,6 +17,7 @@
#include <linux/module.h>
#include <linux/bitops.h>
#include <linux/smp_lock.h>
+#include <linux/mount.h>

#include "internal.h"

@@ -29,6 +30,18 @@ struct proc_dir_entry *proc_sys_root;
static struct super_block *proc_get_sb(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data)
{
+ if (proc_mnt) {
+ /* Seed the root directory with a task so it doesn't need
+ * to be special in base.c. I would do this earlier but
+ * the only task alive when /proc is mounted the first time
+ * is the init_task and it is never considered alive.
+ */
+ struct proc_inode *ei;
+ ei = PROC_I(proc_mnt->mnt_sb->s_root->d_inode);
+ if (!ei->tref->task)
+ tref_set(&ei->tref,
+ tref_get_by_pid(1, PIDTYPE_PID));
+ }
return get_sb_single(fs_type, flags, data, proc_fill_super);
}

--
1.2.2.g709a

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/