|
@@ -1427,37 +1427,6 @@ out:
|
|
|
read_unlock_bh(&sk->sk_callback_lock);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Do the equivalent of linger/linger2 handling for dealing with
|
|
|
- * broken servers that don't close the socket in a timely
|
|
|
- * fashion
|
|
|
- */
|
|
|
-static void xs_tcp_schedule_linger_timeout(struct rpc_xprt *xprt,
|
|
|
- unsigned long timeout)
|
|
|
-{
|
|
|
- struct sock_xprt *transport;
|
|
|
-
|
|
|
- if (xprt_test_and_set_connecting(xprt))
|
|
|
- return;
|
|
|
- set_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
|
|
- transport = container_of(xprt, struct sock_xprt, xprt);
|
|
|
- queue_delayed_work(rpciod_workqueue, &transport->connect_worker,
|
|
|
- timeout);
|
|
|
-}
|
|
|
-
|
|
|
-static void xs_tcp_cancel_linger_timeout(struct rpc_xprt *xprt)
|
|
|
-{
|
|
|
- struct sock_xprt *transport;
|
|
|
-
|
|
|
- transport = container_of(xprt, struct sock_xprt, xprt);
|
|
|
-
|
|
|
- if (!test_bit(XPRT_CONNECTION_ABORT, &xprt->state) ||
|
|
|
- !cancel_delayed_work(&transport->connect_worker))
|
|
|
- return;
|
|
|
- clear_bit(XPRT_CONNECTION_ABORT, &xprt->state);
|
|
|
- xprt_clear_connecting(xprt);
|
|
|
-}
|
|
|
-
|
|
|
static void xs_sock_mark_closed(struct rpc_xprt *xprt)
|
|
|
{
|
|
|
xs_sock_reset_connection_flags(xprt);
|
|
@@ -1513,7 +1482,6 @@ static void xs_tcp_state_change(struct sock *sk)
|
|
|
clear_bit(XPRT_CONNECTED, &xprt->state);
|
|
|
clear_bit(XPRT_CLOSE_WAIT, &xprt->state);
|
|
|
smp_mb__after_atomic();
|
|
|
- xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout);
|
|
|
break;
|
|
|
case TCP_CLOSE_WAIT:
|
|
|
/* The server initiated a shutdown of the socket */
|
|
@@ -1530,13 +1498,11 @@ static void xs_tcp_state_change(struct sock *sk)
|
|
|
break;
|
|
|
case TCP_LAST_ACK:
|
|
|
set_bit(XPRT_CLOSING, &xprt->state);
|
|
|
- xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout);
|
|
|
smp_mb__before_atomic();
|
|
|
clear_bit(XPRT_CONNECTED, &xprt->state);
|
|
|
smp_mb__after_atomic();
|
|
|
break;
|
|
|
case TCP_CLOSE:
|
|
|
- xs_tcp_cancel_linger_timeout(xprt);
|
|
|
xs_sock_mark_closed(xprt);
|
|
|
}
|
|
|
out:
|
|
@@ -2134,7 +2100,6 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
|
|
|
|
|
|
/* socket options */
|
|
|
sock_reset_flag(sk, SOCK_LINGER);
|
|
|
- tcp_sk(sk)->linger2 = 0;
|
|
|
tcp_sk(sk)->nonagle |= TCP_NAGLE_OFF;
|
|
|
|
|
|
xprt_clear_connected(xprt);
|