diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 8a5e823e0b33..f0b3700cec95 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -1217,6 +1217,8 @@ static void xs_reset_transport(struct sock_xprt *transport) | |||
1217 | 1217 | ||
1218 | trace_rpc_socket_close(xprt, sock); | 1218 | trace_rpc_socket_close(xprt, sock); |
1219 | sock_release(sock); | 1219 | sock_release(sock); |
1220 | |||
1221 | xprt_disconnect_done(xprt); | ||
1220 | } | 1222 | } |
1221 | 1223 | ||
1222 | /** | 1224 | /** |
@@ -1237,8 +1239,6 @@ static void xs_close(struct rpc_xprt *xprt) | |||
1237 | 1239 | ||
1238 | xs_reset_transport(transport); | 1240 | xs_reset_transport(transport); |
1239 | xprt->reestablish_timeout = 0; | 1241 | xprt->reestablish_timeout = 0; |
1240 | |||
1241 | xprt_disconnect_done(xprt); | ||
1242 | } | 1242 | } |
1243 | 1243 | ||
1244 | static void xs_inject_disconnect(struct rpc_xprt *xprt) | 1244 | static void xs_inject_disconnect(struct rpc_xprt *xprt) |
@@ -1489,8 +1489,6 @@ static void xs_tcp_state_change(struct sock *sk) | |||
1489 | &transport->sock_state)) | 1489 | &transport->sock_state)) |
1490 | xprt_clear_connecting(xprt); | 1490 | xprt_clear_connecting(xprt); |
1491 | clear_bit(XPRT_CLOSING, &xprt->state); | 1491 | clear_bit(XPRT_CLOSING, &xprt->state); |
1492 | if (sk->sk_err) | ||
1493 | xprt_wake_pending_tasks(xprt, -sk->sk_err); | ||
1494 | /* Trigger the socket release */ | 1492 | /* Trigger the socket release */ |
1495 | xs_tcp_force_close(xprt); | 1493 | xs_tcp_force_close(xprt); |
1496 | } | 1494 | } |
@@ -2092,8 +2090,8 @@ static void xs_udp_setup_socket(struct work_struct *work) | |||
2092 | trace_rpc_socket_connect(xprt, sock, 0); | 2090 | trace_rpc_socket_connect(xprt, sock, 0); |
2093 | status = 0; | 2091 | status = 0; |
2094 | out: | 2092 | out: |
2095 | xprt_unlock_connect(xprt, transport); | ||
2096 | xprt_clear_connecting(xprt); | 2093 | xprt_clear_connecting(xprt); |
2094 | xprt_unlock_connect(xprt, transport); | ||
2097 | xprt_wake_pending_tasks(xprt, status); | 2095 | xprt_wake_pending_tasks(xprt, status); |
2098 | } | 2096 | } |
2099 | 2097 | ||
@@ -2329,8 +2327,8 @@ static void xs_tcp_setup_socket(struct work_struct *work) | |||
2329 | } | 2327 | } |
2330 | status = -EAGAIN; | 2328 | status = -EAGAIN; |
2331 | out: | 2329 | out: |
2332 | xprt_unlock_connect(xprt, transport); | ||
2333 | xprt_clear_connecting(xprt); | 2330 | xprt_clear_connecting(xprt); |
2331 | xprt_unlock_connect(xprt, transport); | ||
2334 | xprt_wake_pending_tasks(xprt, status); | 2332 | xprt_wake_pending_tasks(xprt, status); |
2335 | } | 2333 | } |
2336 | 2334 | ||