mptcp: drop legacy code around RX EOF
authorPaolo Abeni <pabeni@redhat.com>
Tue, 20 Jun 2023 16:24:22 +0000 (18:24 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 22 Jun 2023 05:44:54 +0000 (22:44 -0700)
Thanks to the previous patch -- "mptcp: consolidate fallback and non
fallback state machine" -- we can finally drop the "temporary hack"
used to detect rx eof.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c
net/mptcp/protocol.h

index 27d206f..a66ec34 100644 (file)
@@ -894,49 +894,6 @@ bool mptcp_schedule_work(struct sock *sk)
        return false;
 }
 
-void mptcp_subflow_eof(struct sock *sk)
-{
-       if (!test_and_set_bit(MPTCP_WORK_EOF, &mptcp_sk(sk)->flags))
-               mptcp_schedule_work(sk);
-}
-
-static void mptcp_check_for_eof(struct mptcp_sock *msk)
-{
-       struct mptcp_subflow_context *subflow;
-       struct sock *sk = (struct sock *)msk;
-       int receivers = 0;
-
-       mptcp_for_each_subflow(msk, subflow)
-               receivers += !subflow->rx_eof;
-       if (receivers)
-               return;
-
-       if (!(sk->sk_shutdown & RCV_SHUTDOWN)) {
-               /* hopefully temporary hack: propagate shutdown status
-                * to msk, when all subflows agree on it
-                */
-               WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | RCV_SHUTDOWN);
-
-               smp_mb__before_atomic(); /* SHUTDOWN must be visible first */
-               sk->sk_data_ready(sk);
-       }
-
-       switch (sk->sk_state) {
-       case TCP_ESTABLISHED:
-               inet_sk_state_store(sk, TCP_CLOSE_WAIT);
-               break;
-       case TCP_FIN_WAIT1:
-               inet_sk_state_store(sk, TCP_CLOSING);
-               break;
-       case TCP_FIN_WAIT2:
-               inet_sk_state_store(sk, TCP_CLOSE);
-               break;
-       default:
-               return;
-       }
-       mptcp_close_wake_up(sk);
-}
-
 static struct sock *mptcp_subflow_recv_lookup(const struct mptcp_sock *msk)
 {
        struct mptcp_subflow_context *subflow;
@@ -2161,9 +2118,6 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                                break;
                        }
 
-                       if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags))
-                               mptcp_check_for_eof(msk);
-
                        if (sk->sk_shutdown & RCV_SHUTDOWN) {
                                /* race breaker: the shutdown could be after the
                                 * previous receive queue check
@@ -2681,9 +2635,6 @@ static void mptcp_worker(struct work_struct *work)
 
        mptcp_pm_nl_work(msk);
 
-       if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags))
-               mptcp_check_for_eof(msk);
-
        mptcp_check_send_data_fin(sk);
        mptcp_check_data_fin_ack(sk);
        mptcp_check_data_fin(sk);
index 70c957b..d3783a7 100644 (file)
 /* MPTCP socket atomic flags */
 #define MPTCP_NOSPACE          1
 #define MPTCP_WORK_RTX         2
-#define MPTCP_WORK_EOF         3
 #define MPTCP_FALLBACK_DONE    4
 #define MPTCP_WORK_CLOSE_SUBFLOW 5
 
@@ -476,14 +475,13 @@ struct mptcp_subflow_context {
                send_mp_fail : 1,
                send_fastclose : 1,
                send_infinite_map : 1,
-               rx_eof : 1,
                remote_key_valid : 1,        /* received the peer key from */
                disposable : 1,     /* ctx can be free at ulp release time */
                stale : 1,          /* unable to snd/rcv data, do not use for xmit */
                local_id_valid : 1, /* local_id is correctly initialized */
                valid_csum_seen : 1,        /* at least one csum validated */
                is_mptfo : 1,       /* subflow is doing TFO */
-               __unused : 8;
+               __unused : 9;
        enum mptcp_data_avail data_avail;
        u32     remote_nonce;
        u64     thmac;
@@ -720,7 +718,6 @@ static inline u64 mptcp_expand_seq(u64 old_seq, u64 cur_seq, bool use_64bit)
 void __mptcp_check_push(struct sock *sk, struct sock *ssk);
 void __mptcp_data_acked(struct sock *sk);
 void __mptcp_error_report(struct sock *sk);
-void mptcp_subflow_eof(struct sock *sk);
 bool mptcp_update_rcv_data_fin(struct mptcp_sock *msk, u64 data_fin_seq, bool use_64bit);
 static inline bool mptcp_data_fin_enabled(const struct mptcp_sock *msk)
 {