SUNRPC: Add the 'softerr' rpc_client flag
Add the 'softerr' rpc client flag that sets the RPC_TASK_TIMEOUT flag on all new rpc tasks that are attached to that rpc client. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
0729d995f2
commit
ae6ec91847
|
@ -50,6 +50,7 @@ struct rpc_clnt {
|
||||||
struct rpc_iostats * cl_metrics; /* per-client statistics */
|
struct rpc_iostats * cl_metrics; /* per-client statistics */
|
||||||
|
|
||||||
unsigned int cl_softrtry : 1,/* soft timeouts */
|
unsigned int cl_softrtry : 1,/* soft timeouts */
|
||||||
|
cl_softerr : 1,/* Timeouts return errors */
|
||||||
cl_discrtry : 1,/* disconnect before retry */
|
cl_discrtry : 1,/* disconnect before retry */
|
||||||
cl_noretranstimeo: 1,/* No retransmit timeouts */
|
cl_noretranstimeo: 1,/* No retransmit timeouts */
|
||||||
cl_autobind : 1,/* use getport() */
|
cl_autobind : 1,/* use getport() */
|
||||||
|
@ -144,6 +145,7 @@ struct rpc_add_xprt_test {
|
||||||
#define RPC_CLNT_CREATE_INFINITE_SLOTS (1UL << 7)
|
#define RPC_CLNT_CREATE_INFINITE_SLOTS (1UL << 7)
|
||||||
#define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT (1UL << 8)
|
#define RPC_CLNT_CREATE_NO_IDLE_TIMEOUT (1UL << 8)
|
||||||
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
||||||
|
#define RPC_CLNT_CREATE_SOFTERR (1UL << 10)
|
||||||
|
|
||||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||||
|
|
|
@ -484,8 +484,11 @@ static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
|
||||||
}
|
}
|
||||||
|
|
||||||
clnt->cl_softrtry = 1;
|
clnt->cl_softrtry = 1;
|
||||||
if (args->flags & RPC_CLNT_CREATE_HARDRTRY)
|
if (args->flags & (RPC_CLNT_CREATE_HARDRTRY|RPC_CLNT_CREATE_SOFTERR)) {
|
||||||
clnt->cl_softrtry = 0;
|
clnt->cl_softrtry = 0;
|
||||||
|
if (args->flags & RPC_CLNT_CREATE_SOFTERR)
|
||||||
|
clnt->cl_softerr = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (args->flags & RPC_CLNT_CREATE_AUTOBIND)
|
if (args->flags & RPC_CLNT_CREATE_AUTOBIND)
|
||||||
clnt->cl_autobind = 1;
|
clnt->cl_autobind = 1;
|
||||||
|
@ -623,6 +626,7 @@ static struct rpc_clnt *__rpc_clone_client(struct rpc_create_args *args,
|
||||||
/* Turn off autobind on clones */
|
/* Turn off autobind on clones */
|
||||||
new->cl_autobind = 0;
|
new->cl_autobind = 0;
|
||||||
new->cl_softrtry = clnt->cl_softrtry;
|
new->cl_softrtry = clnt->cl_softrtry;
|
||||||
|
new->cl_softerr = clnt->cl_softerr;
|
||||||
new->cl_noretranstimeo = clnt->cl_noretranstimeo;
|
new->cl_noretranstimeo = clnt->cl_noretranstimeo;
|
||||||
new->cl_discrtry = clnt->cl_discrtry;
|
new->cl_discrtry = clnt->cl_discrtry;
|
||||||
new->cl_chatty = clnt->cl_chatty;
|
new->cl_chatty = clnt->cl_chatty;
|
||||||
|
@ -1001,6 +1005,8 @@ void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt)
|
||||||
atomic_inc(&clnt->cl_count);
|
atomic_inc(&clnt->cl_count);
|
||||||
if (clnt->cl_softrtry)
|
if (clnt->cl_softrtry)
|
||||||
task->tk_flags |= RPC_TASK_SOFT;
|
task->tk_flags |= RPC_TASK_SOFT;
|
||||||
|
if (clnt->cl_softerr)
|
||||||
|
task->tk_flags |= RPC_TASK_TIMEOUT;
|
||||||
if (clnt->cl_noretranstimeo)
|
if (clnt->cl_noretranstimeo)
|
||||||
task->tk_flags |= RPC_TASK_NO_RETRANS_TIMEOUT;
|
task->tk_flags |= RPC_TASK_NO_RETRANS_TIMEOUT;
|
||||||
if (atomic_read(&clnt->cl_swapper))
|
if (atomic_read(&clnt->cl_swapper))
|
||||||
|
|
Loading…
Reference in New Issue