Loading net/sunrpc/xprtsock.c +13 −16 Original line number Original line Diff line number Diff line Loading @@ -803,10 +803,21 @@ static void xs_error_report(struct sock *sk) read_unlock_bh(&sk->sk_callback_lock); read_unlock_bh(&sk->sk_callback_lock); } } static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) { smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CONNECTION_CLOSE, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); } static void xs_reset_transport(struct sock_xprt *transport) static void xs_reset_transport(struct sock_xprt *transport) { { struct socket *sock = transport->sock; struct socket *sock = transport->sock; struct sock *sk = transport->inet; struct sock *sk = transport->inet; struct rpc_xprt *xprt = &transport->xprt; if (sk == NULL) if (sk == NULL) return; return; Loading @@ -819,8 +830,9 @@ static void xs_reset_transport(struct sock_xprt *transport) xs_restore_old_callbacks(transport, sk); xs_restore_old_callbacks(transport, sk); write_unlock_bh(&sk->sk_callback_lock); write_unlock_bh(&sk->sk_callback_lock); xs_sock_reset_connection_flags(xprt); trace_rpc_socket_close(&transport->xprt, sock); trace_rpc_socket_close(xprt, sock); sock_release(sock); sock_release(sock); } } Loading @@ -845,11 +857,6 @@ static void xs_close(struct rpc_xprt *xprt) xs_reset_transport(transport); xs_reset_transport(transport); xprt->reestablish_timeout = 0; xprt->reestablish_timeout = 0; smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); xprt_disconnect_done(xprt); xprt_disconnect_done(xprt); } } Loading Loading @@ -1455,16 +1462,6 @@ static void xs_tcp_cancel_linger_timeout(struct rpc_xprt *xprt) xprt_clear_connecting(xprt); xprt_clear_connecting(xprt); } } static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) { smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CONNECTION_CLOSE, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); } static void xs_sock_mark_closed(struct rpc_xprt *xprt) static void xs_sock_mark_closed(struct rpc_xprt *xprt) { { xs_sock_reset_connection_flags(xprt); xs_sock_reset_connection_flags(xprt); Loading Loading
net/sunrpc/xprtsock.c +13 −16 Original line number Original line Diff line number Diff line Loading @@ -803,10 +803,21 @@ static void xs_error_report(struct sock *sk) read_unlock_bh(&sk->sk_callback_lock); read_unlock_bh(&sk->sk_callback_lock); } } static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) { smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CONNECTION_CLOSE, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); } static void xs_reset_transport(struct sock_xprt *transport) static void xs_reset_transport(struct sock_xprt *transport) { { struct socket *sock = transport->sock; struct socket *sock = transport->sock; struct sock *sk = transport->inet; struct sock *sk = transport->inet; struct rpc_xprt *xprt = &transport->xprt; if (sk == NULL) if (sk == NULL) return; return; Loading @@ -819,8 +830,9 @@ static void xs_reset_transport(struct sock_xprt *transport) xs_restore_old_callbacks(transport, sk); xs_restore_old_callbacks(transport, sk); write_unlock_bh(&sk->sk_callback_lock); write_unlock_bh(&sk->sk_callback_lock); xs_sock_reset_connection_flags(xprt); trace_rpc_socket_close(&transport->xprt, sock); trace_rpc_socket_close(xprt, sock); sock_release(sock); sock_release(sock); } } Loading @@ -845,11 +857,6 @@ static void xs_close(struct rpc_xprt *xprt) xs_reset_transport(transport); xs_reset_transport(transport); xprt->reestablish_timeout = 0; xprt->reestablish_timeout = 0; smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); xprt_disconnect_done(xprt); xprt_disconnect_done(xprt); } } Loading Loading @@ -1455,16 +1462,6 @@ static void xs_tcp_cancel_linger_timeout(struct rpc_xprt *xprt) xprt_clear_connecting(xprt); xprt_clear_connecting(xprt); } } static void xs_sock_reset_connection_flags(struct rpc_xprt *xprt) { smp_mb__before_atomic(); clear_bit(XPRT_CONNECTION_ABORT, &xprt->state); clear_bit(XPRT_CONNECTION_CLOSE, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSING, &xprt->state); smp_mb__after_atomic(); } static void xs_sock_mark_closed(struct rpc_xprt *xprt) static void xs_sock_mark_closed(struct rpc_xprt *xprt) { { xs_sock_reset_connection_flags(xprt); xs_sock_reset_connection_flags(xprt); Loading