Browse Source

SUNRPC: optimize net_ns dereferencing in rpcbind registering calls

Static rpcbind registering functions can be parametrized by network namespace
pointer, calculated only once, instead of using init_net pointer (or taking it
from current when virtualization will be comleted) in many places.

Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Stanislav Kinsbursky 13 years ago
parent
commit
1a114a6646
1 changed files with 9 additions and 9 deletions
  1. 9 9
      net/sunrpc/rpcb_clnt.c

+ 9 - 9
net/sunrpc/rpcb_clnt.c

@@ -451,14 +451,14 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned short port)
 /*
 /*
  * Fill in AF_INET family-specific arguments to register
  * Fill in AF_INET family-specific arguments to register
  */
  */
-static int rpcb_register_inet4(const struct sockaddr *sap,
+static int rpcb_register_inet4(struct sunrpc_net *sn,
+			       const struct sockaddr *sap,
 			       struct rpc_message *msg)
 			       struct rpc_message *msg)
 {
 {
 	const struct sockaddr_in *sin = (const struct sockaddr_in *)sap;
 	const struct sockaddr_in *sin = (const struct sockaddr_in *)sap;
 	struct rpcbind_args *map = msg->rpc_argp;
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin->sin_port);
 	unsigned short port = ntohs(sin->sin_port);
 	int result;
 	int result;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 
 	map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
 	map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
 
 
@@ -479,14 +479,14 @@ static int rpcb_register_inet4(const struct sockaddr *sap,
 /*
 /*
  * Fill in AF_INET6 family-specific arguments to register
  * Fill in AF_INET6 family-specific arguments to register
  */
  */
-static int rpcb_register_inet6(const struct sockaddr *sap,
+static int rpcb_register_inet6(struct sunrpc_net *sn,
+			       const struct sockaddr *sap,
 			       struct rpc_message *msg)
 			       struct rpc_message *msg)
 {
 {
 	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sap;
 	const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sap;
 	struct rpcbind_args *map = msg->rpc_argp;
 	struct rpcbind_args *map = msg->rpc_argp;
 	unsigned short port = ntohs(sin6->sin6_port);
 	unsigned short port = ntohs(sin6->sin6_port);
 	int result;
 	int result;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 
 	map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
 	map->r_addr = rpc_sockaddr2uaddr(sap, GFP_KERNEL);
 
 
@@ -504,10 +504,10 @@ static int rpcb_register_inet6(const struct sockaddr *sap,
 	return result;
 	return result;
 }
 }
 
 
-static int rpcb_unregister_all_protofamilies(struct rpc_message *msg)
+static int rpcb_unregister_all_protofamilies(struct sunrpc_net *sn,
+					     struct rpc_message *msg)
 {
 {
 	struct rpcbind_args *map = msg->rpc_argp;
 	struct rpcbind_args *map = msg->rpc_argp;
-	struct sunrpc_net *sn = net_generic(&init_net, sunrpc_net_id);
 
 
 	dprintk("RPC:       unregistering [%u, %u, '%s'] with "
 	dprintk("RPC:       unregistering [%u, %u, '%s'] with "
 		"local rpcbind\n",
 		"local rpcbind\n",
@@ -580,13 +580,13 @@ int rpcb_v4_register(const u32 program, const u32 version,
 		return -EPROTONOSUPPORT;
 		return -EPROTONOSUPPORT;
 
 
 	if (address == NULL)
 	if (address == NULL)
-		return rpcb_unregister_all_protofamilies(&msg);
+		return rpcb_unregister_all_protofamilies(sn, &msg);
 
 
 	switch (address->sa_family) {
 	switch (address->sa_family) {
 	case AF_INET:
 	case AF_INET:
-		return rpcb_register_inet4(address, &msg);
+		return rpcb_register_inet4(sn, address, &msg);
 	case AF_INET6:
 	case AF_INET6:
-		return rpcb_register_inet6(address, &msg);
+		return rpcb_register_inet6(sn, address, &msg);
 	}
 	}
 
 
 	return -EAFNOSUPPORT;
 	return -EAFNOSUPPORT;