|
@@ -845,6 +845,8 @@ static void xs_error_report(struct sock *sk)
|
|
|
dprintk("RPC: xs_error_report client %p, error=%d...\n",
|
|
|
xprt, -err);
|
|
|
trace_rpc_socket_error(xprt, sk->sk_socket, err);
|
|
|
+ if (test_bit(XPRT_CONNECTION_REUSE, &xprt->state))
|
|
|
+ goto out;
|
|
|
xprt_wake_pending_tasks(xprt, err);
|
|
|
out:
|
|
|
read_unlock_bh(&sk->sk_callback_lock);
|
|
@@ -2261,7 +2263,9 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
|
|
abort_and_exit = test_and_clear_bit(XPRT_CONNECTION_ABORT,
|
|
|
&xprt->state);
|
|
|
/* "close" the socket, preserving the local port */
|
|
|
+ set_bit(XPRT_CONNECTION_REUSE, &xprt->state);
|
|
|
xs_tcp_reuse_connection(transport);
|
|
|
+ clear_bit(XPRT_CONNECTION_REUSE, &xprt->state);
|
|
|
|
|
|
if (abort_and_exit)
|
|
|
goto out_eagain;
|