patch-2.4.19 linux-2.4.19/fs/proc/base.c
Next file: linux-2.4.19/fs/proc/generic.c
Previous file: linux-2.4.19/fs/proc/array.c
Back to the patch index
Back to the overall index
- Lines: 82
- Date:
Fri Aug 2 17:39:45 2002
- Orig file:
linux-2.4.18/fs/proc/base.c
- Orig date:
Mon Feb 25 11:38:09 2002
diff -urN linux-2.4.18/fs/proc/base.c linux-2.4.19/fs/proc/base.c
@@ -23,6 +23,8 @@
#include <linux/init.h>
#include <linux/file.h>
#include <linux/string.h>
+#include <linux/seq_file.h>
+#include <linux/namespace.h>
/*
* For hysterical raisins we keep the same inumbers as in the old procfs.
@@ -246,6 +248,46 @@
read: pid_maps_read,
};
+extern struct seq_operations mounts_op;
+static int mounts_open(struct inode *inode, struct file *file)
+{
+ struct task_struct *task = inode->u.proc_i.task;
+ int ret = seq_open(file, &mounts_op);
+
+ if (!ret) {
+ struct seq_file *m = file->private_data;
+ struct namespace *namespace;
+ task_lock(task);
+ namespace = task->namespace;
+ if (namespace)
+ get_namespace(namespace);
+ task_unlock(task);
+
+ if (namespace)
+ m->private = namespace;
+ else {
+ seq_release(inode, file);
+ ret = -EINVAL;
+ }
+ }
+ return ret;
+}
+
+static int mounts_release(struct inode *inode, struct file *file)
+{
+ struct seq_file *m = file->private_data;
+ struct namespace *namespace = m->private;
+ put_namespace(namespace);
+ return seq_release(inode, file);
+}
+
+static struct file_operations proc_mounts_operations = {
+ open: mounts_open,
+ read: seq_read,
+ llseek: seq_lseek,
+ release: mounts_release,
+};
+
#define PROC_BLOCK_SIZE (3*1024) /* 4K page size but our output routines use some slack for overruns */
static ssize_t proc_info_read(struct file * file, char * buf,
@@ -497,6 +539,7 @@
PROC_PID_STATM,
PROC_PID_MAPS,
PROC_PID_CPU,
+ PROC_PID_MOUNTS,
PROC_PID_FD_DIR = 0x8000, /* 0x8000-0xffff */
};
@@ -516,6 +559,7 @@
E(PROC_PID_CWD, "cwd", S_IFLNK|S_IRWXUGO),
E(PROC_PID_ROOT, "root", S_IFLNK|S_IRWXUGO),
E(PROC_PID_EXE, "exe", S_IFLNK|S_IRWXUGO),
+ E(PROC_PID_MOUNTS, "mounts", S_IFREG|S_IRUGO),
{0,0,NULL,0}
};
#undef E
@@ -881,6 +925,9 @@
inode->i_op = &proc_mem_inode_operations;
inode->i_fop = &proc_mem_operations;
break;
+ case PROC_PID_MOUNTS:
+ inode->i_fop = &proc_mounts_operations;
+ break;
default:
printk("procfs: impossible type (%d)",p->type);
iput(inode);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)