| .. | .. |
|---|
| 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); |
|---|