summaryrefslogtreecommitdiff
path: root/fs/namespace.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2014-11-01 00:00:23 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2014-12-04 14:33:24 -0500
commit58be28256d98a6b996b20f49130ea11afb8de75a (patch)
tree34e4a64998fdac7d61199df862f51c3d9995c469 /fs/namespace.c
parent435d5f4bb2ccba3b791d9ef61d2590e30b8e806e (diff)
downloadlwn-58be28256d98a6b996b20f49130ea11afb8de75a.tar.gz
lwn-58be28256d98a6b996b20f49130ea11afb8de75a.zip
make mntns ->get()/->put()/->install()/->inum() work with &mnt_ns->ns
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r--fs/namespace.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index adc2ea2532a0..5c21fdadabe4 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1582,6 +1582,11 @@ static bool is_mnt_ns_file(struct dentry *dentry)
return true;
}
+struct mnt_namespace *to_mnt_ns(struct ns_common *ns)
+{
+ return container_of(ns, struct mnt_namespace, ns);
+}
+
static bool mnt_ns_loop(struct dentry *dentry)
{
/* Could bind mounting the mount namespace inode cause a
@@ -1591,7 +1596,7 @@ static bool mnt_ns_loop(struct dentry *dentry)
if (!is_mnt_ns_file(dentry))
return false;
- mnt_ns = get_proc_ns(dentry->d_inode)->ns;
+ mnt_ns = to_mnt_ns(get_proc_ns(dentry->d_inode)->ns);
return current->nsproxy->mnt_ns->seq >= mnt_ns->seq;
}
@@ -3146,14 +3151,14 @@ found:
static void *mntns_get(struct task_struct *task)
{
- struct mnt_namespace *ns = NULL;
+ struct ns_common *ns = NULL;
struct nsproxy *nsproxy;
task_lock(task);
nsproxy = task->nsproxy;
if (nsproxy) {
- ns = nsproxy->mnt_ns;
- get_mnt_ns(ns);
+ ns = &nsproxy->mnt_ns->ns;
+ get_mnt_ns(to_mnt_ns(ns));
}
task_unlock(task);
@@ -3162,13 +3167,13 @@ static void *mntns_get(struct task_struct *task)
static void mntns_put(void *ns)
{
- put_mnt_ns(ns);
+ put_mnt_ns(to_mnt_ns(ns));
}
static int mntns_install(struct nsproxy *nsproxy, void *ns)
{
struct fs_struct *fs = current->fs;
- struct mnt_namespace *mnt_ns = ns;
+ struct mnt_namespace *mnt_ns = to_mnt_ns(ns);
struct path root;
if (!ns_capable(mnt_ns->user_ns, CAP_SYS_ADMIN) ||
@@ -3200,8 +3205,8 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns)
static unsigned int mntns_inum(void *ns)
{
- struct mnt_namespace *mnt_ns = ns;
- return mnt_ns->ns.inum;
+ struct ns_common *p = ns;
+ return p->inum;
}
const struct proc_ns_operations mntns_operations = {