summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c10
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
1244static void xs_inject_disconnect(struct rpc_xprt *xprt) 1244static 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;
2094out: 2092out:
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;
2331out: 2329out:
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