mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 09:02:21 -04:00
net: qdisc_pkt_len_segs_init() cleanup
Reduce indentation level by returning early if the transport header was not set. Add an unlikely() clause as this is not the common case. No functional change. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Joe Damato <joe@dama.to> Link: https://patch.msgid.link/20260403221540.3297753-2-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
e65d8b6f30
commit
30e02ec3b4
@@ -4104,6 +4104,7 @@ EXPORT_SYMBOL_GPL(validate_xmit_skb_list);
|
||||
static void qdisc_pkt_len_segs_init(struct sk_buff *skb)
|
||||
{
|
||||
struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
unsigned int hdr_len;
|
||||
u16 gso_segs;
|
||||
|
||||
qdisc_skb_cb(skb)->pkt_len = skb->len;
|
||||
@@ -4117,44 +4118,43 @@ static void qdisc_pkt_len_segs_init(struct sk_buff *skb)
|
||||
/* To get more precise estimation of bytes sent on wire,
|
||||
* we add to pkt_len the headers size of all segments
|
||||
*/
|
||||
if (skb_transport_header_was_set(skb)) {
|
||||
unsigned int hdr_len;
|
||||
if (unlikely(!skb_transport_header_was_set(skb)))
|
||||
return;
|
||||
|
||||
/* mac layer + network layer */
|
||||
if (!skb->encapsulation)
|
||||
hdr_len = skb_transport_offset(skb);
|
||||
else
|
||||
hdr_len = skb_inner_transport_offset(skb);
|
||||
/* mac layer + network layer */
|
||||
if (!skb->encapsulation)
|
||||
hdr_len = skb_transport_offset(skb);
|
||||
else
|
||||
hdr_len = skb_inner_transport_offset(skb);
|
||||
|
||||
/* + transport layer */
|
||||
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
|
||||
const struct tcphdr *th;
|
||||
struct tcphdr _tcphdr;
|
||||
/* + transport layer */
|
||||
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
|
||||
const struct tcphdr *th;
|
||||
struct tcphdr _tcphdr;
|
||||
|
||||
th = skb_header_pointer(skb, hdr_len,
|
||||
sizeof(_tcphdr), &_tcphdr);
|
||||
if (likely(th))
|
||||
hdr_len += __tcp_hdrlen(th);
|
||||
} else if (shinfo->gso_type & SKB_GSO_UDP_L4) {
|
||||
struct udphdr _udphdr;
|
||||
th = skb_header_pointer(skb, hdr_len,
|
||||
sizeof(_tcphdr), &_tcphdr);
|
||||
if (likely(th))
|
||||
hdr_len += __tcp_hdrlen(th);
|
||||
} else if (shinfo->gso_type & SKB_GSO_UDP_L4) {
|
||||
struct udphdr _udphdr;
|
||||
|
||||
if (skb_header_pointer(skb, hdr_len,
|
||||
sizeof(_udphdr), &_udphdr))
|
||||
hdr_len += sizeof(struct udphdr);
|
||||
}
|
||||
|
||||
if (unlikely(shinfo->gso_type & SKB_GSO_DODGY)) {
|
||||
int payload = skb->len - hdr_len;
|
||||
|
||||
/* Malicious packet. */
|
||||
if (payload <= 0)
|
||||
return;
|
||||
gso_segs = DIV_ROUND_UP(payload, shinfo->gso_size);
|
||||
shinfo->gso_segs = gso_segs;
|
||||
qdisc_skb_cb(skb)->pkt_segs = gso_segs;
|
||||
}
|
||||
qdisc_skb_cb(skb)->pkt_len += (gso_segs - 1) * hdr_len;
|
||||
if (skb_header_pointer(skb, hdr_len,
|
||||
sizeof(_udphdr), &_udphdr))
|
||||
hdr_len += sizeof(struct udphdr);
|
||||
}
|
||||
|
||||
if (unlikely(shinfo->gso_type & SKB_GSO_DODGY)) {
|
||||
int payload = skb->len - hdr_len;
|
||||
|
||||
/* Malicious packet. */
|
||||
if (payload <= 0)
|
||||
return;
|
||||
gso_segs = DIV_ROUND_UP(payload, shinfo->gso_size);
|
||||
shinfo->gso_segs = gso_segs;
|
||||
qdisc_skb_cb(skb)->pkt_segs = gso_segs;
|
||||
}
|
||||
qdisc_skb_cb(skb)->pkt_len += (gso_segs - 1) * hdr_len;
|
||||
}
|
||||
|
||||
static int dev_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *q,
|
||||
|
||||
Reference in New Issue
Block a user