mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 08:24:42 +01:00
98 lines
2.7 KiB
Diff
98 lines
2.7 KiB
Diff
From: Andreas Gruenbacher <agruen@suse.de>
|
|
Subject: Remove duplicate proc code
|
|
|
|
Remove some duplicate code in generating the contents of /proc/mounts and
|
|
/proc/$pid/mountstats.
|
|
|
|
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
|
|
|
|
---
|
|
|
|
This patch is optional, and does not affect the rest of this series.
|
|
|
|
fs/proc/base.c | 45 +++++++++++++++------------------------------
|
|
1 file changed, 15 insertions(+), 30 deletions(-)
|
|
|
|
--- a/fs/proc/base.c
|
|
+++ b/fs/proc/base.c
|
|
@@ -359,7 +359,8 @@ struct proc_mounts {
|
|
int event;
|
|
};
|
|
|
|
-static int mounts_open(struct inode *inode, struct file *file)
|
|
+static int __mounts_open(struct inode *inode, struct file *file,
|
|
+ struct seq_operations *seq_ops)
|
|
{
|
|
struct task_struct *task = get_proc_task(inode);
|
|
struct mnt_namespace *ns = NULL;
|
|
@@ -382,7 +383,7 @@ static int mounts_open(struct inode *ino
|
|
p = kmalloc(sizeof(struct proc_mounts), GFP_KERNEL);
|
|
if (p) {
|
|
file->private_data = &p->m;
|
|
- ret = seq_open(file, &mounts_op);
|
|
+ ret = seq_open(file, seq_ops);
|
|
if (!ret) {
|
|
p->m.private = ns;
|
|
p->event = ns->event;
|
|
@@ -395,17 +396,25 @@ static int mounts_open(struct inode *ino
|
|
return ret;
|
|
}
|
|
|
|
+static int mounts_open(struct inode *inode, struct file *file)
|
|
+{
|
|
+ return __mounts_open(inode, file, &mounts_op);
|
|
+}
|
|
+
|
|
static int mounts_release(struct inode *inode, struct file *file)
|
|
{
|
|
- struct seq_file *m = file->private_data;
|
|
- struct mnt_namespace *ns = m->private;
|
|
+ struct proc_mounts *p =
|
|
+ container_of(file->private_data, struct proc_mounts, m);
|
|
+ struct mnt_namespace *ns = p->m.private;
|
|
+
|
|
put_mnt_ns(ns);
|
|
return seq_release(inode, file);
|
|
}
|
|
|
|
static unsigned mounts_poll(struct file *file, poll_table *wait)
|
|
{
|
|
- struct proc_mounts *p = file->private_data;
|
|
+ struct proc_mounts *p =
|
|
+ container_of(file->private_data, struct proc_mounts, m);
|
|
struct mnt_namespace *ns = p->m.private;
|
|
unsigned res = 0;
|
|
|
|
@@ -432,31 +441,7 @@ static const struct file_operations proc
|
|
extern struct seq_operations mountstats_op;
|
|
static int mountstats_open(struct inode *inode, struct file *file)
|
|
{
|
|
- int ret = seq_open(file, &mountstats_op);
|
|
-
|
|
- if (!ret) {
|
|
- struct seq_file *m = file->private_data;
|
|
- struct mnt_namespace *mnt_ns = NULL;
|
|
- struct task_struct *task = get_proc_task(inode);
|
|
-
|
|
- if (task) {
|
|
- task_lock(task);
|
|
- if (task->nsproxy)
|
|
- mnt_ns = task->nsproxy->mnt_ns;
|
|
- if (mnt_ns)
|
|
- get_mnt_ns(mnt_ns);
|
|
- task_unlock(task);
|
|
- put_task_struct(task);
|
|
- }
|
|
-
|
|
- if (mnt_ns)
|
|
- m->private = mnt_ns;
|
|
- else {
|
|
- seq_release(inode, file);
|
|
- ret = -EINVAL;
|
|
- }
|
|
- }
|
|
- return ret;
|
|
+ return __mounts_open(inode, file, &mountstats_op);
|
|
}
|
|
|
|
static const struct file_operations proc_mountstats_operations = {
|