diff options
-rw-r--r-- | fs/namespace.c | 6 | ||||
-rw-r--r-- | fs/proc/base.c | 5 | ||||
-rw-r--r-- | include/linux/mnt_namespace.h | 4 |
3 files changed, 8 insertions, 7 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 0fd3f8a..f334285 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -900,7 +900,7 @@ EXPORT_SYMBOL(replace_mount_options); /* iterator */ static void *m_start(struct seq_file *m, loff_t *pos) { - struct proc_mounts *p = m->private; + struct proc_mounts *p = proc_mounts(m); down_read(&namespace_sem); return seq_list_start(&p->ns->list, *pos); @@ -908,7 +908,7 @@ static void *m_start(struct seq_file *m, loff_t *pos) static void *m_next(struct seq_file *m, void *v, loff_t *pos) { - struct proc_mounts *p = m->private; + struct proc_mounts *p = proc_mounts(m); return seq_list_next(v, &p->ns->list, pos); } @@ -1022,7 +1022,7 @@ const struct seq_operations mounts_op = { static int show_mountinfo(struct seq_file *m, void *v) { - struct proc_mounts *p = m->private; + struct proc_mounts *p = proc_mounts(m); struct vfsmount *mnt = list_entry(v, struct vfsmount, mnt_list); struct super_block *sb = mnt->mnt_sb; struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt }; diff --git a/fs/proc/base.c b/fs/proc/base.c index 49a048d..c72b0a1 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -624,7 +624,6 @@ static int mounts_open_common(struct inode *inode, struct file *file, if (ret) goto err_free; - p->m.private = p; p->ns = ns; p->root = root; p->event = ns->event; @@ -643,7 +642,7 @@ static int mounts_open_common(struct inode *inode, struct file *file, static int mounts_release(struct inode *inode, struct file *file) { - struct proc_mounts *p = file->private_data; + struct proc_mounts *p = proc_mounts(file->private_data); path_put(&p->root); put_mnt_ns(p->ns); return seq_release(inode, file); @@ -651,7 +650,7 @@ static int mounts_release(struct inode *inode, struct file *file) static unsigned mounts_poll(struct file *file, poll_table *wait) { - struct proc_mounts *p = file->private_data; + struct proc_mounts *p = proc_mounts(file->private_data); unsigned res = POLLIN | POLLRDNORM; poll_wait(file, &p->ns->poll, wait); diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h index 0b89efc..725bcc9 100644 --- a/include/linux/mnt_namespace.h +++ b/include/linux/mnt_namespace.h @@ -15,7 +15,7 @@ struct mnt_namespace { }; struct proc_mounts { - struct seq_file m; /* must be the first element */ + struct seq_file m; struct mnt_namespace *ns; struct path root; int event; @@ -32,6 +32,8 @@ static inline void get_mnt_ns(struct mnt_namespace *ns) atomic_inc(&ns->count); } +#define proc_mounts(p) (container_of((p), struct proc_mounts, m)) + extern const struct seq_operations mounts_op; extern const struct seq_operations mountinfo_op; extern const struct seq_operations mountstats_op; |