Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 095ab5f4 authored by Yousuk Seung's avatar Yousuk Seung Committed by Greg Kroah-Hartman
Browse files

tcp: refactor tcp_ecn_check_ce to remove sk type cast



[ Upstream commit f4c9f85f3b2cb7669830cd04d0be61192a4d2436 ]

Refactor tcp_ecn_check_ce and __tcp_ecn_check_ce to accept struct sock*
instead of tcp_sock* to clean up type casts. This is a pure refactor
patch.

Signed-off-by: default avatarYousuk Seung <ysseung@google.com>
Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 65d986cb
Loading
Loading
Loading
Loading
+14 −12
Original line number Original line Diff line number Diff line
@@ -250,8 +250,10 @@ static void tcp_ecn_withdraw_cwr(struct tcp_sock *tp)
	tp->ecn_flags &= ~TCP_ECN_DEMAND_CWR;
	tp->ecn_flags &= ~TCP_ECN_DEMAND_CWR;
}
}


static void __tcp_ecn_check_ce(struct tcp_sock *tp, const struct sk_buff *skb)
static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
{
{
	struct tcp_sock *tp = tcp_sk(sk);

	switch (TCP_SKB_CB(skb)->ip_dsfield & INET_ECN_MASK) {
	switch (TCP_SKB_CB(skb)->ip_dsfield & INET_ECN_MASK) {
	case INET_ECN_NOT_ECT:
	case INET_ECN_NOT_ECT:
		/* Funny extension: if ECT is not set on a segment,
		/* Funny extension: if ECT is not set on a segment,
@@ -259,31 +261,31 @@ static void __tcp_ecn_check_ce(struct tcp_sock *tp, const struct sk_buff *skb)
		 * it is probably a retransmit.
		 * it is probably a retransmit.
		 */
		 */
		if (tp->ecn_flags & TCP_ECN_SEEN)
		if (tp->ecn_flags & TCP_ECN_SEEN)
			tcp_enter_quickack_mode((struct sock *)tp, 1);
			tcp_enter_quickack_mode(sk, 1);
		break;
		break;
	case INET_ECN_CE:
	case INET_ECN_CE:
		if (tcp_ca_needs_ecn((struct sock *)tp))
		if (tcp_ca_needs_ecn(sk))
			tcp_ca_event((struct sock *)tp, CA_EVENT_ECN_IS_CE);
			tcp_ca_event(sk, CA_EVENT_ECN_IS_CE);


		if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
		if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
			/* Better not delay acks, sender can have a very low cwnd */
			/* Better not delay acks, sender can have a very low cwnd */
			tcp_enter_quickack_mode((struct sock *)tp, 1);
			tcp_enter_quickack_mode(sk, 1);
			tp->ecn_flags |= TCP_ECN_DEMAND_CWR;
			tp->ecn_flags |= TCP_ECN_DEMAND_CWR;
		}
		}
		tp->ecn_flags |= TCP_ECN_SEEN;
		tp->ecn_flags |= TCP_ECN_SEEN;
		break;
		break;
	default:
	default:
		if (tcp_ca_needs_ecn((struct sock *)tp))
		if (tcp_ca_needs_ecn(sk))
			tcp_ca_event((struct sock *)tp, CA_EVENT_ECN_NO_CE);
			tcp_ca_event(sk, CA_EVENT_ECN_NO_CE);
		tp->ecn_flags |= TCP_ECN_SEEN;
		tp->ecn_flags |= TCP_ECN_SEEN;
		break;
		break;
	}
	}
}
}


static void tcp_ecn_check_ce(struct tcp_sock *tp, const struct sk_buff *skb)
static void tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb)
{
{
	if (tp->ecn_flags & TCP_ECN_OK)
	if (tcp_sk(sk)->ecn_flags & TCP_ECN_OK)
		__tcp_ecn_check_ce(tp, skb);
		__tcp_ecn_check_ce(sk, skb);
}
}


static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th)
static void tcp_ecn_rcv_synack(struct tcp_sock *tp, const struct tcphdr *th)
@@ -699,7 +701,7 @@ static void tcp_event_data_recv(struct sock *sk, struct sk_buff *skb)
	}
	}
	icsk->icsk_ack.lrcvtime = now;
	icsk->icsk_ack.lrcvtime = now;


	tcp_ecn_check_ce(tp, skb);
	tcp_ecn_check_ce(sk, skb);


	if (skb->len >= 128)
	if (skb->len >= 128)
		tcp_grow_window(sk, skb);
		tcp_grow_window(sk, skb);
@@ -4456,7 +4458,7 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
	u32 seq, end_seq;
	u32 seq, end_seq;
	bool fragstolen;
	bool fragstolen;


	tcp_ecn_check_ce(tp, skb);
	tcp_ecn_check_ce(sk, skb);


	if (unlikely(tcp_try_rmem_schedule(sk, skb, skb->truesize))) {
	if (unlikely(tcp_try_rmem_schedule(sk, skb, skb->truesize))) {
		NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFODROP);
		NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFODROP);