From: Peter Krystad <peter.krys...@linux.intel.com>

Signed-off-by: Peter Krystad <peter.krys...@linux.intel.com>
---
 net/mptcp/protocol.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 2f340ef8e281..6596e594fa5f 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -296,6 +296,26 @@ static __poll_t mptcp_poll(struct file *file, struct 
socket *sock,
        return tcp_poll(file, msk->connection_list, wait);
 }
 
+static int mptcp_shutdown(struct socket *sock, int how)
+{
+       struct mptcp_sock *msk = mptcp_sk(sock->sk);
+       int ret = 0;
+
+       pr_debug("sk=%p, how=%d", msk, how);
+
+       if (msk->subflow) {
+               pr_debug("subflow=%p", msk->subflow->sk);
+               ret = kernel_sock_shutdown(msk->subflow, how);
+       }
+
+       if (msk->connection_list) {
+               pr_debug("conn_list->subflow=%p", msk->connection_list->sk);
+               ret = kernel_sock_shutdown(msk->connection_list, how);
+       }
+
+       return ret;
+}
+
 static struct proto_ops mptcp_stream_ops;
 
 static struct inet_protosw mptcp_protosw = {
@@ -316,6 +336,7 @@ void __init mptcp_init(void)
        mptcp_stream_ops.accept = mptcp_stream_accept;
        mptcp_stream_ops.getname = mptcp_getname;
        mptcp_stream_ops.listen = mptcp_listen;
+       mptcp_stream_ops.shutdown = mptcp_shutdown;
 
        token_init();
        crypto_init();
-- 
2.22.0

Reply via email to