mirror of https://github.com/torvalds/linux.git
mptcp: drop legacy code around RX EOF
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>
This commit is contained in:
parent
81c1d02901
commit
b7535cfed2
|
|
@ -894,49 +894,6 @@ bool mptcp_schedule_work(struct sock *sk)
|
||||||
return false;
|
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)
|
static struct sock *mptcp_subflow_recv_lookup(const struct mptcp_sock *msk)
|
||||||
{
|
{
|
||||||
struct mptcp_subflow_context *subflow;
|
struct mptcp_subflow_context *subflow;
|
||||||
|
|
@ -2161,9 +2118,6 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_and_clear_bit(MPTCP_WORK_EOF, &msk->flags))
|
|
||||||
mptcp_check_for_eof(msk);
|
|
||||||
|
|
||||||
if (sk->sk_shutdown & RCV_SHUTDOWN) {
|
if (sk->sk_shutdown & RCV_SHUTDOWN) {
|
||||||
/* race breaker: the shutdown could be after the
|
/* race breaker: the shutdown could be after the
|
||||||
* previous receive queue check
|
* previous receive queue check
|
||||||
|
|
@ -2681,9 +2635,6 @@ static void mptcp_worker(struct work_struct *work)
|
||||||
|
|
||||||
mptcp_pm_nl_work(msk);
|
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_send_data_fin(sk);
|
||||||
mptcp_check_data_fin_ack(sk);
|
mptcp_check_data_fin_ack(sk);
|
||||||
mptcp_check_data_fin(sk);
|
mptcp_check_data_fin(sk);
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,6 @@
|
||||||
/* MPTCP socket atomic flags */
|
/* MPTCP socket atomic flags */
|
||||||
#define MPTCP_NOSPACE 1
|
#define MPTCP_NOSPACE 1
|
||||||
#define MPTCP_WORK_RTX 2
|
#define MPTCP_WORK_RTX 2
|
||||||
#define MPTCP_WORK_EOF 3
|
|
||||||
#define MPTCP_FALLBACK_DONE 4
|
#define MPTCP_FALLBACK_DONE 4
|
||||||
#define MPTCP_WORK_CLOSE_SUBFLOW 5
|
#define MPTCP_WORK_CLOSE_SUBFLOW 5
|
||||||
|
|
||||||
|
|
@ -476,14 +475,13 @@ struct mptcp_subflow_context {
|
||||||
send_mp_fail : 1,
|
send_mp_fail : 1,
|
||||||
send_fastclose : 1,
|
send_fastclose : 1,
|
||||||
send_infinite_map : 1,
|
send_infinite_map : 1,
|
||||||
rx_eof : 1,
|
|
||||||
remote_key_valid : 1, /* received the peer key from */
|
remote_key_valid : 1, /* received the peer key from */
|
||||||
disposable : 1, /* ctx can be free at ulp release time */
|
disposable : 1, /* ctx can be free at ulp release time */
|
||||||
stale : 1, /* unable to snd/rcv data, do not use for xmit */
|
stale : 1, /* unable to snd/rcv data, do not use for xmit */
|
||||||
local_id_valid : 1, /* local_id is correctly initialized */
|
local_id_valid : 1, /* local_id is correctly initialized */
|
||||||
valid_csum_seen : 1, /* at least one csum validated */
|
valid_csum_seen : 1, /* at least one csum validated */
|
||||||
is_mptfo : 1, /* subflow is doing TFO */
|
is_mptfo : 1, /* subflow is doing TFO */
|
||||||
__unused : 8;
|
__unused : 9;
|
||||||
enum mptcp_data_avail data_avail;
|
enum mptcp_data_avail data_avail;
|
||||||
u32 remote_nonce;
|
u32 remote_nonce;
|
||||||
u64 thmac;
|
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_check_push(struct sock *sk, struct sock *ssk);
|
||||||
void __mptcp_data_acked(struct sock *sk);
|
void __mptcp_data_acked(struct sock *sk);
|
||||||
void __mptcp_error_report(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);
|
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)
|
static inline bool mptcp_data_fin_enabled(const struct mptcp_sock *msk)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue