mirror of https://gitee.com/openkylin/linux.git
NFSv4.x: Add kernel parameter to control the callback server
Add support for the kernel parameter nfs.callback_nr_threads to set the number of threads that will be assigned to the callback channel. Add support for the kernel parameter nfs.nfs.max_session_cb_slots to set the maximum size of the callback channel slot table. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
bb6aeba736
commit
5405fc44c3
|
@ -2420,6 +2420,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
nfsrootdebug [NFS] enable nfsroot debugging messages.
|
nfsrootdebug [NFS] enable nfsroot debugging messages.
|
||||||
See Documentation/filesystems/nfs/nfsroot.txt.
|
See Documentation/filesystems/nfs/nfsroot.txt.
|
||||||
|
|
||||||
|
nfs.callback_nr_threads=
|
||||||
|
[NFSv4] set the total number of threads that the
|
||||||
|
NFS client will assign to service NFSv4 callback
|
||||||
|
requests.
|
||||||
|
|
||||||
nfs.callback_tcpport=
|
nfs.callback_tcpport=
|
||||||
[NFS] set the TCP port on which the NFSv4 callback
|
[NFS] set the TCP port on which the NFSv4 callback
|
||||||
channel should listen.
|
channel should listen.
|
||||||
|
@ -2443,6 +2448,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
of returning the full 64-bit number.
|
of returning the full 64-bit number.
|
||||||
The default is to return 64-bit inode numbers.
|
The default is to return 64-bit inode numbers.
|
||||||
|
|
||||||
|
nfs.max_session_cb_slots=
|
||||||
|
[NFSv4.1] Sets the maximum number of session
|
||||||
|
slots the client will assign to the callback
|
||||||
|
channel. This determines the maximum number of
|
||||||
|
callbacks the client will process in parallel for
|
||||||
|
a particular server.
|
||||||
|
|
||||||
nfs.max_session_slots=
|
nfs.max_session_slots=
|
||||||
[NFSv4.1] Sets the maximum number of session slots
|
[NFSv4.1] Sets the maximum number of session slots
|
||||||
the client will attempt to negotiate with the server.
|
the client will attempt to negotiate with the server.
|
||||||
|
|
|
@ -148,11 +148,14 @@ static inline void nfs_callback_bc_serv(u32 minorversion, struct rpc_xprt *xprt,
|
||||||
static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,
|
static int nfs_callback_start_svc(int minorversion, struct rpc_xprt *xprt,
|
||||||
struct svc_serv *serv)
|
struct svc_serv *serv)
|
||||||
{
|
{
|
||||||
const int nrservs = NFS4_NR_CALLBACK_THREADS;
|
int nrservs = nfs_callback_nr_threads;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
nfs_callback_bc_serv(minorversion, xprt, serv);
|
nfs_callback_bc_serv(minorversion, xprt, serv);
|
||||||
|
|
||||||
|
if (nrservs < NFS4_MIN_NR_CALLBACK_THREADS)
|
||||||
|
nrservs = NFS4_MIN_NR_CALLBACK_THREADS;
|
||||||
|
|
||||||
if (serv->sv_nrthreads-1 == nrservs)
|
if (serv->sv_nrthreads-1 == nrservs)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -198,8 +198,9 @@ extern void nfs_callback_down(int minorversion, struct net *net);
|
||||||
#define NFS41_BC_MIN_CALLBACKS 1
|
#define NFS41_BC_MIN_CALLBACKS 1
|
||||||
#define NFS41_BC_MAX_CALLBACKS 1
|
#define NFS41_BC_MAX_CALLBACKS 1
|
||||||
|
|
||||||
#define NFS4_NR_CALLBACK_THREADS 1
|
#define NFS4_MIN_NR_CALLBACK_THREADS 1
|
||||||
|
|
||||||
extern unsigned int nfs_callback_set_tcpport;
|
extern unsigned int nfs_callback_set_tcpport;
|
||||||
|
extern unsigned short nfs_callback_nr_threads;
|
||||||
|
|
||||||
#endif /* __LINUX_FS_NFS_CALLBACK_H */
|
#endif /* __LINUX_FS_NFS_CALLBACK_H */
|
||||||
|
|
|
@ -471,6 +471,7 @@ extern struct nfs_subversion nfs_v4;
|
||||||
struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
|
struct dentry *nfs4_try_mount(int, const char *, struct nfs_mount_info *, struct nfs_subversion *);
|
||||||
extern bool nfs4_disable_idmapping;
|
extern bool nfs4_disable_idmapping;
|
||||||
extern unsigned short max_session_slots;
|
extern unsigned short max_session_slots;
|
||||||
|
extern unsigned short max_session_cb_slots;
|
||||||
extern unsigned short send_implementation_id;
|
extern unsigned short send_implementation_id;
|
||||||
extern bool recover_lost_locks;
|
extern bool recover_lost_locks;
|
||||||
|
|
||||||
|
|
|
@ -7463,7 +7463,7 @@ static void nfs4_init_channel_attrs(struct nfs41_create_session_args *args,
|
||||||
args->bc_attrs.max_resp_sz = max_bc_payload;
|
args->bc_attrs.max_resp_sz = max_bc_payload;
|
||||||
args->bc_attrs.max_resp_sz_cached = 0;
|
args->bc_attrs.max_resp_sz_cached = 0;
|
||||||
args->bc_attrs.max_ops = NFS4_MAX_BACK_CHANNEL_OPS;
|
args->bc_attrs.max_ops = NFS4_MAX_BACK_CHANNEL_OPS;
|
||||||
args->bc_attrs.max_reqs = NFS41_BC_MAX_CALLBACKS;
|
args->bc_attrs.max_reqs = min_t(unsigned short, max_session_cb_slots, 1);
|
||||||
|
|
||||||
dprintk("%s: Back Channel : max_rqst_sz=%u max_resp_sz=%u "
|
dprintk("%s: Back Channel : max_rqst_sz=%u max_resp_sz=%u "
|
||||||
"max_resp_sz_cached=%u max_ops=%u max_reqs=%u\n",
|
"max_resp_sz_cached=%u max_ops=%u max_reqs=%u\n",
|
||||||
|
@ -7510,10 +7510,9 @@ static int nfs4_verify_back_channel_attrs(struct nfs41_create_session_args *args
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (rcvd->max_resp_sz_cached > sent->max_resp_sz_cached)
|
if (rcvd->max_resp_sz_cached > sent->max_resp_sz_cached)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
/* These would render the backchannel useless: */
|
if (rcvd->max_ops > sent->max_ops)
|
||||||
if (rcvd->max_ops != sent->max_ops)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (rcvd->max_reqs != sent->max_reqs)
|
if (rcvd->max_reqs > sent->max_reqs)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
out:
|
out:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
/* maximum number of slots to use */
|
/* maximum number of slots to use */
|
||||||
#define NFS4_DEF_SLOT_TABLE_SIZE (64U)
|
#define NFS4_DEF_SLOT_TABLE_SIZE (64U)
|
||||||
|
#define NFS4_DEF_CB_SLOT_TABLE_SIZE (1U)
|
||||||
#define NFS4_MAX_SLOT_TABLE (1024U)
|
#define NFS4_MAX_SLOT_TABLE (1024U)
|
||||||
#define NFS4_NO_SLOT ((u32)-1)
|
#define NFS4_NO_SLOT ((u32)-1)
|
||||||
|
|
||||||
|
|
|
@ -2848,19 +2848,23 @@ static int nfs4_validate_mount_data(void *options,
|
||||||
* NFS client for backwards compatibility
|
* NFS client for backwards compatibility
|
||||||
*/
|
*/
|
||||||
unsigned int nfs_callback_set_tcpport;
|
unsigned int nfs_callback_set_tcpport;
|
||||||
|
unsigned short nfs_callback_nr_threads;
|
||||||
/* Default cache timeout is 10 minutes */
|
/* Default cache timeout is 10 minutes */
|
||||||
unsigned int nfs_idmap_cache_timeout = 600;
|
unsigned int nfs_idmap_cache_timeout = 600;
|
||||||
/* Turn off NFSv4 uid/gid mapping when using AUTH_SYS */
|
/* Turn off NFSv4 uid/gid mapping when using AUTH_SYS */
|
||||||
bool nfs4_disable_idmapping = true;
|
bool nfs4_disable_idmapping = true;
|
||||||
unsigned short max_session_slots = NFS4_DEF_SLOT_TABLE_SIZE;
|
unsigned short max_session_slots = NFS4_DEF_SLOT_TABLE_SIZE;
|
||||||
|
unsigned short max_session_cb_slots = NFS4_DEF_CB_SLOT_TABLE_SIZE;
|
||||||
unsigned short send_implementation_id = 1;
|
unsigned short send_implementation_id = 1;
|
||||||
char nfs4_client_id_uniquifier[NFS4_CLIENT_ID_UNIQ_LEN] = "";
|
char nfs4_client_id_uniquifier[NFS4_CLIENT_ID_UNIQ_LEN] = "";
|
||||||
bool recover_lost_locks = false;
|
bool recover_lost_locks = false;
|
||||||
|
|
||||||
|
EXPORT_SYMBOL_GPL(nfs_callback_nr_threads);
|
||||||
EXPORT_SYMBOL_GPL(nfs_callback_set_tcpport);
|
EXPORT_SYMBOL_GPL(nfs_callback_set_tcpport);
|
||||||
EXPORT_SYMBOL_GPL(nfs_idmap_cache_timeout);
|
EXPORT_SYMBOL_GPL(nfs_idmap_cache_timeout);
|
||||||
EXPORT_SYMBOL_GPL(nfs4_disable_idmapping);
|
EXPORT_SYMBOL_GPL(nfs4_disable_idmapping);
|
||||||
EXPORT_SYMBOL_GPL(max_session_slots);
|
EXPORT_SYMBOL_GPL(max_session_slots);
|
||||||
|
EXPORT_SYMBOL_GPL(max_session_cb_slots);
|
||||||
EXPORT_SYMBOL_GPL(send_implementation_id);
|
EXPORT_SYMBOL_GPL(send_implementation_id);
|
||||||
EXPORT_SYMBOL_GPL(nfs4_client_id_uniquifier);
|
EXPORT_SYMBOL_GPL(nfs4_client_id_uniquifier);
|
||||||
EXPORT_SYMBOL_GPL(recover_lost_locks);
|
EXPORT_SYMBOL_GPL(recover_lost_locks);
|
||||||
|
@ -2887,6 +2891,9 @@ static const struct kernel_param_ops param_ops_portnr = {
|
||||||
#define param_check_portnr(name, p) __param_check(name, p, unsigned int);
|
#define param_check_portnr(name, p) __param_check(name, p, unsigned int);
|
||||||
|
|
||||||
module_param_named(callback_tcpport, nfs_callback_set_tcpport, portnr, 0644);
|
module_param_named(callback_tcpport, nfs_callback_set_tcpport, portnr, 0644);
|
||||||
|
module_param_named(callback_nr_threads, nfs_callback_nr_threads, ushort, 0644);
|
||||||
|
MODULE_PARM_DESC(callback_nr_threads, "Number of threads that will be "
|
||||||
|
"assigned to the NFSv4 callback channels.");
|
||||||
module_param(nfs_idmap_cache_timeout, int, 0644);
|
module_param(nfs_idmap_cache_timeout, int, 0644);
|
||||||
module_param(nfs4_disable_idmapping, bool, 0644);
|
module_param(nfs4_disable_idmapping, bool, 0644);
|
||||||
module_param_string(nfs4_unique_id, nfs4_client_id_uniquifier,
|
module_param_string(nfs4_unique_id, nfs4_client_id_uniquifier,
|
||||||
|
@ -2896,6 +2903,9 @@ MODULE_PARM_DESC(nfs4_disable_idmapping,
|
||||||
module_param(max_session_slots, ushort, 0644);
|
module_param(max_session_slots, ushort, 0644);
|
||||||
MODULE_PARM_DESC(max_session_slots, "Maximum number of outstanding NFSv4.1 "
|
MODULE_PARM_DESC(max_session_slots, "Maximum number of outstanding NFSv4.1 "
|
||||||
"requests the client will negotiate");
|
"requests the client will negotiate");
|
||||||
|
module_param(max_session_cb_slots, ushort, 0644);
|
||||||
|
MODULE_PARM_DESC(max_session_slots, "Maximum number of parallel NFSv4.1 "
|
||||||
|
"callbacks the client will process for a given server");
|
||||||
module_param(send_implementation_id, ushort, 0644);
|
module_param(send_implementation_id, ushort, 0644);
|
||||||
MODULE_PARM_DESC(send_implementation_id,
|
MODULE_PARM_DESC(send_implementation_id,
|
||||||
"Send implementation ID with NFSv4.1 exchange_id");
|
"Send implementation ID with NFSv4.1 exchange_id");
|
||||||
|
|
Loading…
Reference in New Issue