lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 25 Nov 2014 21:24:52 +0800 From: Yang Yingliang <yangyingliang@...wei.com> To: <netdev@...r.kernel.org> CC: <eric.dumazet@...il.com>, <davem@...emloft.net> Subject: [PATCH net-next 3/3] sch_fq: segment too big GSO packets If a GSO packet cost more than 125ms to send, segment the packet and send individual segments. Signed-off-by: Yang Yingliang <yangyingliang@...wei.com> --- net/sched/sch_fq.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index ec6eff8..0119340 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c @@ -423,6 +423,30 @@ static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch) return qdisc_drop(skb, sch); } + if (skb_is_gso(skb) && skb_is_too_big(skb, q, NULL)) { + struct sk_buff *segs, *nskb; + netdev_features_t features = netif_skb_features(skb); + int nb = 0; + + segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK); + + if (IS_ERR_OR_NULL(segs)) + goto enqueue_out; + + while (segs) { + nskb = segs->next; + qdisc_skb_cb(segs)->pkt_len = segs->len; + __fq_enqueue(segs, sch, f); + nb++; + segs = nskb; + } + if (nb > 1) + qdisc_tree_decrease_qlen(sch, 1 - nb); + consume_skb(skb); + return NET_XMIT_SUCCESS; + } + +enqueue_out: return __fq_enqueue(skb, sch, f); } -- 1.8.0 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists