.. | .. |
---|
1361 | 1361 | break; |
---|
1362 | 1362 | default: |
---|
1363 | 1363 | err = -EAFNOSUPPORT; |
---|
1364 | | - goto out; |
---|
| 1364 | + goto out_release; |
---|
1365 | 1365 | } |
---|
1366 | 1366 | if (err < 0) { |
---|
1367 | 1367 | dprintk("RPC: can't bind UDP socket (%d)\n", err); |
---|
.. | .. |
---|
1967 | 1967 | status = -EOPNOTSUPP; |
---|
1968 | 1968 | break; |
---|
1969 | 1969 | } |
---|
1970 | | - if (task->tk_rebind_retry == 0) |
---|
1971 | | - break; |
---|
1972 | | - task->tk_rebind_retry--; |
---|
1973 | 1970 | rpc_delay(task, 3*HZ); |
---|
1974 | 1971 | goto retry_timeout; |
---|
1975 | 1972 | case -ENOBUFS: |
---|
.. | .. |
---|
2357 | 2354 | goto out_exit; |
---|
2358 | 2355 | } |
---|
2359 | 2356 | task->tk_action = call_encode; |
---|
2360 | | - if (status != -ECONNRESET && status != -ECONNABORTED) |
---|
2361 | | - rpc_check_timeout(task); |
---|
| 2357 | + rpc_check_timeout(task); |
---|
2362 | 2358 | return; |
---|
2363 | 2359 | out_exit: |
---|
2364 | 2360 | rpc_call_rpcerror(task, status); |
---|
.. | .. |
---|
2633 | 2629 | case rpc_autherr_rejectedverf: |
---|
2634 | 2630 | case rpcsec_gsserr_credproblem: |
---|
2635 | 2631 | case rpcsec_gsserr_ctxproblem: |
---|
| 2632 | + rpcauth_invalcred(task); |
---|
2636 | 2633 | if (!task->tk_cred_retry) |
---|
2637 | 2634 | break; |
---|
2638 | 2635 | task->tk_cred_retry--; |
---|
.. | .. |
---|
3026 | 3023 | int |
---|
3027 | 3024 | rpc_clnt_swap_activate(struct rpc_clnt *clnt) |
---|
3028 | 3025 | { |
---|
| 3026 | + while (clnt != clnt->cl_parent) |
---|
| 3027 | + clnt = clnt->cl_parent; |
---|
3029 | 3028 | if (atomic_inc_return(&clnt->cl_swapper) == 1) |
---|
3030 | 3029 | return rpc_clnt_iterate_for_each_xprt(clnt, |
---|
3031 | 3030 | rpc_clnt_swap_activate_callback, NULL); |
---|
.. | .. |
---|
3045 | 3044 | void |
---|
3046 | 3045 | rpc_clnt_swap_deactivate(struct rpc_clnt *clnt) |
---|
3047 | 3046 | { |
---|
| 3047 | + while (clnt != clnt->cl_parent) |
---|
| 3048 | + clnt = clnt->cl_parent; |
---|
3048 | 3049 | if (atomic_dec_if_positive(&clnt->cl_swapper) == 0) |
---|
3049 | 3050 | rpc_clnt_iterate_for_each_xprt(clnt, |
---|
3050 | 3051 | rpc_clnt_swap_deactivate_callback, NULL); |
---|