aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/sunrpc/xprt.c2
-rw-r--r--net/sunrpc/xprtsock.c40
2 files changed, 23 insertions, 19 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 3ca31f20b97c..ab5dd621ae0c 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -611,8 +611,8 @@ static void xprt_autoclose(struct work_struct *work)
611 struct rpc_xprt *xprt = 611 struct rpc_xprt *xprt =
612 container_of(work, struct rpc_xprt, task_cleanup); 612 container_of(work, struct rpc_xprt, task_cleanup);
613 613
614 xprt->ops->close(xprt);
615 clear_bit(XPRT_CLOSE_WAIT, &xprt->state); 614 clear_bit(XPRT_CLOSE_WAIT, &xprt->state);
615 xprt->ops->close(xprt);
616 xprt_release_write(xprt, NULL); 616 xprt_release_write(xprt, NULL);
617} 617}
618 618
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index fda8ec8c74c0..ee0715dfc3c7 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -623,24 +623,6 @@ process_status:
623} 623}
624 624
625/** 625/**
626 * xs_tcp_shutdown - gracefully shut down a TCP socket
627 * @xprt: transport
628 *
629 * Initiates a graceful shutdown of the TCP socket by calling the
630 * equivalent of shutdown(SHUT_RDWR);
631 */
632static void xs_tcp_shutdown(struct rpc_xprt *xprt)
633{
634 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
635 struct socket *sock = transport->sock;
636
637 if (sock != NULL) {
638 kernel_sock_shutdown(sock, SHUT_RDWR);
639 trace_rpc_socket_shutdown(xprt, sock);
640 }
641}
642
643/**
644 * xs_tcp_send_request - write an RPC request to a TCP socket 626 * xs_tcp_send_request - write an RPC request to a TCP socket
645 * @task: address of RPC task that manages the state of an RPC request 627 * @task: address of RPC task that manages the state of an RPC request
646 * 628 *
@@ -786,6 +768,7 @@ static void xs_sock_mark_closed(struct rpc_xprt *xprt)
786 xs_sock_reset_connection_flags(xprt); 768 xs_sock_reset_connection_flags(xprt);
787 /* Mark transport as closed and wake up all pending tasks */ 769 /* Mark transport as closed and wake up all pending tasks */
788 xprt_disconnect_done(xprt); 770 xprt_disconnect_done(xprt);
771 xprt_force_disconnect(xprt);
789} 772}
790 773
791/** 774/**
@@ -2103,6 +2086,27 @@ out:
2103 xprt_wake_pending_tasks(xprt, status); 2086 xprt_wake_pending_tasks(xprt, status);
2104} 2087}
2105 2088
2089/**
2090 * xs_tcp_shutdown - gracefully shut down a TCP socket
2091 * @xprt: transport
2092 *
2093 * Initiates a graceful shutdown of the TCP socket by calling the
2094 * equivalent of shutdown(SHUT_RDWR);
2095 */
2096static void xs_tcp_shutdown(struct rpc_xprt *xprt)
2097{
2098 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
2099 struct socket *sock = transport->sock;
2100
2101 if (sock == NULL)
2102 return;
2103 if (xprt_connected(xprt)) {
2104 kernel_sock_shutdown(sock, SHUT_RDWR);
2105 trace_rpc_socket_shutdown(xprt, sock);
2106 } else
2107 xs_reset_transport(transport);
2108}
2109
2106static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock) 2110static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
2107{ 2111{
2108 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt); 2112 struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);