SUNRPC: relocate the creation of socket-specific tunables
Clean-up: The RPC client currently creates some sysctls that are specific to the socket transport. Move those entirely into xprtsock.c. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
282b32e17f
commit
fbf76683ff
@ -18,7 +18,6 @@
|
|||||||
#include <linux/sunrpc/types.h>
|
#include <linux/sunrpc/types.h>
|
||||||
#include <linux/sunrpc/sched.h>
|
#include <linux/sunrpc/sched.h>
|
||||||
#include <linux/sunrpc/stats.h>
|
#include <linux/sunrpc/stats.h>
|
||||||
#include <linux/sunrpc/xprt.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Declare the debug flags here
|
* Declare the debug flags here
|
||||||
@ -119,11 +118,6 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static unsigned int min_slot_table_size = RPC_MIN_SLOT_TABLE;
|
|
||||||
static unsigned int max_slot_table_size = RPC_MAX_SLOT_TABLE;
|
|
||||||
static unsigned int xprt_min_resvport_limit = RPC_MIN_RESVPORT;
|
|
||||||
static unsigned int xprt_max_resvport_limit = RPC_MAX_RESVPORT;
|
|
||||||
|
|
||||||
static ctl_table debug_table[] = {
|
static ctl_table debug_table[] = {
|
||||||
{
|
{
|
||||||
.ctl_name = CTL_RPCDEBUG,
|
.ctl_name = CTL_RPCDEBUG,
|
||||||
@ -157,50 +151,6 @@ static ctl_table debug_table[] = {
|
|||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = &proc_dodebug
|
.proc_handler = &proc_dodebug
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.ctl_name = CTL_SLOTTABLE_UDP,
|
|
||||||
.procname = "udp_slot_table_entries",
|
|
||||||
.data = &xprt_udp_slot_table_entries,
|
|
||||||
.maxlen = sizeof(unsigned int),
|
|
||||||
.mode = 0644,
|
|
||||||
.proc_handler = &proc_dointvec_minmax,
|
|
||||||
.strategy = &sysctl_intvec,
|
|
||||||
.extra1 = &min_slot_table_size,
|
|
||||||
.extra2 = &max_slot_table_size
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.ctl_name = CTL_SLOTTABLE_TCP,
|
|
||||||
.procname = "tcp_slot_table_entries",
|
|
||||||
.data = &xprt_tcp_slot_table_entries,
|
|
||||||
.maxlen = sizeof(unsigned int),
|
|
||||||
.mode = 0644,
|
|
||||||
.proc_handler = &proc_dointvec_minmax,
|
|
||||||
.strategy = &sysctl_intvec,
|
|
||||||
.extra1 = &min_slot_table_size,
|
|
||||||
.extra2 = &max_slot_table_size
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.ctl_name = CTL_MIN_RESVPORT,
|
|
||||||
.procname = "min_resvport",
|
|
||||||
.data = &xprt_min_resvport,
|
|
||||||
.maxlen = sizeof(unsigned int),
|
|
||||||
.mode = 0644,
|
|
||||||
.proc_handler = &proc_dointvec_minmax,
|
|
||||||
.strategy = &sysctl_intvec,
|
|
||||||
.extra1 = &xprt_min_resvport_limit,
|
|
||||||
.extra2 = &xprt_max_resvport_limit
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.ctl_name = CTL_MAX_RESVPORT,
|
|
||||||
.procname = "max_resvport",
|
|
||||||
.data = &xprt_max_resvport,
|
|
||||||
.maxlen = sizeof(unsigned int),
|
|
||||||
.mode = 0644,
|
|
||||||
.proc_handler = &proc_dointvec_minmax,
|
|
||||||
.strategy = &sysctl_intvec,
|
|
||||||
.extra1 = &xprt_min_resvport_limit,
|
|
||||||
.extra2 = &xprt_max_resvport_limit
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,6 +45,92 @@ unsigned int xprt_tcp_slot_table_entries = RPC_DEF_SLOT_TABLE;
|
|||||||
unsigned int xprt_min_resvport = RPC_DEF_MIN_RESVPORT;
|
unsigned int xprt_min_resvport = RPC_DEF_MIN_RESVPORT;
|
||||||
unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT;
|
unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We can register our own files under /proc/sys/sunrpc by
|
||||||
|
* calling register_sysctl_table() again. The files in that
|
||||||
|
* directory become the union of all files registered there.
|
||||||
|
*
|
||||||
|
* We simply need to make sure that we don't collide with
|
||||||
|
* someone else's file names!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef RPC_DEBUG
|
||||||
|
|
||||||
|
static unsigned int min_slot_table_size = RPC_MIN_SLOT_TABLE;
|
||||||
|
static unsigned int max_slot_table_size = RPC_MAX_SLOT_TABLE;
|
||||||
|
static unsigned int xprt_min_resvport_limit = RPC_MIN_RESVPORT;
|
||||||
|
static unsigned int xprt_max_resvport_limit = RPC_MAX_RESVPORT;
|
||||||
|
|
||||||
|
static struct ctl_table_header *sunrpc_table_header;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: changing the UDP slot table size should also resize the UDP
|
||||||
|
* socket buffers for existing UDP transports
|
||||||
|
*/
|
||||||
|
static ctl_table xs_tunables_table[] = {
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_SLOTTABLE_UDP,
|
||||||
|
.procname = "udp_slot_table_entries",
|
||||||
|
.data = &xprt_udp_slot_table_entries,
|
||||||
|
.maxlen = sizeof(unsigned int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec_minmax,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
.extra1 = &min_slot_table_size,
|
||||||
|
.extra2 = &max_slot_table_size
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_SLOTTABLE_TCP,
|
||||||
|
.procname = "tcp_slot_table_entries",
|
||||||
|
.data = &xprt_tcp_slot_table_entries,
|
||||||
|
.maxlen = sizeof(unsigned int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec_minmax,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
.extra1 = &min_slot_table_size,
|
||||||
|
.extra2 = &max_slot_table_size
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_MIN_RESVPORT,
|
||||||
|
.procname = "min_resvport",
|
||||||
|
.data = &xprt_min_resvport,
|
||||||
|
.maxlen = sizeof(unsigned int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec_minmax,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
.extra1 = &xprt_min_resvport_limit,
|
||||||
|
.extra2 = &xprt_max_resvport_limit
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_MAX_RESVPORT,
|
||||||
|
.procname = "max_resvport",
|
||||||
|
.data = &xprt_max_resvport,
|
||||||
|
.maxlen = sizeof(unsigned int),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec_minmax,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
.extra1 = &xprt_min_resvport_limit,
|
||||||
|
.extra2 = &xprt_max_resvport_limit
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static ctl_table sunrpc_table[] = {
|
||||||
|
{
|
||||||
|
.ctl_name = CTL_SUNRPC,
|
||||||
|
.procname = "sunrpc",
|
||||||
|
.mode = 0555,
|
||||||
|
.child = xs_tunables_table
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* How many times to try sending a request on a socket before waiting
|
* How many times to try sending a request on a socket before waiting
|
||||||
* for the socket buffer to clear.
|
* for the socket buffer to clear.
|
||||||
@ -1504,19 +1590,34 @@ struct rpc_xprt *xs_setup_tcp(struct sockaddr *addr, size_t addrlen, struct rpc_
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init_socket_xprt - stub
|
* init_socket_xprt - set up xprtsock's sysctls
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
int init_socket_xprt(void)
|
int init_socket_xprt(void)
|
||||||
{
|
{
|
||||||
|
#ifdef RPC_DEBUG
|
||||||
|
if (!sunrpc_table_header) {
|
||||||
|
sunrpc_table_header = register_sysctl_table(sunrpc_table, 1);
|
||||||
|
#ifdef CONFIG_PROC_FS
|
||||||
|
if (sunrpc_table[0].de)
|
||||||
|
sunrpc_table[0].de->owner = THIS_MODULE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cleanup_socket_xprt - stub
|
* cleanup_socket_xprt - remove xprtsock's sysctls
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void cleanup_socket_xprt(void)
|
void cleanup_socket_xprt(void)
|
||||||
{
|
{
|
||||||
return;
|
#ifdef RPC_DEBUG
|
||||||
|
if (sunrpc_table_header) {
|
||||||
|
unregister_sysctl_table(sunrpc_table_header);
|
||||||
|
sunrpc_table_header = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user