Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net/9p: enable 9p to work in non-default network namespace

Teach 9p filesystem to work in container with non-default network namespace.
(Note: I also patched the unix domain socket code but don't have a test case
for that. It's the same fix, I just don't have a server for it...)

To test, run diod server (http://code.google.com/p/diod):
diod -n -f -L stderr -l 172.23.255.1:9999 -c /dev/null -e /root
and then mount like so:
mount -t 9p -o port=9999,aname=/root,version=9p2000.L 172.23.255.1 /mnt

A container test environment is described at http://landley.net/lxc

Signed-off-by: Rob Landley <rob@landley.net>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>

authored by

Rob Landley and committed by
Eric Van Hensbergen
e75762fd fe1cbaba

+4 -3
+4 -3
net/9p/trans_fd.c
··· 916 916 sin_server.sin_family = AF_INET; 917 917 sin_server.sin_addr.s_addr = in_aton(addr); 918 918 sin_server.sin_port = htons(opts.port); 919 - err = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &csocket); 920 - 919 + err = __sock_create(read_pnet(&current->nsproxy->net_ns), PF_INET, 920 + SOCK_STREAM, IPPROTO_TCP, &csocket, 1); 921 921 if (err) { 922 922 P9_EPRINTK(KERN_ERR, "p9_trans_tcp: problem creating socket\n"); 923 923 return err; ··· 954 954 955 955 sun_server.sun_family = PF_UNIX; 956 956 strcpy(sun_server.sun_path, addr); 957 - err = sock_create_kern(PF_UNIX, SOCK_STREAM, 0, &csocket); 957 + err = __sock_create(read_pnet(&current->nsproxy->net_ns), PF_UNIX, 958 + SOCK_STREAM, 0, &csocket, 1); 958 959 if (err < 0) { 959 960 P9_EPRINTK(KERN_ERR, "p9_trans_unix: problem creating socket\n"); 960 961 return err;