From: Dave Taht <dave.t...@bufferbloat.net>

skb_reduce_truesize is an inline function to reduce large skbs
when needed.

The API may change before inclusion with Linux 3.7...
---
 .../054-net-add-skb_reduce_truesize.patch          |   45 ++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 
target/linux/generic/patches-3.3/054-net-add-skb_reduce_truesize.patch

diff --git 
a/target/linux/generic/patches-3.3/054-net-add-skb_reduce_truesize.patch 
b/target/linux/generic/patches-3.3/054-net-add-skb_reduce_truesize.patch
new file mode 100644
index 0000000..73d0270
--- /dev/null
+++ b/target/linux/generic/patches-3.3/054-net-add-skb_reduce_truesize.patch
@@ -0,0 +1,45 @@
+From 7cdeef22fb3164bbb52d9fcec9186c6eda877eef Mon Sep 17 00:00:00 2001
+From: Dave Taht <dave.t...@bufferbloat.net>
+Date: Mon, 27 Aug 2012 10:55:45 -0700
+Subject: [PATCH 2/4] net: add skb_reduce_truesize
+
+skb_reduce_truesize is a helper function for shrinking skbs whenever
+needed.
+---
+ include/linux/skbuff.h |   21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
+index 42854ce..38f7bb8 100644
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -2531,5 +2531,26 @@ static inline bool skb_is_recycleable(const struct 
sk_buff *skb, int skb_size)
+ 
+       return true;
+ }
++
++/*
++ * Caller wants to reduce memory needs before queueing skb
++ * The (expensive) copy should not be be done in fast path.
++ */
++
++static inline struct sk_buff *skb_reduce_truesize(struct sk_buff *skb)
++{
++       if (skb->truesize > 2 * SKB_TRUESIZE(skb->len)) {
++               struct sk_buff *nskb;
++
++               nskb = skb_copy_expand(skb, skb_headroom(skb), 0,
++                                      GFP_ATOMIC | __GFP_NOWARN);
++               if (nskb) {
++                       __kfree_skb(skb);
++                       skb = nskb;
++               }
++       }
++       return skb;
++}
++
+ #endif        /* __KERNEL__ */
+ #endif        /* _LINUX_SKBUFF_H */
+-- 
+1.7.9.5
+
-- 
1.7.9.5

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to