|
@@ -622,24 +622,6 @@ process_status:
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * xs_tcp_shutdown - gracefully shut down a TCP socket
|
|
|
- * @xprt: transport
|
|
|
- *
|
|
|
- * Initiates a graceful shutdown of the TCP socket by calling the
|
|
|
- * equivalent of shutdown(SHUT_RDWR);
|
|
|
- */
|
|
|
-static void xs_tcp_shutdown(struct rpc_xprt *xprt)
|
|
|
-{
|
|
|
- struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
|
|
|
- struct socket *sock = transport->sock;
|
|
|
-
|
|
|
- if (sock != NULL) {
|
|
|
- kernel_sock_shutdown(sock, SHUT_RDWR);
|
|
|
- trace_rpc_socket_shutdown(xprt, sock);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* xs_tcp_send_request - write an RPC request to a TCP socket
|
|
|
* @task: address of RPC task that manages the state of an RPC request
|
|
@@ -786,6 +768,7 @@ static void xs_sock_mark_closed(struct rpc_xprt *xprt)
|
|
|
xs_sock_reset_connection_flags(xprt);
|
|
|
/* Mark transport as closed and wake up all pending tasks */
|
|
|
xprt_disconnect_done(xprt);
|
|
|
+ xprt_force_disconnect(xprt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2103,6 +2086,27 @@ out:
|
|
|
xprt_wake_pending_tasks(xprt, status);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * xs_tcp_shutdown - gracefully shut down a TCP socket
|
|
|
+ * @xprt: transport
|
|
|
+ *
|
|
|
+ * Initiates a graceful shutdown of the TCP socket by calling the
|
|
|
+ * equivalent of shutdown(SHUT_RDWR);
|
|
|
+ */
|
|
|
+static void xs_tcp_shutdown(struct rpc_xprt *xprt)
|
|
|
+{
|
|
|
+ struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
|
|
|
+ struct socket *sock = transport->sock;
|
|
|
+
|
|
|
+ if (sock == NULL)
|
|
|
+ return;
|
|
|
+ if (xprt_connected(xprt)) {
|
|
|
+ kernel_sock_shutdown(sock, SHUT_RDWR);
|
|
|
+ trace_rpc_socket_shutdown(xprt, sock);
|
|
|
+ } else
|
|
|
+ xs_reset_transport(transport);
|
|
|
+}
|
|
|
+
|
|
|
static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
|
|
|
{
|
|
|
struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
|