diff options
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r-- | net/sunrpc/clnt.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 7bcd931e06ee..68a23583f44c 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -1197,6 +1197,8 @@ call_transmit_status(struct rpc_task *task) | |||
1197 | default: | 1197 | default: |
1198 | dprint_status(task); | 1198 | dprint_status(task); |
1199 | xprt_end_transmit(task); | 1199 | xprt_end_transmit(task); |
1200 | rpc_task_force_reencode(task); | ||
1201 | break; | ||
1200 | /* | 1202 | /* |
1201 | * Special cases: if we've been waiting on the | 1203 | * Special cases: if we've been waiting on the |
1202 | * socket's write_space() callback, or if the | 1204 | * socket's write_space() callback, or if the |
@@ -1204,11 +1206,16 @@ call_transmit_status(struct rpc_task *task) | |||
1204 | * then hold onto the transport lock. | 1206 | * then hold onto the transport lock. |
1205 | */ | 1207 | */ |
1206 | case -ECONNREFUSED: | 1208 | case -ECONNREFUSED: |
1207 | case -ECONNRESET: | ||
1208 | case -ENOTCONN: | ||
1209 | case -EHOSTDOWN: | 1209 | case -EHOSTDOWN: |
1210 | case -EHOSTUNREACH: | 1210 | case -EHOSTUNREACH: |
1211 | case -ENETUNREACH: | 1211 | case -ENETUNREACH: |
1212 | if (RPC_IS_SOFTCONN(task)) { | ||
1213 | xprt_end_transmit(task); | ||
1214 | rpc_exit(task, task->tk_status); | ||
1215 | break; | ||
1216 | } | ||
1217 | case -ECONNRESET: | ||
1218 | case -ENOTCONN: | ||
1212 | case -EPIPE: | 1219 | case -EPIPE: |
1213 | rpc_task_force_reencode(task); | 1220 | rpc_task_force_reencode(task); |
1214 | } | 1221 | } |