mptcp: cleanup fallback dummy mapping generation
MPTCP currently access ack_seq outside the msk socket log scope to generate the dummy mapping for fallback socket. Soon we are going to introduce backlog usage and even for fallback socket the ack_seq value will be significantly off outside of the msk socket lock scope. Avoid relying on ack_seq for dummy mapping generation, using instead the subflow sequence number. Note that in case of disconnect() and (re)connect() we must ensure that any previous state is re-set. Signed-off-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Geliang Tang <geliang@kernel.org> Tested-by: Geliang Tang <geliang@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20251121-net-next-mptcp-memcg-backlog-imp-v1-6-1f34b6c1e0b1@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>pull/1354/merge
parent
85f22b8e1e
commit
2834f8edd7
|
|
@ -3274,6 +3274,9 @@ static int mptcp_disconnect(struct sock *sk, int flags)
|
|||
msk->bytes_retrans = 0;
|
||||
msk->rcvspace_init = 0;
|
||||
|
||||
/* for fallback's sake */
|
||||
WRITE_ONCE(msk->ack_seq, 0);
|
||||
|
||||
WRITE_ONCE(sk->sk_shutdown, 0);
|
||||
sk_error_report(sk);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -491,6 +491,9 @@ static void subflow_set_remote_key(struct mptcp_sock *msk,
|
|||
mptcp_crypto_key_sha(subflow->remote_key, NULL, &subflow->iasn);
|
||||
subflow->iasn++;
|
||||
|
||||
/* for fallback's sake */
|
||||
subflow->map_seq = subflow->iasn;
|
||||
|
||||
WRITE_ONCE(msk->remote_key, subflow->remote_key);
|
||||
WRITE_ONCE(msk->ack_seq, subflow->iasn);
|
||||
WRITE_ONCE(msk->can_ack, true);
|
||||
|
|
@ -1435,9 +1438,12 @@ reset:
|
|||
|
||||
skb = skb_peek(&ssk->sk_receive_queue);
|
||||
subflow->map_valid = 1;
|
||||
subflow->map_seq = READ_ONCE(msk->ack_seq);
|
||||
subflow->map_data_len = skb->len;
|
||||
subflow->map_subflow_seq = tcp_sk(ssk)->copied_seq - subflow->ssn_offset;
|
||||
subflow->map_seq = __mptcp_expand_seq(subflow->map_seq,
|
||||
subflow->iasn +
|
||||
TCP_SKB_CB(skb)->seq -
|
||||
subflow->ssn_offset - 1);
|
||||
WRITE_ONCE(subflow->data_avail, true);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue