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>
This commit is contained in:
parent
2ea75a10ad
commit
1a114a6646
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user