mirror of https://gitee.com/openkylin/linux.git
mptcp: set data_ready status bit in subflow_check_data_avail()
This simplify mptcp_subflow_data_available() and will made follow-up patches simpler. Additionally remove the unneeded checks on subflow copied_seq: we always whole skbs out of subflows. Signed-off-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
63561a403c
commit
47bebdf365
|
@ -825,6 +825,8 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
|||
|
||||
pr_debug("msk=%p ssk=%p data_avail=%d skb=%p", subflow->conn, ssk,
|
||||
subflow->data_avail, skb_peek(&ssk->sk_receive_queue));
|
||||
if (!skb_peek(&ssk->sk_receive_queue))
|
||||
subflow->data_avail = 0;
|
||||
if (subflow->data_avail)
|
||||
return true;
|
||||
|
||||
|
@ -849,6 +851,7 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
|||
subflow->map_data_len = skb->len;
|
||||
subflow->map_subflow_seq = tcp_sk(ssk)->copied_seq -
|
||||
subflow->ssn_offset;
|
||||
subflow->data_avail = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -876,8 +879,10 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
|||
ack_seq = mptcp_subflow_get_mapped_dsn(subflow);
|
||||
pr_debug("msk ack_seq=%llx subflow ack_seq=%llx", old_ack,
|
||||
ack_seq);
|
||||
if (ack_seq == old_ack)
|
||||
if (ack_seq == old_ack) {
|
||||
subflow->data_avail = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* only accept in-sequence mapping. Old values are spurious
|
||||
* retransmission; we can hit "future" values on active backup
|
||||
|
@ -922,13 +927,13 @@ static bool subflow_check_data_avail(struct sock *ssk)
|
|||
ssk->sk_error_report(ssk);
|
||||
tcp_set_state(ssk, TCP_CLOSE);
|
||||
tcp_send_active_reset(ssk, GFP_ATOMIC);
|
||||
subflow->data_avail = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool mptcp_subflow_data_available(struct sock *sk)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
|
||||
struct sk_buff *skb;
|
||||
|
||||
/* check if current mapping is still valid */
|
||||
if (subflow->map_valid &&
|
||||
|
@ -941,15 +946,7 @@ bool mptcp_subflow_data_available(struct sock *sk)
|
|||
subflow->map_data_len);
|
||||
}
|
||||
|
||||
if (!subflow_check_data_avail(sk)) {
|
||||
subflow->data_avail = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
skb = skb_peek(&sk->sk_receive_queue);
|
||||
subflow->data_avail = skb &&
|
||||
before(tcp_sk(sk)->copied_seq, TCP_SKB_CB(skb)->end_seq);
|
||||
return subflow->data_avail;
|
||||
return subflow_check_data_avail(sk);
|
||||
}
|
||||
|
||||
/* If ssk has an mptcp parent socket, use the mptcp rcvbuf occupancy,
|
||||
|
|
Loading…
Reference in New Issue