SUNRPC: Don't wake tasks during connection abort
[platform/adaptation/renesas_rcar/renesas_kernel.git] / net / sunrpc / xprtsock.c
index 0addefc..41c2f9d 100644 (file)
@@ -842,6 +842,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);
@@ -2251,7 +2253,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;