make proc_ns_operations work with struct ns_common * instead of void *
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 1 Nov 2014 04:37:32 +0000 (00:37 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 4 Dec 2014 19:34:17 +0000 (14:34 -0500)
We can do that now.  And kill ->inum(), while we are at it - all instances
are identical.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c
fs/proc/inode.c
fs/proc/namespaces.c
include/linux/proc_ns.h
ipc/namespace.c
kernel/pid_namespace.c
kernel/user_namespace.c
kernel/utsname.c
net/core/net_namespace.c

index 5c21fdadabe471800b36bdd32c47f2e38453df90..b9c16c3f63f5fd49dcb415f2a6a67671fd87ebdd 100644 (file)
@@ -3149,7 +3149,7 @@ found:
        return visible;
 }
 
-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;
@@ -3165,12 +3165,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);
@@ -3203,17 +3203,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,
 };
index 333080d7a6717ad2a9ac78b3a9215553d435b2f1..43b703c6cd3b00320b4e2568b66f2329b2bd0134 100644 (file)
@@ -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);
index 89026095f2b51a081ab37098c4b8f3f1da762519..995e8e98237d40027dbe424e3781befad6243b1e 100644 (file)
@@ -64,7 +64,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)
@@ -76,7 +76,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);
@@ -144,7 +144,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 res = -EACCES;
 
@@ -160,7 +160,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);
        res = readlink_copy(buffer, buflen, name);
        ns_ops->put(ns);
 out_put_task:
index 34a1e105bef4e3117e446885fdffce97607048e8..f284959391fd5df82b45c8d02e6eca773d91ea3d 100644 (file)
@@ -6,18 +6,18 @@
 
 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;
 };
 
index 3c1e8d3bd7d3da6be9f17b3366dcba401451cff9..531029a67fefc8bda0ba6d54bc1270789bf0cee6 100644 (file)
@@ -154,7 +154,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;
@@ -168,12 +168,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) ||
@@ -187,16 +187,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,
 };
index dd961ad86fbda784703a8be5fd9f5a229830835c..79aabce49a854bc4580d5acf2346c4397fbfdd5e 100644 (file)
@@ -318,7 +318,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;
 
@@ -331,12 +331,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);
@@ -367,18 +367,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)
index 1ab2209228ff0cd4c9437aa75475ce09088de83d..29cd5ccfc37af1caad1266acf2a4df7b762ca287 100644 (file)
@@ -846,7 +846,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;
 
@@ -857,12 +857,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;
@@ -893,18 +893,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)
index 1917f74be8ecedba6bf80e1191bbdec3ea2b3113..20697befe46632fd2d08fa7df1273b0b905f588e 100644 (file)
@@ -93,7 +93,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;
@@ -109,12 +109,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);
 
@@ -128,16 +128,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,
 };
index 97f4dc2132ad3866ceacdb49fa613b9395f48e95..2161f0979fcedb100639805a63c7a969f7e760bc 100644 (file)
@@ -629,7 +629,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;
@@ -648,12 +648,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);
 
@@ -666,17 +666,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