Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Trivial conflict in net/netfilter/nf_tables_api.c. Duplicate fix in tools/testing/selftests/net/devlink_port_split.py - take the net-next version. skmsg, and L4 bpf - keep the bpf code but remove the flags and err params. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -373,6 +373,24 @@ static bool subflow_use_different_dport(struct mptcp_sock *msk, const struct soc
|
||||
return inet_sk(sk)->inet_dport != inet_sk((struct sock *)msk)->inet_dport;
|
||||
}
|
||||
|
||||
void __mptcp_set_connected(struct sock *sk)
|
||||
{
|
||||
if (sk->sk_state == TCP_SYN_SENT) {
|
||||
inet_sk_state_store(sk, TCP_ESTABLISHED);
|
||||
sk->sk_state_change(sk);
|
||||
}
|
||||
}
|
||||
|
||||
static void mptcp_set_connected(struct sock *sk)
|
||||
{
|
||||
mptcp_data_lock(sk);
|
||||
if (!sock_owned_by_user(sk))
|
||||
__mptcp_set_connected(sk);
|
||||
else
|
||||
set_bit(MPTCP_CONNECTED, &mptcp_sk(sk)->flags);
|
||||
mptcp_data_unlock(sk);
|
||||
}
|
||||
|
||||
static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
|
||||
@@ -381,10 +399,6 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
||||
|
||||
subflow->icsk_af_ops->sk_rx_dst_set(sk, skb);
|
||||
|
||||
if (inet_sk_state_load(parent) == TCP_SYN_SENT) {
|
||||
inet_sk_state_store(parent, TCP_ESTABLISHED);
|
||||
parent->sk_state_change(parent);
|
||||
}
|
||||
|
||||
/* be sure no special action on any packet other than syn-ack */
|
||||
if (subflow->conn_finished)
|
||||
@@ -417,6 +431,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
||||
subflow->remote_key);
|
||||
MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPCAPABLEACTIVEACK);
|
||||
mptcp_finish_connect(sk);
|
||||
mptcp_set_connected(parent);
|
||||
} else if (subflow->request_join) {
|
||||
u8 hmac[SHA256_DIGEST_SIZE];
|
||||
|
||||
@@ -457,6 +472,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
||||
} else if (mptcp_check_fallback(sk)) {
|
||||
fallback:
|
||||
mptcp_rcv_space_init(mptcp_sk(parent), sk);
|
||||
mptcp_set_connected(parent);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -564,6 +580,7 @@ static void mptcp_sock_destruct(struct sock *sk)
|
||||
|
||||
static void mptcp_force_close(struct sock *sk)
|
||||
{
|
||||
/* the msk is not yet exposed to user-space */
|
||||
inet_sk_state_store(sk, TCP_CLOSE);
|
||||
sk_common_release(sk);
|
||||
}
|
||||
@@ -781,15 +798,6 @@ enum mapping_status {
|
||||
MAPPING_DUMMY
|
||||
};
|
||||
|
||||
static u64 expand_seq(u64 old_seq, u16 old_data_len, u64 seq)
|
||||
{
|
||||
if ((u32)seq == (u32)old_seq)
|
||||
return old_seq;
|
||||
|
||||
/* Assume map covers data not mapped yet. */
|
||||
return seq | ((old_seq + old_data_len + 1) & GENMASK_ULL(63, 32));
|
||||
}
|
||||
|
||||
static void dbg_bad_map(struct mptcp_subflow_context *subflow, u32 ssn)
|
||||
{
|
||||
pr_debug("Bad mapping: ssn=%d map_seq=%d map_data_len=%d",
|
||||
@@ -995,13 +1003,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk,
|
||||
data_len--;
|
||||
}
|
||||
|
||||
if (!mpext->dsn64) {
|
||||
map_seq = expand_seq(subflow->map_seq, subflow->map_data_len,
|
||||
mpext->data_seq);
|
||||
pr_debug("expanded seq=%llu", subflow->map_seq);
|
||||
} else {
|
||||
map_seq = mpext->data_seq;
|
||||
}
|
||||
map_seq = mptcp_expand_seq(READ_ONCE(msk->ack_seq), mpext->data_seq, mpext->dsn64);
|
||||
WRITE_ONCE(mptcp_sk(subflow->conn)->use_64bit_ack, !!mpext->dsn64);
|
||||
|
||||
if (subflow->map_valid) {
|
||||
@@ -1592,10 +1594,7 @@ static void subflow_state_change(struct sock *sk)
|
||||
mptcp_rcv_space_init(mptcp_sk(parent), sk);
|
||||
pr_fallback(mptcp_sk(parent));
|
||||
subflow->conn_finished = 1;
|
||||
if (inet_sk_state_load(parent) == TCP_SYN_SENT) {
|
||||
inet_sk_state_store(parent, TCP_ESTABLISHED);
|
||||
parent->sk_state_change(parent);
|
||||
}
|
||||
mptcp_set_connected(parent);
|
||||
}
|
||||
|
||||
/* as recvmsg() does not acquire the subflow socket for ssk selection
|
||||
|
||||
Reference in New Issue
Block a user