forked from luck/tmp_suning_uos_patched
SUNRPC: Allow rpc_create() to request that TCP slots be unlimited
This is mainly for use by NFSv4.1, where the session negotiation ultimately wants to decide how many RPC slots we can fill. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
ba60eb25ff
commit
b7993cebb8
|
@ -124,6 +124,7 @@ struct rpc_create_args {
|
|||
#define RPC_CLNT_CREATE_NOPING (1UL << 4)
|
||||
#define RPC_CLNT_CREATE_DISCRTRY (1UL << 5)
|
||||
#define RPC_CLNT_CREATE_QUIET (1UL << 6)
|
||||
#define RPC_CLNT_CREATE_INFINITE_SLOTS (1UL << 7)
|
||||
|
||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||
|
|
|
@ -255,6 +255,8 @@ static inline int bc_prealloc(struct rpc_rqst *req)
|
|||
}
|
||||
#endif /* CONFIG_SUNRPC_BACKCHANNEL */
|
||||
|
||||
#define XPRT_CREATE_INFINITE_SLOTS (1U)
|
||||
|
||||
struct xprt_create {
|
||||
int ident; /* XPRT_TRANSPORT identifier */
|
||||
struct net * net;
|
||||
|
@ -263,6 +265,7 @@ struct xprt_create {
|
|||
size_t addrlen;
|
||||
const char *servername;
|
||||
struct svc_xprt *bc_xprt; /* NFSv4.1 backchannel */
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
struct xprt_class {
|
||||
|
|
|
@ -414,6 +414,8 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
|
|||
};
|
||||
char servername[48];
|
||||
|
||||
if (args->flags & RPC_CLNT_CREATE_INFINITE_SLOTS)
|
||||
xprtargs.flags |= XPRT_CREATE_INFINITE_SLOTS;
|
||||
/*
|
||||
* If the caller chooses not to specify a hostname, whip
|
||||
* up a string representation of the passed-in address.
|
||||
|
|
|
@ -2762,9 +2762,13 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
|
|||
struct rpc_xprt *xprt;
|
||||
struct sock_xprt *transport;
|
||||
struct rpc_xprt *ret;
|
||||
unsigned int max_slot_table_size = xprt_max_tcp_slot_table_entries;
|
||||
|
||||
if (args->flags & XPRT_CREATE_INFINITE_SLOTS)
|
||||
max_slot_table_size = RPC_MAX_SLOT_TABLE_LIMIT;
|
||||
|
||||
xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries,
|
||||
xprt_max_tcp_slot_table_entries);
|
||||
max_slot_table_size);
|
||||
if (IS_ERR(xprt))
|
||||
return xprt;
|
||||
transport = container_of(xprt, struct sock_xprt, xprt);
|
||||
|
|
Loading…
Reference in New Issue
Block a user