From: Al Viro <[email protected]> We can do that now. And kill ->inum(), while we are at it - all instances are identical.
Signed-off-by: Al Viro <[email protected]> (cherry picked from VZ8 commit 64964528b24ea390824f0e5ce9d34b8d39b28cde) https://jira.sw.ru/browse/PSBM-102357 Signed-off-by: Pavel Tikhomirov <[email protected]> --- fs/namespace.c | 13 +++---------- fs/proc/inode.c | 2 +- fs/proc/namespaces.c | 8 ++++---- include/linux/proc_ns.h | 10 +++++----- ipc/namespace.c | 12 +++--------- kernel/pid_namespace.c | 12 +++--------- kernel/user_namespace.c | 12 +++--------- kernel/utsname.c | 12 +++--------- net/core/net_namespace.c | 12 +++--------- 9 files changed, 28 insertions(+), 65 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index f137ac232d4e..bd1bfa481f57 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -3853,7 +3853,7 @@ bool mnt_may_suid(struct vfsmount *mnt) current_in_userns(mnt->mnt_sb->s_user_ns); } -static void *mntns_get(struct task_struct *task) +static struct ns_common *mntns_get(struct task_struct *task) { struct ns_common *ns = NULL; struct nsproxy *nsproxy; @@ -3869,12 +3869,12 @@ static void *mntns_get(struct task_struct *task) return ns; } -static void mntns_put(void *ns) +static void mntns_put(struct ns_common *ns) { put_mnt_ns(to_mnt_ns(ns)); } -static int mntns_install(struct nsproxy *nsproxy, void *ns) +static int mntns_install(struct nsproxy *nsproxy, struct ns_common *ns) { struct fs_struct *fs = current->fs; struct mnt_namespace *mnt_ns = to_mnt_ns(ns), *old_mnt_ns; @@ -3913,17 +3913,10 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns) return 0; } -static unsigned int mntns_inum(void *ns) -{ - struct ns_common *p = ns; - return p->inum; -} - const struct proc_ns_operations mntns_operations = { .name = "mnt", .type = CLONE_NEWNS, .get = mntns_get, .put = mntns_put, .install = mntns_install, - .inum = mntns_inum, }; diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 4eef2b46b87e..8b0445574fe7 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -33,7 +33,7 @@ static void proc_evict_inode(struct inode *inode) struct proc_dir_entry *de; struct ctl_table_header *head; const struct proc_ns_operations *ns_ops; - void *ns; + struct ns_common *ns; truncate_inode_pages_final(&inode->i_data); clear_inode(inode); diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c index 86aff3a43db2..2d53aea1a691 100644 --- a/fs/proc/namespaces.c +++ b/fs/proc/namespaces.c @@ -70,7 +70,7 @@ static struct dentry *proc_ns_get_dentry(struct super_block *sb, struct inode *inode; struct proc_inode *ei; struct qstr qname = { .name = "", }; - void *ns; + struct ns_common *ns; ns = ns_ops->get(task); if (!ns) @@ -82,7 +82,7 @@ static struct dentry *proc_ns_get_dentry(struct super_block *sb, return ERR_PTR(-ENOMEM); } - inode = iget_locked(sb, ns_ops->inum(ns)); + inode = iget_locked(sb, ns->inum); if (!inode) { dput(dentry); ns_ops->put(ns); @@ -150,7 +150,7 @@ static int proc_ns_readlink(struct dentry *dentry, char __user *buffer, int bufl struct proc_inode *ei = PROC_I(inode); const struct proc_ns_operations *ns_ops = ei->ns.ns_ops; struct task_struct *task; - void *ns; + struct ns_common *ns; char name[50]; int len = -EACCES; @@ -166,7 +166,7 @@ static int proc_ns_readlink(struct dentry *dentry, char __user *buffer, int bufl if (!ns) goto out_put_task; - snprintf(name, sizeof(name), "%s:[%u]", ns_ops->name, ns_ops->inum(ns)); + snprintf(name, sizeof(name), "%s:[%u]", ns_ops->name, ns->inum); len = strlen(name); if (len > buflen) diff --git a/include/linux/proc_ns.h b/include/linux/proc_ns.h index 5478e144c50a..3bd0aab95877 100644 --- a/include/linux/proc_ns.h +++ b/include/linux/proc_ns.h @@ -7,18 +7,18 @@ struct super_block; struct pid_namespace; struct nsproxy; +struct ns_common; struct proc_ns_operations { const char *name; int type; - void *(*get)(struct task_struct *task); - void (*put)(void *ns); - int (*install)(struct nsproxy *nsproxy, void *ns); - unsigned int (*inum)(void *ns); + struct ns_common *(*get)(struct task_struct *task); + void (*put)(struct ns_common *ns); + int (*install)(struct nsproxy *nsproxy, struct ns_common *ns); }; struct proc_ns { - void *ns; + struct ns_common *ns; const struct proc_ns_operations *ns_ops; }; diff --git a/ipc/namespace.c b/ipc/namespace.c index 6781d622549e..84545678707e 100644 --- a/ipc/namespace.c +++ b/ipc/namespace.c @@ -156,7 +156,7 @@ static inline struct ipc_namespace *to_ipc_ns(struct ns_common *ns) return container_of(ns, struct ipc_namespace, ns); } -static void *ipcns_get(struct task_struct *task) +static struct ns_common *ipcns_get(struct task_struct *task) { struct ipc_namespace *ns = NULL; struct nsproxy *nsproxy; @@ -170,12 +170,12 @@ static void *ipcns_get(struct task_struct *task) return ns ? &ns->ns : NULL; } -static void ipcns_put(void *ns) +static void ipcns_put(struct ns_common *ns) { return put_ipc_ns(to_ipc_ns(ns)); } -static int ipcns_install(struct nsproxy *nsproxy, void *new) +static int ipcns_install(struct nsproxy *nsproxy, struct ns_common *new) { struct ipc_namespace *ns = to_ipc_ns(new); if (!ns_capable(ns->user_ns, CAP_SYS_ADMIN) || @@ -189,16 +189,10 @@ static int ipcns_install(struct nsproxy *nsproxy, void *new) return 0; } -static unsigned int ipcns_inum(void *vp) -{ - return ((struct ns_common *)vp)->inum; -} - const struct proc_ns_operations ipcns_operations = { .name = "ipc", .type = CLONE_NEWIPC, .get = ipcns_get, .put = ipcns_put, .install = ipcns_install, - .inum = ipcns_inum, }; diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c index 2c478203cba3..29c9d06cf8fb 100644 --- a/kernel/pid_namespace.c +++ b/kernel/pid_namespace.c @@ -347,7 +347,7 @@ static inline struct pid_namespace *to_pid_ns(struct ns_common *ns) return container_of(ns, struct pid_namespace, ns); } -static void *pidns_get(struct task_struct *task) +static struct ns_common *pidns_get(struct task_struct *task) { struct pid_namespace *ns; @@ -360,12 +360,12 @@ static void *pidns_get(struct task_struct *task) return ns ? &ns->ns : NULL; } -static void pidns_put(void *ns) +static void pidns_put(struct ns_common *ns) { put_pid_ns(to_pid_ns(ns)); } -static int pidns_install(struct nsproxy *nsproxy, void *ns) +static int pidns_install(struct nsproxy *nsproxy, struct ns_common *ns) { struct pid_namespace *active = task_active_pid_ns(current); struct pid_namespace *ancestor, *new = to_pid_ns(ns); @@ -396,18 +396,12 @@ static int pidns_install(struct nsproxy *nsproxy, void *ns) return 0; } -static unsigned int pidns_inum(void *ns) -{ - return ((struct ns_common *)ns)->inum; -} - const struct proc_ns_operations pidns_operations = { .name = "pid", .type = CLONE_NEWPID, .get = pidns_get, .put = pidns_put, .install = pidns_install, - .inum = pidns_inum, }; static __init int pid_namespaces_init(void) diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index c39871e61559..af9ff26c72b4 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -1031,7 +1031,7 @@ static inline struct user_namespace *to_user_ns(struct ns_common *ns) return container_of(ns, struct user_namespace, ns); } -static void *userns_get(struct task_struct *task) +static struct ns_common *userns_get(struct task_struct *task) { struct user_namespace *user_ns; @@ -1042,12 +1042,12 @@ static void *userns_get(struct task_struct *task) return user_ns ? &user_ns->ns : NULL; } -static void userns_put(void *ns) +static void userns_put(struct ns_common *ns) { put_user_ns(to_user_ns(ns)); } -static int userns_install(struct nsproxy *nsproxy, void *ns) +static int userns_install(struct nsproxy *nsproxy, struct ns_common *ns) { struct user_namespace *user_ns = to_user_ns(ns); struct cred *cred; @@ -1078,18 +1078,12 @@ static int userns_install(struct nsproxy *nsproxy, void *ns) return commit_creds(cred); } -static unsigned int userns_inum(void *ns) -{ - return ((struct ns_common *)ns)->inum; -} - const struct proc_ns_operations userns_operations = { .name = "user", .type = CLONE_NEWUSER, .get = userns_get, .put = userns_put, .install = userns_install, - .inum = userns_inum, }; static __init int user_namespaces_init(void) diff --git a/kernel/utsname.c b/kernel/utsname.c index d8c062d2ab28..4247306327fa 100644 --- a/kernel/utsname.c +++ b/kernel/utsname.c @@ -147,7 +147,7 @@ static inline struct uts_namespace *to_uts_ns(struct ns_common *ns) return container_of(ns, struct uts_namespace, ns); } -static void *utsns_get(struct task_struct *task) +static struct ns_common *utsns_get(struct task_struct *task) { struct uts_namespace *ns = NULL; struct nsproxy *nsproxy; @@ -163,12 +163,12 @@ static void *utsns_get(struct task_struct *task) return ns ? &ns->ns : NULL; } -static void utsns_put(void *ns) +static void utsns_put(struct ns_common *ns) { put_uts_ns(to_uts_ns(ns)); } -static int utsns_install(struct nsproxy *nsproxy, void *new) +static int utsns_install(struct nsproxy *nsproxy, struct ns_common *new) { struct uts_namespace *ns = to_uts_ns(new); @@ -182,16 +182,10 @@ static int utsns_install(struct nsproxy *nsproxy, void *new) return 0; } -static unsigned int utsns_inum(void *vp) -{ - return ((struct ns_common *)vp)->inum; -} - const struct proc_ns_operations utsns_operations = { .name = "uts", .type = CLONE_NEWUTS, .get = utsns_get, .put = utsns_put, .install = utsns_install, - .inum = utsns_inum, }; diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 2a1413dd92a0..9564d242f941 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -1050,7 +1050,7 @@ void unregister_pernet_device(struct pernet_operations *ops) EXPORT_SYMBOL_GPL(unregister_pernet_device); #ifdef CONFIG_NET_NS -static void *netns_get(struct task_struct *task) +static struct ns_common *netns_get(struct task_struct *task) { struct net *net = NULL; struct nsproxy *nsproxy; @@ -1069,12 +1069,12 @@ static inline struct net *to_net_ns(struct ns_common *ns) return container_of(ns, struct net, ns); } -static void netns_put(void *ns) +static void netns_put(struct ns_common *ns) { put_net(to_net_ns(ns)); } -static int netns_install(struct nsproxy *nsproxy, void *ns) +static int netns_install(struct nsproxy *nsproxy, struct ns_common *ns) { struct net *net = to_net_ns(ns); @@ -1087,17 +1087,11 @@ static int netns_install(struct nsproxy *nsproxy, void *ns) return 0; } -static unsigned int netns_inum(void *ns) -{ - return ((struct ns_common *)ns)->inum; -} - const struct proc_ns_operations netns_operations = { .name = "net", .type = CLONE_NEWNET, .get = netns_get, .put = netns_put, .install = netns_install, - .inum = netns_inum, }; #endif -- 2.24.1 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
