This patch cleans up some fields in the rpc_task struct. Patch against 2.6.7. include/linux/sunrpc/sched.h | 4 ---- include/linux/sunrpc/xprt.h | 4 ++++ net/sunrpc/clnt.c | 19 ++++++++++--------- net/sunrpc/sched.c | 5 ----- net/sunrpc/xprt.c | 3 +++ 5 files changed, 17 insertions(+), 18 deletions(-) Signed-off-by: Chuck Lever Generated-at: Wed, 16 Jun 2004 19:51:22 -0400 diff -X /home/cel/src/linux/dont-diff -Naurp 18-xprt-buffer/include/linux/sunrpc/sched.h 19-rpc_task-cleanup/include/linux/sunrpc/sched.h --- 18-xprt-buffer/include/linux/sunrpc/sched.h 2004-06-16 13:36:32.063617000 -0400 +++ 19-rpc_task-cleanup/include/linux/sunrpc/sched.h 2004-06-16 13:38:06.901709000 -0400 @@ -43,10 +43,6 @@ struct rpc_task { * RPC call state */ struct rpc_message tk_msg; /* RPC call info */ - __u8 tk_garb_retry, - tk_cred_retry, - tk_suid_retry; - unsigned long tk_cookie; /* Cookie for batching tasks */ /* diff -X /home/cel/src/linux/dont-diff -Naurp 18-xprt-buffer/include/linux/sunrpc/xprt.h 19-rpc_task-cleanup/include/linux/sunrpc/xprt.h --- 18-xprt-buffer/include/linux/sunrpc/xprt.h 2004-06-16 13:36:32.080616000 -0400 +++ 19-rpc_task-cleanup/include/linux/sunrpc/xprt.h 2004-06-16 13:38:06.904715000 -0400 @@ -113,6 +113,10 @@ struct rpc_rqst { unsigned long rq_timeout; /* Current timeout value */ unsigned int rq_retries; /* # of retries */ + __u8 rq_garb_retry, + rq_cred_retry, + rq_suid_retry; + /* * Partial send handling */ diff -X /home/cel/src/linux/dont-diff -Naurp 18-xprt-buffer/net/sunrpc/clnt.c 19-rpc_task-cleanup/net/sunrpc/clnt.c --- 18-xprt-buffer/net/sunrpc/clnt.c 2004-06-16 13:36:32.085617000 -0400 +++ 19-rpc_task-cleanup/net/sunrpc/clnt.c 2004-06-16 13:38:06.909710000 -0400 @@ -870,11 +870,11 @@ call_decode(struct rpc_task *task) */ if (task->tk_client->cl_droppriv && (ntohl(*p) == NFSERR_ACCES || ntohl(*p) == NFSERR_PERM)) { - if (RPC_IS_SETUID(task) && task->tk_suid_retry) { + if (RPC_IS_SETUID(task) && req->rq_suid_retry) { dprintk("RPC: %4d retry squashed uid\n", task->tk_pid); task->tk_flags ^= RPC_CALL_REALUID; task->tk_action = call_bind; - task->tk_suid_retry--; + req->rq_suid_retry--; goto out_retry; } } @@ -958,7 +958,8 @@ call_header(struct rpc_task *task) static u32 * call_verify(struct rpc_task *task) { - u32 *p = task->tk_rqstp->rq_rcv_buf.head[0].iov_base, n; + struct rpc_rqst *req = task->tk_rqstp; + u32 *p = req->rq_rcv_buf.head[0].iov_base, n; p += 1; /* skip XID */ @@ -977,9 +978,9 @@ call_verify(struct rpc_task *task) case RPC_AUTH_REJECTEDVERF: case RPCSEC_GSS_CREDPROBLEM: case RPCSEC_GSS_CTXPROBLEM: - if (!task->tk_cred_retry) + if (!req->rq_cred_retry) break; - task->tk_cred_retry--; + req->rq_cred_retry--; dprintk("RPC: %4d call_verify: retry stale creds\n", task->tk_pid); rpcauth_invalcred(task); @@ -988,9 +989,9 @@ call_verify(struct rpc_task *task) case RPC_AUTH_BADCRED: case RPC_AUTH_BADVERF: /* possibly garbled cred/verf? */ - if (!task->tk_garb_retry) + if (!req->rq_garb_retry) break; - task->tk_garb_retry--; + req->rq_garb_retry--; dprintk("RPC: %4d call_verify: retry garbled creds\n", task->tk_pid); task->tk_action = call_bind; @@ -1043,8 +1044,8 @@ call_verify(struct rpc_task *task) garbage: dprintk("RPC: %4d call_verify: server saw garbage\n", task->tk_pid); task->tk_client->cl_stats->rpcgarbage++; - if (task->tk_garb_retry) { - task->tk_garb_retry--; + if (req->rq_garb_retry) { + req->rq_garb_retry--; dprintk(KERN_WARNING "RPC: garbage, retrying %4d\n", task->tk_pid); task->tk_action = call_bind; return NULL; diff -X /home/cel/src/linux/dont-diff -Naurp 18-xprt-buffer/net/sunrpc/sched.c 19-rpc_task-cleanup/net/sunrpc/sched.c --- 18-xprt-buffer/net/sunrpc/sched.c 2004-06-16 13:36:32.091614000 -0400 +++ 19-rpc_task-cleanup/net/sunrpc/sched.c 2004-06-16 13:38:06.914709000 -0400 @@ -868,11 +868,6 @@ void rpc_init_task(struct rpc_task *task if (current->uid != current->fsuid || current->gid != current->fsgid) task->tk_flags |= RPC_TASK_SETUID; - /* Initialize retry counters */ - task->tk_garb_retry = 2; - task->tk_cred_retry = 2; - task->tk_suid_retry = 1; - task->tk_priority = RPC_PRIORITY_NORMAL; task->tk_cookie = (unsigned long)current; INIT_LIST_HEAD(&task->tk_links); diff -X /home/cel/src/linux/dont-diff -Naurp 18-xprt-buffer/net/sunrpc/xprt.c 19-rpc_task-cleanup/net/sunrpc/xprt.c --- 18-xprt-buffer/net/sunrpc/xprt.c 2004-06-16 13:36:32.100614000 -0400 +++ 19-rpc_task-cleanup/net/sunrpc/xprt.c 2004-06-16 13:38:06.919709000 -0400 @@ -671,6 +671,9 @@ xprt_request_init(struct rpc_task *task, req->rq_xprt = xprt; req->rq_buffer = NULL; req->rq_bufsize = 0; + req->rq_garb_retry = 2; + req->rq_cred_retry = 2; + req->rq_suid_retry = 1; req->rq_xid = xprt_alloc_xid(xprt); dprintk("RPC: %4d reserved req %p xid %08x\n", task->tk_pid, req, req->rq_xid);