Lines 1144-1149
static void xs_tcp_state_change(struct sock *sk)
Link Here
|
1144 |
struct sock_xprt *transport = container_of(xprt, |
1144 |
struct sock_xprt *transport = container_of(xprt, |
1145 |
struct sock_xprt, xprt); |
1145 |
struct sock_xprt, xprt); |
1146 |
|
1146 |
|
|
|
1147 |
xprt->reestablish_timeout = 0; |
1148 |
|
1147 |
/* Reset TCP record info */ |
1149 |
/* Reset TCP record info */ |
1148 |
transport->tcp_offset = 0; |
1150 |
transport->tcp_offset = 0; |
1149 |
transport->tcp_reclen = 0; |
1151 |
transport->tcp_reclen = 0; |
Lines 1158-1164
static void xs_tcp_state_change(struct sock *sk)
Link Here
|
1158 |
case TCP_FIN_WAIT1: |
1160 |
case TCP_FIN_WAIT1: |
1159 |
/* The client initiated a shutdown of the socket */ |
1161 |
/* The client initiated a shutdown of the socket */ |
1160 |
xprt->connect_cookie++; |
1162 |
xprt->connect_cookie++; |
1161 |
xprt->reestablish_timeout = 0; |
|
|
1162 |
set_bit(XPRT_CLOSING, &xprt->state); |
1163 |
set_bit(XPRT_CLOSING, &xprt->state); |
1163 |
smp_mb__before_clear_bit(); |
1164 |
smp_mb__before_clear_bit(); |
1164 |
clear_bit(XPRT_CONNECTED, &xprt->state); |
1165 |
clear_bit(XPRT_CONNECTED, &xprt->state); |
Lines 1793-1798
static void xs_connect(struct rpc_task *task)
Link Here
|
1793 |
{ |
1794 |
{ |
1794 |
struct rpc_xprt *xprt = task->tk_xprt; |
1795 |
struct rpc_xprt *xprt = task->tk_xprt; |
1795 |
struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); |
1796 |
struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); |
|
|
1797 |
unsigned long timeout; |
1796 |
|
1798 |
|
1797 |
if (xprt_test_and_set_connecting(xprt)) |
1799 |
if (xprt_test_and_set_connecting(xprt)) |
1798 |
return; |
1800 |
return; |
Lines 1801-1812
static void xs_connect(struct rpc_task *task)
Link Here
|
1801 |
dprintk("RPC: xs_connect delayed xprt %p for %lu " |
1803 |
dprintk("RPC: xs_connect delayed xprt %p for %lu " |
1802 |
"seconds\n", |
1804 |
"seconds\n", |
1803 |
xprt, xprt->reestablish_timeout / HZ); |
1805 |
xprt, xprt->reestablish_timeout / HZ); |
1804 |
queue_delayed_work(rpciod_workqueue, |
1806 |
timeout = xprt->reestablish_timeout; |
1805 |
&transport->connect_worker, |
|
|
1806 |
xprt->reestablish_timeout); |
1807 |
xprt->reestablish_timeout <<= 1; |
1807 |
xprt->reestablish_timeout <<= 1; |
1808 |
if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) |
1808 |
if (xprt->reestablish_timeout > XS_TCP_MAX_REEST_TO) |
1809 |
xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; |
1809 |
xprt->reestablish_timeout = XS_TCP_MAX_REEST_TO; |
|
|
1810 |
queue_delayed_work(rpciod_workqueue, |
1811 |
&transport->connect_worker, timeout); |
1810 |
} else { |
1812 |
} else { |
1811 |
dprintk("RPC: xs_connect scheduled xprt %p\n", xprt); |
1813 |
dprintk("RPC: xs_connect scheduled xprt %p\n", xprt); |
1812 |
queue_delayed_work(rpciod_workqueue, |
1814 |
queue_delayed_work(rpciod_workqueue, |