kmod-sched-cake: don't gso fixup on fixed kernels
[openwrt/openwrt.git] / package / kernel / kmod-sched-cake / patches / 100-remove-skb-max-fix-on-fixed-kernels.patch
diff --git a/package/kernel/kmod-sched-cake/patches/100-remove-skb-max-fix-on-fixed-kernels.patch b/package/kernel/kmod-sched-cake/patches/100-remove-skb-max-fix-on-fixed-kernels.patch
new file mode 100644 (file)
index 0000000..5f1f3a9
--- /dev/null
@@ -0,0 +1,22 @@
+--- a/sch_cake.c
++++ b/sch_cake.c
+@@ -1799,13 +1799,18 @@ static s32 cake_enqueue(struct sk_buff *
+                       cobalt_set_enqueue_time(segs, now);
+                       get_cobalt_cb(segs)->adjusted_len = cake_overhead(q,
+                                                                         segs);
+-
++#if !((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 124) && LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4,  4, 159) && LINUX_VERSION_CODE < KERNEL_VERSION(4,  5, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4,  9, 130) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14,  73) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18,  11)))
+                       /* For encapsulated packets, the mac_len may not be set
+                        * correctly after GSO split. Fix this by resetting it;
+                        * if skb_gso_segment() already does this correctly,
+                        * this is will just recalculate the current value.
+                        */
+                       skb_reset_mac_len(skb);
++#endif
+                       flow_queue_add(flow, segs);