linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/9] sunrpc: Create sockets in namespaces
@ 2010-09-29 12:01 Pavel Emelyanov
  2010-09-29 12:02 ` [PATCH 1/9] sunrpc: Factor out rpc_xprt allocation Pavel Emelyanov
                   ` (10 more replies)
  0 siblings, 11 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:01 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

v3 changes:
Moved the generic xprt alloc/free code to xprt.c.
Got David's ack on the 8th patch :)

v2 changes:
Fixed comments from Chuck and Trond.
Added one patch, that factors out rpc_xprt allocation as well.

v1:
This set implements pulling the net * argument down to the existing
sock_create_kern calls in the sunrpc layer and creating the sockets
in the given net.

Thanks,
Pavel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/9] sunrpc: Factor out rpc_xprt allocation
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
@ 2010-09-29 12:02 ` Pavel Emelyanov
  2010-09-29 12:03 ` [PATCH 2/9] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:02 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 include/linux/sunrpc/xprt.h     |    1 +
 net/sunrpc/xprt.c               |   22 ++++++++++++++++++++++
 net/sunrpc/xprtrdma/transport.c |   13 ++-----------
 net/sunrpc/xprtsock.c           |   15 +++------------
 4 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index ff5a77b..00f6e3f 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -280,6 +280,7 @@ void			xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
 void			xprt_release(struct rpc_task *task);
 struct rpc_xprt *	xprt_get(struct rpc_xprt *xprt);
 void			xprt_put(struct rpc_xprt *xprt);
+struct rpc_xprt *	xprt_alloc(int size, int max_req);
 
 static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
 {
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 970fb00..26cbe21 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -962,6 +962,28 @@ static void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req)
 	spin_unlock(&xprt->reserve_lock);
 }
 
+struct rpc_xprt *xprt_alloc(int size, int max_req)
+{
+	struct rpc_xprt *xprt;
+
+	xprt = kzalloc(size, GFP_KERNEL);
+	if (xprt == NULL)
+		goto out;
+
+	xprt->max_reqs = max_req;
+	xprt->slot = kcalloc(max_req, sizeof(struct rpc_rqst), GFP_KERNEL);
+	if (xprt->slot == NULL)
+		goto out_free;
+
+	return xprt;
+
+out_free:
+	kfree(xprt);
+out:
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(xprt_alloc);
+
 /**
  * xprt_reserve - allocate an RPC request slot
  * @task: RPC task requesting a slot allocation
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index a85e866..9d77bf2 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -285,23 +285,14 @@ xprt_setup_rdma(struct xprt_create *args)
 		return ERR_PTR(-EBADF);
 	}
 
-	xprt = kzalloc(sizeof(struct rpcrdma_xprt), GFP_KERNEL);
+	xprt = xprt_alloc(sizeof(struct rpcrdma_xprt),
+			xprt_rdma_slot_table_entries);
 	if (xprt == NULL) {
 		dprintk("RPC:       %s: couldn't allocate rpcrdma_xprt\n",
 			__func__);
 		return ERR_PTR(-ENOMEM);
 	}
 
-	xprt->max_reqs = xprt_rdma_slot_table_entries;
-	xprt->slot = kcalloc(xprt->max_reqs,
-				sizeof(struct rpc_rqst), GFP_KERNEL);
-	if (xprt->slot == NULL) {
-		dprintk("RPC:       %s: couldn't allocate %d slots\n",
-			__func__, xprt->max_reqs);
-		kfree(xprt);
-		return ERR_PTR(-ENOMEM);
-	}
-
 	/* 60 second timeout, no retries */
 	xprt->timeout = &xprt_rdma_default_timeout;
 	xprt->bind_timeout = (60U * HZ);
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index b6309db..a7a7638 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2273,23 +2273,14 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
 		return ERR_PTR(-EBADF);
 	}
 
-	new = kzalloc(sizeof(*new), GFP_KERNEL);
-	if (new == NULL) {
+	xprt = xprt_alloc(sizeof(*new), slot_table_size);
+	if (xprt == NULL) {
 		dprintk("RPC:       xs_setup_xprt: couldn't allocate "
 				"rpc_xprt\n");
 		return ERR_PTR(-ENOMEM);
 	}
-	xprt = &new->xprt;
-
-	xprt->max_reqs = slot_table_size;
-	xprt->slot = kcalloc(xprt->max_reqs, sizeof(struct rpc_rqst), GFP_KERNEL);
-	if (xprt->slot == NULL) {
-		kfree(xprt);
-		dprintk("RPC:       xs_setup_xprt: couldn't allocate slot "
-				"table\n");
-		return ERR_PTR(-ENOMEM);
-	}
 
+	new = container_of(xprt, struct sock_xprt, xprt);
 	memcpy(&xprt->addr, args->dstaddr, args->addrlen);
 	xprt->addrlen = args->addrlen;
 	if (args->srcaddr)
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/9] sunrpc: Factor out rpc_xprt freeing
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
  2010-09-29 12:02 ` [PATCH 1/9] sunrpc: Factor out rpc_xprt allocation Pavel Emelyanov
@ 2010-09-29 12:03 ` Pavel Emelyanov
  2010-09-29 12:03 ` [PATCH 3/9] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:03 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 include/linux/sunrpc/xprt.h     |    1 +
 net/sunrpc/xprt.c               |    7 +++++++
 net/sunrpc/xprtrdma/transport.c |    7 ++-----
 net/sunrpc/xprtsock.c           |   12 ++++--------
 4 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index 00f6e3f..af4b560 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -281,6 +281,7 @@ void			xprt_release(struct rpc_task *task);
 struct rpc_xprt *	xprt_get(struct rpc_xprt *xprt);
 void			xprt_put(struct rpc_xprt *xprt);
 struct rpc_xprt *	xprt_alloc(int size, int max_req);
+void			xprt_free(struct rpc_xprt *);
 
 static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
 {
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 26cbe21..0637340 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -984,6 +984,13 @@ out:
 }
 EXPORT_SYMBOL_GPL(xprt_alloc);
 
+void xprt_free(struct rpc_xprt *xprt)
+{
+	kfree(xprt->slot);
+	kfree(xprt);
+}
+EXPORT_SYMBOL_GPL(xprt_free);
+
 /**
  * xprt_reserve - allocate an RPC request slot
  * @task: RPC task requesting a slot allocation
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 9d77bf2..0f7a1b9 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -251,9 +251,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
 
 	xprt_rdma_free_addresses(xprt);
 
-	kfree(xprt->slot);
-	xprt->slot = NULL;
-	kfree(xprt);
+	xprt_free(xprt);
 
 	dprintk("RPC:       %s: returning\n", __func__);
 
@@ -401,8 +399,7 @@ out3:
 out2:
 	rpcrdma_ia_close(&new_xprt->rx_ia);
 out1:
-	kfree(xprt->slot);
-	kfree(xprt);
+	xprt_free(xprt);
 	return ERR_PTR(rc);
 }
 
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index a7a7638..b1e36ec 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -774,8 +774,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
 
 	xs_close(xprt);
 	xs_free_peer_addresses(xprt);
-	kfree(xprt->slot);
-	kfree(xprt);
+	xprt_free(xprt);
 	module_put(THIS_MODULE);
 }
 
@@ -2362,8 +2361,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
 		return xprt;
 	ret = ERR_PTR(-EINVAL);
 out_err:
-	kfree(xprt->slot);
-	kfree(xprt);
+	xprt_free(xprt);
 	return ret;
 }
 
@@ -2438,8 +2436,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
 		return xprt;
 	ret = ERR_PTR(-EINVAL);
 out_err:
-	kfree(xprt->slot);
-	kfree(xprt);
+	xprt_free(xprt);
 	return ret;
 }
 
@@ -2519,8 +2516,7 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args)
 		return xprt;
 	ret = ERR_PTR(-EINVAL);
 out_err:
-	kfree(xprt->slot);
-	kfree(xprt);
+	xprt_free(xprt);
 	return ret;
 }
 
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/9] sunrpc: Add net argument to svc_create_xprt
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
  2010-09-29 12:02 ` [PATCH 1/9] sunrpc: Factor out rpc_xprt allocation Pavel Emelyanov
  2010-09-29 12:03 ` [PATCH 2/9] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
@ 2010-09-29 12:03 ` Pavel Emelyanov
  2010-09-29 12:04 ` [PATCH 4/9] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:03 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 fs/lockd/svc.c                  |    2 +-
 fs/nfs/callback.c               |    4 ++--
 fs/nfsd/nfsctl.c                |    4 ++--
 fs/nfsd/nfssvc.c                |    5 +++--
 include/linux/sunrpc/svc_xprt.h |    4 ++--
 net/sunrpc/svc_xprt.c           |    4 ++--
 6 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index f1bacf1..b13aabc 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -206,7 +206,7 @@ static int create_lockd_listener(struct svc_serv *serv, const char *name,
 
 	xprt = svc_find_xprt(serv, name, family, 0);
 	if (xprt == NULL)
-		return svc_create_xprt(serv, name, family, port,
+		return svc_create_xprt(serv, name, &init_net, family, port,
 						SVC_SOCK_DEFAULTS);
 	svc_xprt_put(xprt);
 	return 0;
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index e17b49e..aeec017 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -109,7 +109,7 @@ nfs4_callback_up(struct svc_serv *serv)
 {
 	int ret;
 
-	ret = svc_create_xprt(serv, "tcp", PF_INET,
+	ret = svc_create_xprt(serv, "tcp", &init_net, PF_INET,
 				nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
 	if (ret <= 0)
 		goto out_err;
@@ -117,7 +117,7 @@ nfs4_callback_up(struct svc_serv *serv)
 	dprintk("NFS: Callback listener port = %u (af %u)\n",
 			nfs_callback_tcpport, PF_INET);
 
-	ret = svc_create_xprt(serv, "tcp", PF_INET6,
+	ret = svc_create_xprt(serv, "tcp", &init_net, PF_INET6,
 				nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
 	if (ret > 0) {
 		nfs_callback_tcpport6 = ret;
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index b6e192d..b81da24 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -1015,12 +1015,12 @@ static ssize_t __write_ports_addxprt(char *buf)
 	if (err != 0)
 		return err;
 
-	err = svc_create_xprt(nfsd_serv, transport,
+	err = svc_create_xprt(nfsd_serv, transport, &init_net,
 				PF_INET, port, SVC_SOCK_ANONYMOUS);
 	if (err < 0)
 		goto out_err;
 
-	err = svc_create_xprt(nfsd_serv, transport,
+	err = svc_create_xprt(nfsd_serv, transport, &init_net,
 				PF_INET6, port, SVC_SOCK_ANONYMOUS);
 	if (err < 0 && err != -EAFNOSUPPORT)
 		goto out_close;
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index e2c4346..2bae1d8 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -16,6 +16,7 @@
 #include <linux/lockd/bind.h>
 #include <linux/nfsacl.h>
 #include <linux/seq_file.h>
+#include <net/net_namespace.h>
 #include "nfsd.h"
 #include "cache.h"
 #include "vfs.h"
@@ -186,12 +187,12 @@ static int nfsd_init_socks(int port)
 	if (!list_empty(&nfsd_serv->sv_permsocks))
 		return 0;
 
-	error = svc_create_xprt(nfsd_serv, "udp", PF_INET, port,
+	error = svc_create_xprt(nfsd_serv, "udp", &init_net, PF_INET, port,
 					SVC_SOCK_DEFAULTS);
 	if (error < 0)
 		return error;
 
-	error = svc_create_xprt(nfsd_serv, "tcp", PF_INET, port,
+	error = svc_create_xprt(nfsd_serv, "tcp", &init_net, PF_INET, port,
 					SVC_SOCK_DEFAULTS);
 	if (error < 0)
 		return error;
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index e50e3ec..646263c 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -74,8 +74,8 @@ int	svc_reg_xprt_class(struct svc_xprt_class *);
 void	svc_unreg_xprt_class(struct svc_xprt_class *);
 void	svc_xprt_init(struct svc_xprt_class *, struct svc_xprt *,
 		      struct svc_serv *);
-int	svc_create_xprt(struct svc_serv *, const char *, const int,
-			const unsigned short, int);
+int	svc_create_xprt(struct svc_serv *, const char *, struct net *,
+			const int, const unsigned short, int);
 void	svc_xprt_enqueue(struct svc_xprt *xprt);
 void	svc_xprt_received(struct svc_xprt *);
 void	svc_xprt_put(struct svc_xprt *xprt);
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index f7e8915..d80789a 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -204,8 +204,8 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
 }
 
 int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
-		    const int family, const unsigned short port,
-		    int flags)
+		    struct net *net, const int family,
+		    const unsigned short port, int flags)
 {
 	struct svc_xprt_class *xcl;
 
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4/9] sunrpc: Pull net argument downto svc_create_socket
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (2 preceding siblings ...)
  2010-09-29 12:03 ` [PATCH 3/9] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
@ 2010-09-29 12:04 ` Pavel Emelyanov
  2010-09-29 12:04 ` [PATCH 5/9] sunrpc: Add net to rpc_create_args Pavel Emelyanov
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:04 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

After this the socket creation in it knows the context.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 include/linux/sunrpc/svc_xprt.h          |    1 +
 net/sunrpc/svc_xprt.c                    |    5 +++--
 net/sunrpc/svcsock.c                     |   10 +++++++---
 net/sunrpc/xprtrdma/svc_rdma_transport.c |    2 ++
 4 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index 646263c..bb18297 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -12,6 +12,7 @@
 
 struct svc_xprt_ops {
 	struct svc_xprt	*(*xpo_create)(struct svc_serv *,
+				       struct net *net,
 				       struct sockaddr *, int,
 				       int);
 	struct svc_xprt	*(*xpo_accept)(struct svc_xprt *);
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c
index d80789a..678b6ee 100644
--- a/net/sunrpc/svc_xprt.c
+++ b/net/sunrpc/svc_xprt.c
@@ -166,6 +166,7 @@ EXPORT_SYMBOL_GPL(svc_xprt_init);
 
 static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
 					 struct svc_serv *serv,
+					 struct net *net,
 					 const int family,
 					 const unsigned short port,
 					 int flags)
@@ -200,7 +201,7 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
 		return ERR_PTR(-EAFNOSUPPORT);
 	}
 
-	return xcl->xcl_ops->xpo_create(serv, sap, len, flags);
+	return xcl->xcl_ops->xpo_create(serv, net, sap, len, flags);
 }
 
 int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
@@ -221,7 +222,7 @@ int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
 			goto err;
 
 		spin_unlock(&svc_xprt_class_lock);
-		newxprt = __svc_xpo_create(xcl, serv, family, port, flags);
+		newxprt = __svc_xpo_create(xcl, serv, net, family, port, flags);
 		if (IS_ERR(newxprt)) {
 			module_put(xcl->xcl_owner);
 			return PTR_ERR(newxprt);
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 7e534dd..5593385 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -64,7 +64,8 @@ static void		svc_tcp_sock_detach(struct svc_xprt *);
 static void		svc_sock_free(struct svc_xprt *);
 
 static struct svc_xprt *svc_create_socket(struct svc_serv *, int,
-					  struct sockaddr *, int, int);
+					  struct net *, struct sockaddr *,
+					  int, int);
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 static struct lock_class_key svc_key[2];
 static struct lock_class_key svc_slock_key[2];
@@ -657,10 +658,11 @@ static struct svc_xprt *svc_udp_accept(struct svc_xprt *xprt)
 }
 
 static struct svc_xprt *svc_udp_create(struct svc_serv *serv,
+				       struct net *net,
 				       struct sockaddr *sa, int salen,
 				       int flags)
 {
-	return svc_create_socket(serv, IPPROTO_UDP, sa, salen, flags);
+	return svc_create_socket(serv, IPPROTO_UDP, net, sa, salen, flags);
 }
 
 static struct svc_xprt_ops svc_udp_ops = {
@@ -1178,10 +1180,11 @@ static int svc_tcp_has_wspace(struct svc_xprt *xprt)
 }
 
 static struct svc_xprt *svc_tcp_create(struct svc_serv *serv,
+				       struct net *net,
 				       struct sockaddr *sa, int salen,
 				       int flags)
 {
-	return svc_create_socket(serv, IPPROTO_TCP, sa, salen, flags);
+	return svc_create_socket(serv, IPPROTO_TCP, net, sa, salen, flags);
 }
 
 static struct svc_xprt_ops svc_tcp_ops = {
@@ -1385,6 +1388,7 @@ EXPORT_SYMBOL_GPL(svc_addsock);
  */
 static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
 					  int protocol,
+					  struct net *net,
 					  struct sockaddr *sin, int len,
 					  int flags)
 {
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
index edea15a..950a206 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
@@ -52,6 +52,7 @@
 #define RPCDBG_FACILITY	RPCDBG_SVCXPRT
 
 static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
+					struct net *net,
 					struct sockaddr *sa, int salen,
 					int flags);
 static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt);
@@ -670,6 +671,7 @@ static int rdma_cma_handler(struct rdma_cm_id *cma_id,
  * Create a listening RDMA service endpoint.
  */
 static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
+					struct net *net,
 					struct sockaddr *sa, int salen,
 					int flags)
 {
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 5/9] sunrpc: Add net to rpc_create_args
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (3 preceding siblings ...)
  2010-09-29 12:04 ` [PATCH 4/9] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
@ 2010-09-29 12:04 ` Pavel Emelyanov
  2010-09-29 12:05 ` [PATCH 6/9] sunrpc: Add net to xprt_create Pavel Emelyanov
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:04 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 fs/lockd/host.c             |    1 +
 fs/lockd/mon.c              |    1 +
 fs/nfs/client.c             |    1 +
 fs/nfs/mount_clnt.c         |    2 ++
 fs/nfsd/nfs4callback.c      |    1 +
 include/linux/sunrpc/clnt.h |    1 +
 net/sunrpc/rpcb_clnt.c      |    2 ++
 7 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/fs/lockd/host.c b/fs/lockd/host.c
index bb464d1..25e21e4 100644
--- a/fs/lockd/host.c
+++ b/fs/lockd/host.c
@@ -353,6 +353,7 @@ nlm_bind_host(struct nlm_host *host)
 			.to_retries	= 5U,
 		};
 		struct rpc_create_args args = {
+			.net		= &init_net,
 			.protocol	= host->h_proto,
 			.address	= nlm_addr(host),
 			.addrsize	= host->h_addrlen,
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c
index e301546..e0c9189 100644
--- a/fs/lockd/mon.c
+++ b/fs/lockd/mon.c
@@ -69,6 +69,7 @@ static struct rpc_clnt *nsm_create(void)
 		.sin_addr.s_addr	= htonl(INADDR_LOOPBACK),
 	};
 	struct rpc_create_args args = {
+		.net			= &init_net,
 		.protocol		= XPRT_TRANSPORT_UDP,
 		.address		= (struct sockaddr *)&sin,
 		.addrsize		= sizeof(sin),
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index e734072..351b711 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -601,6 +601,7 @@ static int nfs_create_rpc_client(struct nfs_client *clp,
 {
 	struct rpc_clnt		*clnt = NULL;
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= clp->cl_proto,
 		.address	= (struct sockaddr *)&clp->cl_addr,
 		.addrsize	= clp->cl_addrlen,
diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c
index 59047f8..4b47203 100644
--- a/fs/nfs/mount_clnt.c
+++ b/fs/nfs/mount_clnt.c
@@ -153,6 +153,7 @@ int nfs_mount(struct nfs_mount_request *info)
 		.rpc_resp	= &result,
 	};
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= info->protocol,
 		.address	= info->sap,
 		.addrsize	= info->salen,
@@ -224,6 +225,7 @@ void nfs_umount(const struct nfs_mount_request *info)
 		.to_retries = 2,
 	};
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= IPPROTO_UDP,
 		.address	= info->sap,
 		.addrsize	= info->salen,
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 014482c..1112f45 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -479,6 +479,7 @@ int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *cb)
 		.to_retries	= 0,
 	};
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= XPRT_TRANSPORT_TCP,
 		.address	= (struct sockaddr *) &cb->cb_addr,
 		.addrsize	= cb->cb_addrlen,
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 85f38a6..58c4473 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -102,6 +102,7 @@ struct rpc_procinfo {
 #ifdef __KERNEL__
 
 struct rpc_create_args {
+	struct net		*net;
 	int			protocol;
 	struct sockaddr		*address;
 	size_t			addrsize;
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index dac219a..83af38d 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -177,6 +177,7 @@ static DEFINE_MUTEX(rpcb_create_local_mutex);
 static int rpcb_create_local(void)
 {
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= XPRT_TRANSPORT_TCP,
 		.address	= (struct sockaddr *)&rpcb_inaddr_loopback,
 		.addrsize	= sizeof(rpcb_inaddr_loopback),
@@ -228,6 +229,7 @@ static struct rpc_clnt *rpcb_create(char *hostname, struct sockaddr *srvaddr,
 				    size_t salen, int proto, u32 version)
 {
 	struct rpc_create_args args = {
+		.net		= &init_net,
 		.protocol	= proto,
 		.address	= srvaddr,
 		.addrsize	= salen,
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 6/9] sunrpc: Add net to xprt_create
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (4 preceding siblings ...)
  2010-09-29 12:04 ` [PATCH 5/9] sunrpc: Add net to rpc_create_args Pavel Emelyanov
@ 2010-09-29 12:05 ` Pavel Emelyanov
  2010-09-29 12:05 ` [PATCH 7/9] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:05 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 include/linux/sunrpc/xprt.h |    1 +
 net/sunrpc/clnt.c           |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index af4b560..c4f9315 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -249,6 +249,7 @@ static inline int bc_prealloc(struct rpc_rqst *req)
 
 struct xprt_create {
 	int			ident;		/* XPRT_TRANSPORT identifier */
+	struct net *		net;
 	struct sockaddr *	srcaddr;	/* optional local address */
 	struct sockaddr *	dstaddr;	/* remote peer address */
 	size_t			addrlen;
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index fa55490..f4bbd83 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -284,6 +284,7 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
 	struct rpc_xprt *xprt;
 	struct rpc_clnt *clnt;
 	struct xprt_create xprtargs = {
+		.net = args->net,
 		.ident = args->protocol,
 		.srcaddr = args->saddress,
 		.dstaddr = args->address,
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 7/9] sunrpc: Tag rpc_xprt with net
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (5 preceding siblings ...)
  2010-09-29 12:05 ` [PATCH 6/9] sunrpc: Add net to xprt_create Pavel Emelyanov
@ 2010-09-29 12:05 ` Pavel Emelyanov
  2010-09-29 12:06 ` [PATCH 8/9] net: Export __sock_create Pavel Emelyanov
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:05 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

The net is known from the xprt_create and this tagging will also
give un the context in the conntection workers where real sockets
are created.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 include/linux/sunrpc/xprt.h     |    3 ++-
 net/sunrpc/xprt.c               |    4 +++-
 net/sunrpc/xprtrdma/transport.c |    2 +-
 net/sunrpc/xprtsock.c           |    2 +-
 4 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index c4f9315..89d10d2 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -224,6 +224,7 @@ struct rpc_xprt {
 					bklog_u;	/* backlog queue utilization */
 	} stat;
 
+	struct net		*xprt_net;
 	const char		*address_strings[RPC_DISPLAY_MAX];
 };
 
@@ -281,7 +282,7 @@ void			xprt_release_xprt_cong(struct rpc_xprt *xprt, struct rpc_task *task);
 void			xprt_release(struct rpc_task *task);
 struct rpc_xprt *	xprt_get(struct rpc_xprt *xprt);
 void			xprt_put(struct rpc_xprt *xprt);
-struct rpc_xprt *	xprt_alloc(int size, int max_req);
+struct rpc_xprt *	xprt_alloc(struct net *net, int size, int max_req);
 void			xprt_free(struct rpc_xprt *);
 
 static inline __be32 *xprt_skip_transport_header(struct rpc_xprt *xprt, __be32 *p)
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 0637340..953206d 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -962,7 +962,7 @@ static void xprt_free_slot(struct rpc_xprt *xprt, struct rpc_rqst *req)
 	spin_unlock(&xprt->reserve_lock);
 }
 
-struct rpc_xprt *xprt_alloc(int size, int max_req)
+struct rpc_xprt *xprt_alloc(struct net *net, int size, int max_req)
 {
 	struct rpc_xprt *xprt;
 
@@ -975,6 +975,7 @@ struct rpc_xprt *xprt_alloc(int size, int max_req)
 	if (xprt->slot == NULL)
 		goto out_free;
 
+	xprt->xprt_net = get_net(net);
 	return xprt;
 
 out_free:
@@ -986,6 +987,7 @@ EXPORT_SYMBOL_GPL(xprt_alloc);
 
 void xprt_free(struct rpc_xprt *xprt)
 {
+	put_net(xprt->xprt_net);
 	kfree(xprt->slot);
 	kfree(xprt);
 }
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 0f7a1b9..2da32b4 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -283,7 +283,7 @@ xprt_setup_rdma(struct xprt_create *args)
 		return ERR_PTR(-EBADF);
 	}
 
-	xprt = xprt_alloc(sizeof(struct rpcrdma_xprt),
+	xprt = xprt_alloc(args->net, sizeof(struct rpcrdma_xprt),
 			xprt_rdma_slot_table_entries);
 	if (xprt == NULL) {
 		dprintk("RPC:       %s: couldn't allocate rpcrdma_xprt\n",
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index b1e36ec..4ef3a6a 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2272,7 +2272,7 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
 		return ERR_PTR(-EBADF);
 	}
 
-	xprt = xprt_alloc(sizeof(*new), slot_table_size);
+	xprt = xprt_alloc(args->net, sizeof(*new), slot_table_size);
 	if (xprt == NULL) {
 		dprintk("RPC:       xs_setup_xprt: couldn't allocate "
 				"rpc_xprt\n");
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 8/9] net: Export __sock_create
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (6 preceding siblings ...)
  2010-09-29 12:05 ` [PATCH 7/9] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
@ 2010-09-29 12:06 ` Pavel Emelyanov
  2010-09-29 12:06 ` [PATCH 9/9] sunrpc: Create sockets in net namespaces Pavel Emelyanov
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:06 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs, David Miller

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Acked-by: David S. Miller <davem@davemloft.net>
---
 include/linux/net.h |    2 ++
 net/socket.c        |    3 ++-
 2 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/include/linux/net.h b/include/linux/net.h
index dee0b11..16faa13 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -229,6 +229,8 @@ enum {
 extern int	     sock_wake_async(struct socket *sk, int how, int band);
 extern int	     sock_register(const struct net_proto_family *fam);
 extern void	     sock_unregister(int family);
+extern int	     __sock_create(struct net *net, int family, int type, int proto,
+				 struct socket **res, int kern);
 extern int	     sock_create(int family, int type, int proto,
 				 struct socket **res);
 extern int	     sock_create_kern(int family, int type, int proto,
diff --git a/net/socket.c b/net/socket.c
index 2270b94..0c37b00 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -1144,7 +1144,7 @@ call_kill:
 }
 EXPORT_SYMBOL(sock_wake_async);
 
-static int __sock_create(struct net *net, int family, int type, int protocol,
+int __sock_create(struct net *net, int family, int type, int protocol,
 			 struct socket **res, int kern)
 {
 	int err;
@@ -1256,6 +1256,7 @@ out_release:
 	rcu_read_unlock();
 	goto out_sock_release;
 }
+EXPORT_SYMBOL(__sock_create);
 
 int sock_create(int family, int type, int protocol, struct socket **res)
 {
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 9/9] sunrpc: Create sockets in net namespaces
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (7 preceding siblings ...)
  2010-09-29 12:06 ` [PATCH 8/9] net: Export __sock_create Pavel Emelyanov
@ 2010-09-29 12:06 ` Pavel Emelyanov
  2010-09-29 21:45 ` [PATCH v3 0/9] sunrpc: Create sockets in namespaces J. Bruce Fields
  2011-07-20 21:10 ` J. Bruce Fields
  10 siblings, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-29 12:06 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

The context is already known in all the sock_create callers.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 net/sunrpc/svcsock.c  |    2 +-
 net/sunrpc/xprtsock.c |    8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 5593385..88de3d0 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -1425,7 +1425,7 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
 		return ERR_PTR(-EINVAL);
 	}
 
-	error = sock_create_kern(family, type, protocol, &sock);
+	error = __sock_create(net, family, type, protocol, &sock, 1);
 	if (error < 0)
 		return ERR_PTR(error);
 
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 4ef3a6a..f9964ef 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1680,7 +1680,7 @@ static void xs_udp_connect_worker4(struct work_struct *work)
 	/* Start by resetting any existing state */
 	xs_reset_transport(transport);
 
-	err = sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
+	err = __sock_create(xprt->xprt_net, PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock, 1);
 	if (err < 0) {
 		dprintk("RPC:       can't create UDP transport socket (%d).\n", -err);
 		goto out;
@@ -1725,7 +1725,7 @@ static void xs_udp_connect_worker6(struct work_struct *work)
 	/* Start by resetting any existing state */
 	xs_reset_transport(transport);
 
-	err = sock_create_kern(PF_INET6, SOCK_DGRAM, IPPROTO_UDP, &sock);
+	err = __sock_create(xprt->xprt_net, PF_INET6, SOCK_DGRAM, IPPROTO_UDP, &sock, 1);
 	if (err < 0) {
 		dprintk("RPC:       can't create UDP transport socket (%d).\n", -err);
 		goto out;
@@ -1931,7 +1931,7 @@ static struct socket *xs_create_tcp_sock4(struct rpc_xprt *xprt,
 	int err;
 
 	/* start from scratch */
-	err = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
+	err = __sock_create(xprt->xprt_net, PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock, 1);
 	if (err < 0) {
 		dprintk("RPC:       can't create TCP transport socket (%d).\n",
 				-err);
@@ -1970,7 +1970,7 @@ static struct socket *xs_create_tcp_sock6(struct rpc_xprt *xprt,
 	int err;
 
 	/* start from scratch */
-	err = sock_create_kern(PF_INET6, SOCK_STREAM, IPPROTO_TCP, &sock);
+	err = __sock_create(xprt->xprt_net, PF_INET6, SOCK_STREAM, IPPROTO_TCP, &sock, 1);
 	if (err < 0) {
 		dprintk("RPC:       can't create TCP transport socket (%d).\n",
 				-err);
-- 
1.5.5.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (8 preceding siblings ...)
  2010-09-29 12:06 ` [PATCH 9/9] sunrpc: Create sockets in net namespaces Pavel Emelyanov
@ 2010-09-29 21:45 ` J. Bruce Fields
  2010-09-29 21:49   ` Chuck Lever
  2011-07-20 21:10 ` J. Bruce Fields
  10 siblings, 1 reply; 19+ messages in thread
From: J. Bruce Fields @ 2010-09-29 21:45 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

On Wed, Sep 29, 2010 at 04:01:56PM +0400, Pavel Emelyanov wrote:
> v3 changes:
> Moved the generic xprt alloc/free code to xprt.c.
> Got David's ack on the 8th patch :)
> 
> v2 changes:
> Fixed comments from Chuck and Trond.
> Added one patch, that factors out rpc_xprt allocation as well.
> 
> v1:
> This set implements pulling the net * argument down to the existing
> sock_create_kern calls in the sunrpc layer and creating the sockets
> in the given net.

Shall I commit this to my for-2.6.37 tree?  Objections?

--b.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-29 21:45 ` [PATCH v3 0/9] sunrpc: Create sockets in namespaces J. Bruce Fields
@ 2010-09-29 21:49   ` Chuck Lever
  2010-09-30  5:46     ` Pavel Emelyanov
  0 siblings, 1 reply; 19+ messages in thread
From: Chuck Lever @ 2010-09-29 21:49 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Pavel Emelyanov, Trond Myklebust, linux-nfs


On Sep 29, 2010, at 5:45 PM, J. Bruce Fields wrote:

> On Wed, Sep 29, 2010 at 04:01:56PM +0400, Pavel Emelyanov wrote:
>> v3 changes:
>> Moved the generic xprt alloc/free code to xprt.c.
>> Got David's ack on the 8th patch :)
>> 
>> v2 changes:
>> Fixed comments from Chuck and Trond.
>> Added one patch, that factors out rpc_xprt allocation as well.
>> 
>> v1:
>> This set implements pulling the net * argument down to the existing
>> sock_create_kern calls in the sunrpc layer and creating the sockets
>> in the given net.
> 
> Shall I commit this to my for-2.6.37 tree?  Objections?

I think it looks OK.

But I was wondering if there were any other changes needed for the RDMA transport capability, or had we decided that would happen at a latter point, or that changes are entirely unneeded (are namespaces already supported in the IB stack)?

-- 
chuck[dot]lever[at]oracle[dot]com





^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-29 21:49   ` Chuck Lever
@ 2010-09-30  5:46     ` Pavel Emelyanov
  2010-09-30 15:16       ` Chuck Lever
  0 siblings, 1 reply; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-30  5:46 UTC (permalink / raw)
  To: Chuck Lever; +Cc: J. Bruce Fields, Trond Myklebust, linux-nfs

>> Shall I commit this to my for-2.6.37 tree?  Objections?
> 
> I think it looks OK.
> 
> But I was wondering if there were any other changes needed for the RDMA 
> transport capability, or had we decided that would happen at a latter point, 
> or that changes are entirely unneeded

We definitely need more changes in the RDMA transport, but I would like to
have it done later (unless someone other than me starts doing it earlier ;) ).

> (are namespaces already supported in the IB stack)?

Nope. And this makes RDMA netnsization even more harder :(

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-30  5:46     ` Pavel Emelyanov
@ 2010-09-30 15:16       ` Chuck Lever
  2010-09-30 15:34         ` Pavel Emelyanov
  2010-10-01 22:05         ` J. Bruce Fields
  0 siblings, 2 replies; 19+ messages in thread
From: Chuck Lever @ 2010-09-30 15:16 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: J. Bruce Fields, Trond Myklebust, linux-nfs


On Sep 30, 2010, at 1:46 AM, Pavel Emelyanov wrote:

>>> Shall I commit this to my for-2.6.37 tree?  Objections?
>> 
>> I think it looks OK.
>> 
>> But I was wondering if there were any other changes needed for the RDMA 
>> transport capability, or had we decided that would happen at a latter point, 
>> or that changes are entirely unneeded
> 
> We definitely need more changes in the RDMA transport, but I would like to
> have it done later (unless someone other than me starts doing it earlier ;) ).

OK, thanks for clearing that up.  It makes sense to keep the scope of this socket patch set narrow, but I don't want the RDMA pieces to get lost.  The more we let the RDMA and socket transport capabilities differ, the harder it will be to support RDMA in the long run.

Anyway, Bruce, I have no objection to the latest version of this socket patch set, fwiw.

>> (are namespaces already supported in the IB stack)?
> 
> Nope. And this makes RDMA netnsization even more harder :(

-- 
chuck[dot]lever[at]oracle[dot]com





^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-30 15:16       ` Chuck Lever
@ 2010-09-30 15:34         ` Pavel Emelyanov
  2010-10-01 22:05         ` J. Bruce Fields
  1 sibling, 0 replies; 19+ messages in thread
From: Pavel Emelyanov @ 2010-09-30 15:34 UTC (permalink / raw)
  To: Chuck Lever; +Cc: J. Bruce Fields, Trond Myklebust, linux-nfs

On 09/30/2010 07:16 PM, Chuck Lever wrote:
> 
> On Sep 30, 2010, at 1:46 AM, Pavel Emelyanov wrote:
> 
>>>> Shall I commit this to my for-2.6.37 tree?  Objections?
>>>
>>> I think it looks OK.
>>>
>>> But I was wondering if there were any other changes needed for the RDMA 
>>> transport capability, or had we decided that would happen at a latter point, 
>>> or that changes are entirely unneeded
>>
>> We definitely need more changes in the RDMA transport, but I would like to
>> have it done later (unless someone other than me starts doing it earlier ;) ).
> 
> OK, thanks for clearing that up.  It makes sense to keep the scope of this socket
> patch set narrow, but I don't want the RDMA pieces to get lost.  The more we let
> the RDMA and socket transport capabilities differ, the harder it will be to support
> RDMA in the long run.

OK, but I may have problems with the IB hardware. If you can advise me the
way to test the RDMA without it, it would be very helpful.

> Anyway, Bruce, I have no objection to the latest version of this socket patch set, fwiw.
> 
>>> (are namespaces already supported in the IB stack)?
>>
>> Nope. And this makes RDMA netnsization even more harder :(
> 


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-30 15:16       ` Chuck Lever
  2010-09-30 15:34         ` Pavel Emelyanov
@ 2010-10-01 22:05         ` J. Bruce Fields
  1 sibling, 0 replies; 19+ messages in thread
From: J. Bruce Fields @ 2010-10-01 22:05 UTC (permalink / raw)
  To: Chuck Lever; +Cc: Pavel Emelyanov, Trond Myklebust, linux-nfs

On Thu, Sep 30, 2010 at 11:16:03AM -0400, Chuck Lever wrote:
> 
> On Sep 30, 2010, at 1:46 AM, Pavel Emelyanov wrote:
> 
> >>> Shall I commit this to my for-2.6.37 tree?  Objections?
> >> 
> >> I think it looks OK.
> >> 
> >> But I was wondering if there were any other changes needed for the RDMA 
> >> transport capability, or had we decided that would happen at a latter point, 
> >> or that changes are entirely unneeded
> > 
> > We definitely need more changes in the RDMA transport, but I would like to
> > have it done later (unless someone other than me starts doing it earlier ;) ).
> 
> OK, thanks for clearing that up.  It makes sense to keep the scope of this socket patch set narrow, but I don't want the RDMA pieces to get lost.  The more we let the RDMA and socket transport capabilities differ, the harder it will be to support RDMA in the long run.
> 
> Anyway, Bruce, I have no objection to the latest version of this socket patch set, fwiw.

Applied and pushed out, thanks Pavel and Chuck....

--b.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (9 preceding siblings ...)
  2010-09-29 21:45 ` [PATCH v3 0/9] sunrpc: Create sockets in namespaces J. Bruce Fields
@ 2011-07-20 21:10 ` J. Bruce Fields
  2011-07-21  7:50   ` Pavel Emelyanov
  10 siblings, 1 reply; 19+ messages in thread
From: J. Bruce Fields @ 2011-07-20 21:10 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Just curious--is there still work left on nfs and rpc containerization?
And what's left to do there?

--b.

On Wed, Sep 29, 2010 at 04:01:56PM +0400, Pavel Emelyanov wrote:
> v3 changes:
> Moved the generic xprt alloc/free code to xprt.c.
> Got David's ack on the 8th patch :)
> 
> v2 changes:
> Fixed comments from Chuck and Trond.
> Added one patch, that factors out rpc_xprt allocation as well.
> 
> v1:
> This set implements pulling the net * argument down to the existing
> sock_create_kern calls in the sunrpc layer and creating the sockets
> in the given net.
> 
> Thanks,
> Pavel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2011-07-20 21:10 ` J. Bruce Fields
@ 2011-07-21  7:50   ` Pavel Emelyanov
  2011-07-21 16:30     ` J. Bruce Fields
  0 siblings, 1 reply; 19+ messages in thread
From: Pavel Emelyanov @ 2011-07-21  7:50 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

On 07/21/2011 01:10 AM, J. Bruce Fields wrote:
> Just curious--is there still work left on nfs and rpc containerization?
> And what's left to do there?

Yes, there's still more work todo. Unfortunately it is stalled now, but
I plan to return back to it soon. Sorry about it.

> --b.
> 
> On Wed, Sep 29, 2010 at 04:01:56PM +0400, Pavel Emelyanov wrote:
>> v3 changes:
>> Moved the generic xprt alloc/free code to xprt.c.
>> Got David's ack on the 8th patch :)
>>
>> v2 changes:
>> Fixed comments from Chuck and Trond.
>> Added one patch, that factors out rpc_xprt allocation as well.
>>
>> v1:
>> This set implements pulling the net * argument down to the existing
>> sock_create_kern calls in the sunrpc layer and creating the sockets
>> in the given net.
>>
>> Thanks,
>> Pavel
> .
> 


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH v3 0/9] sunrpc: Create sockets in namespaces
  2011-07-21  7:50   ` Pavel Emelyanov
@ 2011-07-21 16:30     ` J. Bruce Fields
  0 siblings, 0 replies; 19+ messages in thread
From: J. Bruce Fields @ 2011-07-21 16:30 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

On Thu, Jul 21, 2011 at 11:50:24AM +0400, Pavel Emelyanov wrote:
> On 07/21/2011 01:10 AM, J. Bruce Fields wrote:
> > Just curious--is there still work left on nfs and rpc containerization?
> > And what's left to do there?
> 
> Yes, there's still more work todo. Unfortunately it is stalled now, but
> I plan to return back to it soon. Sorry about it.

No big deal, just wondering how big what's left is; do you have a list
somewhere?

--b.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2011-07-21 16:30 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-29 12:01 [PATCH v3 0/9] sunrpc: Create sockets in namespaces Pavel Emelyanov
2010-09-29 12:02 ` [PATCH 1/9] sunrpc: Factor out rpc_xprt allocation Pavel Emelyanov
2010-09-29 12:03 ` [PATCH 2/9] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
2010-09-29 12:03 ` [PATCH 3/9] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
2010-09-29 12:04 ` [PATCH 4/9] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
2010-09-29 12:04 ` [PATCH 5/9] sunrpc: Add net to rpc_create_args Pavel Emelyanov
2010-09-29 12:05 ` [PATCH 6/9] sunrpc: Add net to xprt_create Pavel Emelyanov
2010-09-29 12:05 ` [PATCH 7/9] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
2010-09-29 12:06 ` [PATCH 8/9] net: Export __sock_create Pavel Emelyanov
2010-09-29 12:06 ` [PATCH 9/9] sunrpc: Create sockets in net namespaces Pavel Emelyanov
2010-09-29 21:45 ` [PATCH v3 0/9] sunrpc: Create sockets in namespaces J. Bruce Fields
2010-09-29 21:49   ` Chuck Lever
2010-09-30  5:46     ` Pavel Emelyanov
2010-09-30 15:16       ` Chuck Lever
2010-09-30 15:34         ` Pavel Emelyanov
2010-10-01 22:05         ` J. Bruce Fields
2011-07-20 21:10 ` J. Bruce Fields
2011-07-21  7:50   ` Pavel Emelyanov
2011-07-21 16:30     ` J. Bruce Fields

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).