diff options
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/clnt.c | 11 | ||||
-rw-r--r-- | net/sunrpc/xprtsock.c | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 7bcd931e06e..68a23583f44 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 | } |
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 37c5475ba25..ff312f8b018 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -2033,7 +2033,7 @@ static void xs_connect(struct rpc_task *task) | |||
2033 | if (xprt_test_and_set_connecting(xprt)) | 2033 | if (xprt_test_and_set_connecting(xprt)) |
2034 | return; | 2034 | return; |
2035 | 2035 | ||
2036 | if (transport->sock != NULL) { | 2036 | if (transport->sock != NULL && !RPC_IS_SOFTCONN(task)) { |
2037 | dprintk("RPC: xs_connect delayed xprt %p for %lu " | 2037 | dprintk("RPC: xs_connect delayed xprt %p for %lu " |
2038 | "seconds\n", | 2038 | "seconds\n", |
2039 | xprt, xprt->reestablish_timeout / HZ); | 2039 | xprt, xprt->reestablish_timeout / HZ); |