Skip to content

Commit

Permalink
SUNRPC: hold current network namespace while pipefs superblock is active
Browse files Browse the repository at this point in the history
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: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Stanislav Kinsbursky authored and Trond Myklebust committed Jan 31, 2012
1 parent 38b0da7 commit 021c68d
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion net/sunrpc/rpc_pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
#include <linux/workqueue.h>
#include <linux/sunrpc/rpc_pipe_fs.h>
#include <linux/sunrpc/cache.h>
#include <linux/nsproxy.h>

#include "netns.h"

static struct vfsmount *rpc_mnt __read_mostly;
static int rpc_mount_count;
Expand Down Expand Up @@ -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))
return -ENOMEM;
sb->s_fs_info = get_net(net);
return 0;
}

Expand All @@ -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);
}

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 = {
.owner = THIS_MODULE,
.name = "rpc_pipefs",
.mount = rpc_mount,
.kill_sb = kill_litter_super,
.kill_sb = rpc_kill_sb,
};

static void
Expand Down

0 comments on commit 021c68d

Please sign in to comment.