mptcp: dedicated request sock for subflow in v6
[platform/kernel/linux-rpi.git] / ipc / mqueue.c
index 5becca9..089c34d 100644 (file)
@@ -45,6 +45,7 @@
 
 struct mqueue_fs_context {
        struct ipc_namespace    *ipc_ns;
+       bool                     newns; /* Set if newly created ipc namespace */
 };
 
 #define MQUEUE_MAGIC   0x19800202
@@ -427,6 +428,14 @@ static int mqueue_get_tree(struct fs_context *fc)
 {
        struct mqueue_fs_context *ctx = fc->fs_private;
 
+       /*
+        * With a newly created ipc namespace, we don't need to do a search
+        * for an ipc namespace match, but we still need to set s_fs_info.
+        */
+       if (ctx->newns) {
+               fc->s_fs_info = ctx->ipc_ns;
+               return get_tree_nodev(fc, mqueue_fill_super);
+       }
        return get_tree_keyed(fc, mqueue_fill_super, ctx->ipc_ns);
 }
 
@@ -454,6 +463,10 @@ static int mqueue_init_fs_context(struct fs_context *fc)
        return 0;
 }
 
+/*
+ * mq_init_ns() is currently the only caller of mq_create_mount().
+ * So the ns parameter is always a newly created ipc namespace.
+ */
 static struct vfsmount *mq_create_mount(struct ipc_namespace *ns)
 {
        struct mqueue_fs_context *ctx;
@@ -465,6 +478,7 @@ static struct vfsmount *mq_create_mount(struct ipc_namespace *ns)
                return ERR_CAST(fc);
 
        ctx = fc->fs_private;
+       ctx->newns = true;
        put_ipc_ns(ctx->ipc_ns);
        ctx->ipc_ns = get_ipc_ns(ns);
        put_user_ns(fc->user_ns);