Linux NFS development
 help / color / mirror / Atom feed
* [PATCH 0/8] sunrpc: Create sockets in namespaces
@ 2010-09-27 10:05 Pavel Emelyanov
  2010-09-27 10:06 ` [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:05 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Hi!

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.

Patch #7 opens the __sock_create for public and I hope we can do it
not in the Dave's tree :)

Applies to git://linux-nfs.org/~bfields/linux.git nfsd-next after the
ip_map_cache virtualization patch set I sent before.

Thanks,
Pavel

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

* [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
@ 2010-09-27 10:06 ` Pavel Emelyanov
  2010-09-27 19:40   ` Chuck Lever
  2010-09-27 10:06 ` [PATCH 2/8] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:06 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs


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

diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index b6309db..98d4b7b 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -759,6 +759,8 @@ static void xs_tcp_close(struct rpc_xprt *xprt)
 		xs_tcp_shutdown(xprt);
 }
 
+static void xs_free_xprt(struct rpc_xprt *xprt);
+
 /**
  * xs_destroy - prepare to shutdown a transport
  * @xprt: doomed transport
@@ -774,8 +776,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
 
 	xs_close(xprt);
 	xs_free_peer_addresses(xprt);
-	kfree(xprt->slot);
-	kfree(xprt);
+	xs_free_xprt(xprt);
 	module_put(THIS_MODULE);
 }
 
@@ -2298,6 +2299,12 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
 	return xprt;
 }
 
+static void xs_free_xprt(struct rpc_xprt *xprt)
+{
+	kfree(xprt->slot);
+	kfree(xprt);
+}
+
 static const struct rpc_timeout xs_udp_default_timeout = {
 	.to_initval = 5 * HZ,
 	.to_maxval = 30 * HZ,
@@ -2371,8 +2378,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);
+	xs_free_xprt(xprt);
 	return ret;
 }
 
@@ -2447,8 +2453,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);
+	xs_free_xprt(xprt);
 	return ret;
 }
 
@@ -2528,8 +2533,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);
+	xs_free_xprt(xprt);
 	return ret;
 }
 
-- 
1.5.5.6


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

* [PATCH 2/8] sunrpc: Add net argument to svc_create_xprt
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
  2010-09-27 10:06 ` [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
@ 2010-09-27 10:06 ` Pavel Emelyanov
  2010-09-27 10:07 ` [PATCH 3/8] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:06 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] 18+ messages in thread

* [PATCH 3/8] sunrpc: Pull net argument downto svc_create_socket
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
  2010-09-27 10:06 ` [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
  2010-09-27 10:06 ` [PATCH 2/8] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
@ 2010-09-27 10:07 ` Pavel Emelyanov
  2010-09-27 10:07 ` [PATCH 4/8] sunrpc: Add net to rpc_create_args Pavel Emelyanov
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:07 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] 18+ messages in thread

* [PATCH 4/8] sunrpc: Add net to rpc_create_args
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (2 preceding siblings ...)
  2010-09-27 10:07 ` [PATCH 3/8] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
@ 2010-09-27 10:07 ` Pavel Emelyanov
  2010-09-27 10:08 ` [PATCH 5/8] sunrpc: Add net to xprt_create Pavel Emelyanov
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:07 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] 18+ messages in thread

* [PATCH 5/8] sunrpc: Add net to xprt_create
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (3 preceding siblings ...)
  2010-09-27 10:07 ` [PATCH 4/8] sunrpc: Add net to rpc_create_args Pavel Emelyanov
@ 2010-09-27 10:08 ` Pavel Emelyanov
  2010-09-27 10:09 ` [PATCH 6/8] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:08 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 ff5a77b..cd27538 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] 18+ messages in thread

* [PATCH 6/8] sunrpc: Tag rpc_xprt with net
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (4 preceding siblings ...)
  2010-09-27 10:08 ` [PATCH 5/8] sunrpc: Add net to xprt_create Pavel Emelyanov
@ 2010-09-27 10:09 ` Pavel Emelyanov
  2010-09-27 10:09 ` [PATCH 7/8] net: Export __sock_create Pavel Emelyanov
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:09 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 us the context in the connection workers where real sockets
are created.

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

diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index cd27538..83ae00a 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];
 };
 
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 98d4b7b..292f449 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -2296,11 +2296,13 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
 	if (args->srcaddr)
 		memcpy(&new->srcaddr, args->srcaddr, args->addrlen);
 
+	xprt->xprt_net = get_net(args->net);
 	return xprt;
 }
 
 static void xs_free_xprt(struct rpc_xprt *xprt)
 {
+	put_net(xprt->xprt_net);
 	kfree(xprt->slot);
 	kfree(xprt);
 }
-- 
1.5.5.6


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

* [PATCH 7/8] net: Export __sock_create
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (5 preceding siblings ...)
  2010-09-27 10:09 ` [PATCH 6/8] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
@ 2010-09-27 10:09 ` Pavel Emelyanov
  2010-09-27 13:31   ` Trond Myklebust
  2010-09-27 10:10 ` [PATCH 8/8] sunrpc: Create sockets in net namespaces Pavel Emelyanov
  2010-09-27 19:10 ` [PATCH 0/8] sunrpc: Create sockets in namespaces J. Bruce Fields
  8 siblings, 1 reply; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:09 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

Can we can do it not through the Dave's tree?

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
---
 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] 18+ messages in thread

* [PATCH 8/8] sunrpc: Create sockets in net namespaces
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (6 preceding siblings ...)
  2010-09-27 10:09 ` [PATCH 7/8] net: Export __sock_create Pavel Emelyanov
@ 2010-09-27 10:10 ` Pavel Emelyanov
  2010-09-27 19:10 ` [PATCH 0/8] sunrpc: Create sockets in namespaces J. Bruce Fields
  8 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 10:10 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 292f449..aa24ba5 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1682,7 +1682,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;
@@ -1727,7 +1727,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;
@@ -1933,7 +1933,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);
@@ -1972,7 +1972,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] 18+ messages in thread

* Re: [PATCH 7/8] net: Export __sock_create
  2010-09-27 10:09 ` [PATCH 7/8] net: Export __sock_create Pavel Emelyanov
@ 2010-09-27 13:31   ` Trond Myklebust
  2010-09-27 13:41     ` Pavel Emelyanov
  0 siblings, 1 reply; 18+ messages in thread
From: Trond Myklebust @ 2010-09-27 13:31 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: J. Bruce Fields, Chuck Lever, linux-nfs

On Mon, 2010-09-27 at 14:09 +0400, Pavel Emelyanov wrote:
> Can we can do it not through the Dave's tree?

I think we will still need Dave's approval for this. Either an Ack or a
signed-off-by. Linus will very likely yell at us and refuse to take the
patch if we don't.

Cheers
  Trond

> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
> ---
>  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)
>  {



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

* Re: [PATCH 7/8] net: Export __sock_create
  2010-09-27 13:31   ` Trond Myklebust
@ 2010-09-27 13:41     ` Pavel Emelyanov
  2010-09-28 17:40       ` David Miller
  0 siblings, 1 reply; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-27 13:41 UTC (permalink / raw)
  To: Trond Myklebust, David Miller; +Cc: J. Bruce Fields, Chuck Lever, linux-nfs

On 09/27/2010 05:31 PM, Trond Myklebust wrote:
> On Mon, 2010-09-27 at 14:09 +0400, Pavel Emelyanov wrote:
>> Can we can do it not through the Dave's tree?
> 
> I think we will still need Dave's approval for this. Either an Ack or a
> signed-off-by. Linus will very likely yell at us and refuse to take the
> patch if we don't.

OK, I then put Dave in Cc.

And a small background of the patch - I'm trying to make sunrpc layer work
in net namespaces and in order to do this I need to turn existing calls to
sock_create_kern() into __sock_create() to specify the net namespace the
socket are to be created in.

Dave, can we go on with this, please? :)

> Cheers
>   Trond
> 
>> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
>> ---
>>  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)
>>  {

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

* Re: [PATCH 0/8] sunrpc: Create sockets in namespaces
  2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
                   ` (7 preceding siblings ...)
  2010-09-27 10:10 ` [PATCH 8/8] sunrpc: Create sockets in net namespaces Pavel Emelyanov
@ 2010-09-27 19:10 ` J. Bruce Fields
  8 siblings, 0 replies; 18+ messages in thread
From: J. Bruce Fields @ 2010-09-27 19:10 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

On Mon, Sep 27, 2010 at 02:05:46PM +0400, Pavel Emelyanov wrote:
> Hi!
> 
> 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.
> 
> Patch #7 opens the __sock_create for public and I hope we can do it
> not in the Dave's tree :)
> 
> Applies to git://linux-nfs.org/~bfields/linux.git nfsd-next after the
> ip_map_cache virtualization patch set I sent before.

They look fine to me.

--b.

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

* Re: [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
  2010-09-27 10:06 ` [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
@ 2010-09-27 19:40   ` Chuck Lever
  2010-09-28 10:44     ` Pavel Emelyanov
  0 siblings, 1 reply; 18+ messages in thread
From: Chuck Lever @ 2010-09-27 19:40 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: J. Bruce Fields, Trond Myklebust, linux-nfs


On Sep 27, 2010, at 6:06 AM, Pavel Emelyanov wrote:

> 
> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
> ---
> net/sunrpc/xprtsock.c |   20 ++++++++++++--------
> 1 files changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> index b6309db..98d4b7b 100644
> --- a/net/sunrpc/xprtsock.c
> +++ b/net/sunrpc/xprtsock.c
> @@ -759,6 +759,8 @@ static void xs_tcp_close(struct rpc_xprt *xprt)
> 		xs_tcp_shutdown(xprt);
> }
> 
> +static void xs_free_xprt(struct rpc_xprt *xprt);

Style nit: we usually like forward declarations at the top of source files.

Do you need to fix up xprtrdma too?  (eg. xprt_rdma_destroy)  It looks like it has similar logic around freeing xprts.  Even though it doesn't use sockets, do we need to be concerned about net namespaces for RDMA transports?

> +
> /**
>  * xs_destroy - prepare to shutdown a transport
>  * @xprt: doomed transport
> @@ -774,8 +776,7 @@ static void xs_destroy(struct rpc_xprt *xprt)
> 
> 	xs_close(xprt);
> 	xs_free_peer_addresses(xprt);
> -	kfree(xprt->slot);
> -	kfree(xprt);
> +	xs_free_xprt(xprt);
> 	module_put(THIS_MODULE);
> }
> 
> @@ -2298,6 +2299,12 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
> 	return xprt;
> }
> 
> +static void xs_free_xprt(struct rpc_xprt *xprt)
> +{
> +	kfree(xprt->slot);
> +	kfree(xprt);
> +}
> +
> static const struct rpc_timeout xs_udp_default_timeout = {
> 	.to_initval = 5 * HZ,
> 	.to_maxval = 30 * HZ,
> @@ -2371,8 +2378,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);
> +	xs_free_xprt(xprt);
> 	return ret;
> }
> 
> @@ -2447,8 +2453,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);
> +	xs_free_xprt(xprt);
> 	return ret;
> }
> 
> @@ -2528,8 +2533,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);
> +	xs_free_xprt(xprt);
> 	return ret;
> }
> 
> -- 
> 1.5.5.6
> 

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





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

* Re: [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
  2010-09-27 19:40   ` Chuck Lever
@ 2010-09-28 10:44     ` Pavel Emelyanov
  2010-09-28 13:56       ` J. Bruce Fields
  2010-09-28 13:59       ` Trond Myklebust
  0 siblings, 2 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-28 10:44 UTC (permalink / raw)
  To: Chuck Lever, J. Bruce Fields; +Cc: Trond Myklebust, linux-nfs

On 09/27/2010 11:40 PM, Chuck Lever wrote:
> 
> On Sep 27, 2010, at 6:06 AM, Pavel Emelyanov wrote:
> 
>>
>> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
>> ---
>> net/sunrpc/xprtsock.c |   20 ++++++++++++--------
>> 1 files changed, 12 insertions(+), 8 deletions(-)
>>
>> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
>> index b6309db..98d4b7b 100644
>> --- a/net/sunrpc/xprtsock.c
>> +++ b/net/sunrpc/xprtsock.c
>> @@ -759,6 +759,8 @@ static void xs_tcp_close(struct rpc_xprt *xprt)
>> 		xs_tcp_shutdown(xprt);
>> }
>>
>> +static void xs_free_xprt(struct rpc_xprt *xprt);
> 
> Style nit: we usually like forward declarations at the top of source files.

OK.

> Do you need to fix up xprtrdma too?  (eg. xprt_rdma_destroy)  It looks like it has 
> similar logic around freeing xprts. 

Indeed. Bruce, which way would you prefer - should I re-send the whole set or
can apply this change incrementally?

> Even though it doesn't use sockets, do we need to be concerned about net namespaces
> for RDMA transports?

I believe we should, since at least its initialization goes to the rdma_resolve_addr
which in turn resolves the address using IP-level routing. But I wanted to finish with
the tcp/udp transports first.

Thanks,
Pavel

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

* Re: [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
  2010-09-28 10:44     ` Pavel Emelyanov
@ 2010-09-28 13:56       ` J. Bruce Fields
  2010-09-28 13:59       ` Trond Myklebust
  1 sibling, 0 replies; 18+ messages in thread
From: J. Bruce Fields @ 2010-09-28 13:56 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, Trond Myklebust, linux-nfs

On Tue, Sep 28, 2010 at 02:44:45PM +0400, Pavel Emelyanov wrote:
> On 09/27/2010 11:40 PM, Chuck Lever wrote:
> > 
> > On Sep 27, 2010, at 6:06 AM, Pavel Emelyanov wrote:
> > 
> >>
> >> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
> >> ---
> >> net/sunrpc/xprtsock.c |   20 ++++++++++++--------
> >> 1 files changed, 12 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> >> index b6309db..98d4b7b 100644
> >> --- a/net/sunrpc/xprtsock.c
> >> +++ b/net/sunrpc/xprtsock.c
> >> @@ -759,6 +759,8 @@ static void xs_tcp_close(struct rpc_xprt *xprt)
> >> 		xs_tcp_shutdown(xprt);
> >> }
> >>
> >> +static void xs_free_xprt(struct rpc_xprt *xprt);
> > 
> > Style nit: we usually like forward declarations at the top of source files.
> 
> OK.
> 
> > Do you need to fix up xprtrdma too?  (eg. xprt_rdma_destroy)  It looks like it has 
> > similar logic around freeing xprts. 
> 
> Indeed. Bruce, which way would you prefer - should I re-send the whole set or
> can apply this change incrementally?

I haven't pushed it out yet, so just do whichever you prefer.

--b.

> 
> > Even though it doesn't use sockets, do we need to be concerned about net namespaces
> > for RDMA transports?
> 
> I believe we should, since at least its initialization goes to the rdma_resolve_addr
> which in turn resolves the address using IP-level routing. But I wanted to finish with
> the tcp/udp transports first.
> 
> Thanks,
> Pavel

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

* Re: [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
  2010-09-28 10:44     ` Pavel Emelyanov
  2010-09-28 13:56       ` J. Bruce Fields
@ 2010-09-28 13:59       ` Trond Myklebust
       [not found]         ` <1285682384.9185.16.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
  1 sibling, 1 reply; 18+ messages in thread
From: Trond Myklebust @ 2010-09-28 13:59 UTC (permalink / raw)
  To: Pavel Emelyanov; +Cc: Chuck Lever, J. Bruce Fields, linux-nfs

On Tue, 2010-09-28 at 14:44 +0400, Pavel Emelyanov wrote:
> On 09/27/2010 11:40 PM, Chuck Lever wrote:
> > 
> > On Sep 27, 2010, at 6:06 AM, Pavel Emelyanov wrote:
> > 
> >>
> >> Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
> >> ---
> >> net/sunrpc/xprtsock.c |   20 ++++++++++++--------
> >> 1 files changed, 12 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> >> index b6309db..98d4b7b 100644
> >> --- a/net/sunrpc/xprtsock.c
> >> +++ b/net/sunrpc/xprtsock.c
> >> @@ -759,6 +759,8 @@ static void xs_tcp_close(struct rpc_xprt *xprt)
> >> 		xs_tcp_shutdown(xprt);
> >> }
> >>
> >> +static void xs_free_xprt(struct rpc_xprt *xprt);
> > 
> > Style nit: we usually like forward declarations at the top of source files.
> 
> OK.
> 
> > Do you need to fix up xprtrdma too?  (eg. xprt_rdma_destroy)  It looks like it has 
> > similar logic around freeing xprts. 
> 
> Indeed. Bruce, which way would you prefer - should I re-send the whole set or
> can apply this change incrementally?
> 
> > Even though it doesn't use sockets, do we need to be concerned about net namespaces
> > for RDMA transports?
> 
> I believe we should, since at least its initialization goes to the rdma_resolve_addr
> which in turn resolves the address using IP-level routing. But I wanted to finish with
> the tcp/udp transports first.

If you are redoing the patch, then could you please just get rid of the
above forward declaration for xs_free_xprt, and instead just move the
function itself further up the file?

Cheers
  Trond

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

* Re: [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing
       [not found]         ` <1285682384.9185.16.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
@ 2010-09-28 14:23           ` Pavel Emelyanov
  0 siblings, 0 replies; 18+ messages in thread
From: Pavel Emelyanov @ 2010-09-28 14:23 UTC (permalink / raw)
  To: Trond Myklebust, J. Bruce Fields; +Cc: Chuck Lever, linux-nfs

> If you are redoing the patch, then could you please just get rid of the
> above forward declaration for xs_free_xprt, and instead just move the
> function itself further up the file?

Sure. Will do it soon.

> Cheers
>   Trond

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

* Re: [PATCH 7/8] net: Export __sock_create
  2010-09-27 13:41     ` Pavel Emelyanov
@ 2010-09-28 17:40       ` David Miller
  0 siblings, 0 replies; 18+ messages in thread
From: David Miller @ 2010-09-28 17:40 UTC (permalink / raw)
  To: xemul; +Cc: Trond.Myklebust, bfields, chuck.lever, linux-nfs

From: Pavel Emelyanov <xemul@parallels.com>
Date: Mon, 27 Sep 2010 17:41:23 +0400

> On 09/27/2010 05:31 PM, Trond Myklebust wrote:
>> On Mon, 2010-09-27 at 14:09 +0400, Pavel Emelyanov wrote:
>>> Can we can do it not through the Dave's tree?
>> 
>> I think we will still need Dave's approval for this. Either an Ack or a
>> signed-off-by. Linus will very likely yell at us and refuse to take the
>> patch if we don't.
> 
> OK, I then put Dave in Cc.
> 
> And a small background of the patch - I'm trying to make sunrpc layer work
> in net namespaces and in order to do this I need to turn existing calls to
> sock_create_kern() into __sock_create() to specify the net namespace the
> socket are to be created in.
> 
> Dave, can we go on with this, please? :)

This is fine:

Acked-by: David S. Miller <davem@davemloft.net>

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

end of thread, other threads:[~2010-09-28 17:40 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-27 10:05 [PATCH 0/8] sunrpc: Create sockets in namespaces Pavel Emelyanov
2010-09-27 10:06 ` [PATCH 1/8] sunrpc: Factor out rpc_xprt freeing Pavel Emelyanov
2010-09-27 19:40   ` Chuck Lever
2010-09-28 10:44     ` Pavel Emelyanov
2010-09-28 13:56       ` J. Bruce Fields
2010-09-28 13:59       ` Trond Myklebust
     [not found]         ` <1285682384.9185.16.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2010-09-28 14:23           ` Pavel Emelyanov
2010-09-27 10:06 ` [PATCH 2/8] sunrpc: Add net argument to svc_create_xprt Pavel Emelyanov
2010-09-27 10:07 ` [PATCH 3/8] sunrpc: Pull net argument downto svc_create_socket Pavel Emelyanov
2010-09-27 10:07 ` [PATCH 4/8] sunrpc: Add net to rpc_create_args Pavel Emelyanov
2010-09-27 10:08 ` [PATCH 5/8] sunrpc: Add net to xprt_create Pavel Emelyanov
2010-09-27 10:09 ` [PATCH 6/8] sunrpc: Tag rpc_xprt with net Pavel Emelyanov
2010-09-27 10:09 ` [PATCH 7/8] net: Export __sock_create Pavel Emelyanov
2010-09-27 13:31   ` Trond Myklebust
2010-09-27 13:41     ` Pavel Emelyanov
2010-09-28 17:40       ` David Miller
2010-09-27 10:10 ` [PATCH 8/8] sunrpc: Create sockets in net namespaces Pavel Emelyanov
2010-09-27 19:10 ` [PATCH 0/8] sunrpc: Create sockets in namespaces 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