aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc
diff options
context:
space:
mode:
authorRam Pai <linuxram@us.ibm.com>2008-03-27 08:06:25 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2008-04-23 00:05:03 -0400
commit2d4d4864ac08caff5c204a752bd004eed4f08760 (patch)
treea8907c33afae589146fdcd06eacd740aff48c6a1 /fs/proc
parenta1a2c409b666befc58c2db9c7fbddf200f153470 (diff)
[patch 6/7] vfs: mountinfo: add /proc/<pid>/mountinfo
[mszeredi@suse.cz] rewrite and split big patch into managable chunks /proc/mounts in its current form lacks important information: - propagation state - root of mount for bind mounts - the st_dev value used within the filesystem - identifier for each mount and it's parent It also suffers from the following problems: - not easily extendable - ambiguity of mountpoints within a chrooted environment - doesn't distinguish between filesystem dependent and independent options - doesn't distinguish between per mount and per super block options This patch introduces /proc/<pid>/mountinfo which attempts to address all these deficiencies. Code shared between /proc/<pid>/mounts and /proc/<pid>/mountinfo is extracted into separate functions. Thanks to Al Viro for the help in getting the design right. Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/proc')
-rw-r--r--fs/proc/base.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c
index a04b3db7a296..c5e412a00b17 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -604,6 +604,19 @@ static const struct file_operations proc_mounts_operations = {
604 .poll = mounts_poll, 604 .poll = mounts_poll,
605}; 605};
606 606
607static int mountinfo_open(struct inode *inode, struct file *file)
608{
609 return mounts_open_common(inode, file, &mountinfo_op);
610}
611
612static const struct file_operations proc_mountinfo_operations = {
613 .open = mountinfo_open,
614 .read = seq_read,
615 .llseek = seq_lseek,
616 .release = mounts_release,
617 .poll = mounts_poll,
618};
619
607static int mountstats_open(struct inode *inode, struct file *file) 620static int mountstats_open(struct inode *inode, struct file *file)
608{ 621{
609 return mounts_open_common(inode, file, &mountstats_op); 622 return mounts_open_common(inode, file, &mountstats_op);
@@ -2303,6 +2316,7 @@ static const struct pid_entry tgid_base_stuff[] = {
2303 LNK("root", root), 2316 LNK("root", root),
2304 LNK("exe", exe), 2317 LNK("exe", exe),
2305 REG("mounts", S_IRUGO, mounts), 2318 REG("mounts", S_IRUGO, mounts),
2319 REG("mountinfo", S_IRUGO, mountinfo),
2306 REG("mountstats", S_IRUSR, mountstats), 2320 REG("mountstats", S_IRUSR, mountstats),
2307#ifdef CONFIG_PROC_PAGE_MONITOR 2321#ifdef CONFIG_PROC_PAGE_MONITOR
2308 REG("clear_refs", S_IWUSR, clear_refs), 2322 REG("clear_refs", S_IWUSR, clear_refs),
@@ -2635,6 +2649,7 @@ static const struct pid_entry tid_base_stuff[] = {
2635 LNK("root", root), 2649 LNK("root", root),
2636 LNK("exe", exe), 2650 LNK("exe", exe),
2637 REG("mounts", S_IRUGO, mounts), 2651 REG("mounts", S_IRUGO, mounts),
2652 REG("mountinfo", S_IRUGO, mountinfo),
2638#ifdef CONFIG_PROC_PAGE_MONITOR 2653#ifdef CONFIG_PROC_PAGE_MONITOR
2639 REG("clear_refs", S_IWUSR, clear_refs), 2654 REG("clear_refs", S_IWUSR, clear_refs),
2640 REG("smaps", S_IRUGO, smaps), 2655 REG("smaps", S_IRUGO, smaps),