Commit 021c68de authored by Stanislav Kinsbursky's avatar Stanislav Kinsbursky Committed by Trond Myklebust

SUNRPC: hold current network namespace while pipefs superblock is active

We want to be sure that network namespace is still alive while we have pipefs
mounted.
This will be required later, when RPC pipefs will be mounting only from
user-space context.
Signed-off-by: default avatarStanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 38b0da75
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/sunrpc/rpc_pipe_fs.h>
#include <linux/sunrpc/cache.h> #include <linux/sunrpc/cache.h>
#include <linux/nsproxy.h>
#include "netns.h"
static struct vfsmount *rpc_mnt __read_mostly; static struct vfsmount *rpc_mnt __read_mostly;
static int rpc_mount_count; static int rpc_mount_count;
...@@ -1011,6 +1014,7 @@ rpc_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1011,6 +1014,7 @@ rpc_fill_super(struct super_block *sb, void *data, int silent)
} }
if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL))
return -ENOMEM; return -ENOMEM;
sb->s_fs_info = get_net(net);
return 0; return 0;
} }
...@@ -1021,11 +1025,19 @@ rpc_mount(struct file_system_type *fs_type, ...@@ -1021,11 +1025,19 @@ rpc_mount(struct file_system_type *fs_type,
return mount_ns(fs_type, flags, current->nsproxy->net_ns, rpc_fill_super); return mount_ns(fs_type, flags, current->nsproxy->net_ns, rpc_fill_super);
} }
void rpc_kill_sb(struct super_block *sb)
{
struct net *net = sb->s_fs_info;
put_net(net);
kill_litter_super(sb);
}
static struct file_system_type rpc_pipe_fs_type = { static struct file_system_type rpc_pipe_fs_type = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "rpc_pipefs", .name = "rpc_pipefs",
.mount = rpc_mount, .mount = rpc_mount,
.kill_sb = kill_litter_super, .kill_sb = rpc_kill_sb,
}; };
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment