diff options
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r-- | net/sunrpc/clnt.c | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 9dab9573be41..57d344cf2256 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -989,20 +989,26 @@ call_refreshresult(struct rpc_task *task) | |||
989 | dprint_status(task); | 989 | dprint_status(task); |
990 | 990 | ||
991 | task->tk_status = 0; | 991 | task->tk_status = 0; |
992 | task->tk_action = call_allocate; | 992 | task->tk_action = call_refresh; |
993 | if (status >= 0 && rpcauth_uptodatecred(task)) | ||
994 | return; | ||
995 | switch (status) { | 993 | switch (status) { |
996 | case -EACCES: | 994 | case 0: |
997 | rpc_exit(task, -EACCES); | 995 | if (rpcauth_uptodatecred(task)) |
998 | return; | 996 | task->tk_action = call_allocate; |
999 | case -ENOMEM: | ||
1000 | rpc_exit(task, -ENOMEM); | ||
1001 | return; | 997 | return; |
1002 | case -ETIMEDOUT: | 998 | case -ETIMEDOUT: |
1003 | rpc_delay(task, 3*HZ); | 999 | rpc_delay(task, 3*HZ); |
1000 | case -EAGAIN: | ||
1001 | status = -EACCES; | ||
1002 | if (!task->tk_cred_retry) | ||
1003 | break; | ||
1004 | task->tk_cred_retry--; | ||
1005 | dprintk("RPC: %5u %s: retry refresh creds\n", | ||
1006 | task->tk_pid, __func__); | ||
1007 | return; | ||
1004 | } | 1008 | } |
1005 | task->tk_action = call_refresh; | 1009 | dprintk("RPC: %5u %s: refresh creds failed with error %d\n", |
1010 | task->tk_pid, __func__, status); | ||
1011 | rpc_exit(task, status); | ||
1006 | } | 1012 | } |
1007 | 1013 | ||
1008 | /* | 1014 | /* |
@@ -1089,7 +1095,7 @@ static void | |||
1089 | rpc_xdr_encode(struct rpc_task *task) | 1095 | rpc_xdr_encode(struct rpc_task *task) |
1090 | { | 1096 | { |
1091 | struct rpc_rqst *req = task->tk_rqstp; | 1097 | struct rpc_rqst *req = task->tk_rqstp; |
1092 | kxdrproc_t encode; | 1098 | kxdreproc_t encode; |
1093 | __be32 *p; | 1099 | __be32 *p; |
1094 | 1100 | ||
1095 | dprint_status(task); | 1101 | dprint_status(task); |
@@ -1529,7 +1535,7 @@ call_decode(struct rpc_task *task) | |||
1529 | { | 1535 | { |
1530 | struct rpc_clnt *clnt = task->tk_client; | 1536 | struct rpc_clnt *clnt = task->tk_client; |
1531 | struct rpc_rqst *req = task->tk_rqstp; | 1537 | struct rpc_rqst *req = task->tk_rqstp; |
1532 | kxdrproc_t decode = task->tk_msg.rpc_proc->p_decode; | 1538 | kxdrdproc_t decode = task->tk_msg.rpc_proc->p_decode; |
1533 | __be32 *p; | 1539 | __be32 *p; |
1534 | 1540 | ||
1535 | dprintk("RPC: %5u call_decode (status %d)\n", | 1541 | dprintk("RPC: %5u call_decode (status %d)\n", |
@@ -1770,12 +1776,11 @@ out_overflow: | |||
1770 | goto out_garbage; | 1776 | goto out_garbage; |
1771 | } | 1777 | } |
1772 | 1778 | ||
1773 | static int rpcproc_encode_null(void *rqstp, __be32 *data, void *obj) | 1779 | static void rpcproc_encode_null(void *rqstp, struct xdr_stream *xdr, void *obj) |
1774 | { | 1780 | { |
1775 | return 0; | ||
1776 | } | 1781 | } |
1777 | 1782 | ||
1778 | static int rpcproc_decode_null(void *rqstp, __be32 *data, void *obj) | 1783 | static int rpcproc_decode_null(void *rqstp, struct xdr_stream *xdr, void *obj) |
1779 | { | 1784 | { |
1780 | return 0; | 1785 | return 0; |
1781 | } | 1786 | } |
@@ -1824,23 +1829,15 @@ static void rpc_show_task(const struct rpc_clnt *clnt, | |||
1824 | const struct rpc_task *task) | 1829 | const struct rpc_task *task) |
1825 | { | 1830 | { |
1826 | const char *rpc_waitq = "none"; | 1831 | const char *rpc_waitq = "none"; |
1827 | char *p, action[KSYM_SYMBOL_LEN]; | ||
1828 | 1832 | ||
1829 | if (RPC_IS_QUEUED(task)) | 1833 | if (RPC_IS_QUEUED(task)) |
1830 | rpc_waitq = rpc_qname(task->tk_waitqueue); | 1834 | rpc_waitq = rpc_qname(task->tk_waitqueue); |
1831 | 1835 | ||
1832 | /* map tk_action pointer to a function name; then trim off | 1836 | printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%ps q:%s\n", |
1833 | * the "+0x0 [sunrpc]" */ | ||
1834 | sprint_symbol(action, (unsigned long)task->tk_action); | ||
1835 | p = strchr(action, '+'); | ||
1836 | if (p) | ||
1837 | *p = '\0'; | ||
1838 | |||
1839 | printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s\n", | ||
1840 | task->tk_pid, task->tk_flags, task->tk_status, | 1837 | task->tk_pid, task->tk_flags, task->tk_status, |
1841 | clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops, | 1838 | clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops, |
1842 | clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task), | 1839 | clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task), |
1843 | action, rpc_waitq); | 1840 | task->tk_action, rpc_waitq); |
1844 | } | 1841 | } |
1845 | 1842 | ||
1846 | void rpc_show_tasks(void) | 1843 | void rpc_show_tasks(void) |