diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-06-09 01:16:59 -0400 |
---|---|---|
committer | Ziyan <jaraidaniel@gmail.com> | 2016-04-03 14:55:50 +0200 |
commit | 7c733a6e7f1caa59c25830eac1d00913a5c3064a (patch) | |
tree | e2bd03d96999b55a159de003b7e031602f288400 | |
parent | 9e2fa431613b6e8100fc4c517dbf66f535e097eb (diff) | |
download | kernel_samsung_tuna-7c733a6e7f1caa59c25830eac1d00913a5c3064a.zip kernel_samsung_tuna-7c733a6e7f1caa59c25830eac1d00913a5c3064a.tar.gz kernel_samsung_tuna-7c733a6e7f1caa59c25830eac1d00913a5c3064a.tar.bz2 |
get rid of magic in proc_namespace.c
don't rely on proc_mounts->m being the first field; container_of()
is there for purpose. No need to bother with ->private, while
we are at it - the same container_of will do nicely.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
(cherry picked from commit 6ce6e24e72233073c8ead9419fc5040d44803dae)
-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; |