aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/netfilter.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-10-14 03:39:55 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-15 15:26:28 -0400
commit2ca7b0ac022aa0158599178fe1056b1ba9ec8b97 (patch)
tree6eece25447f0ec3b5d5f5533e49e10fde4d59f35 /net/ipv4/netfilter.c
parentaf1e1cf073e3d038b7aac417a20585ecdcab7de6 (diff)
[NETFILTER]: Avoid skb_copy/pskb_copy/skb_realloc_headroom
This patch replaces unnecessary uses of skb_copy, pskb_copy and skb_realloc_headroom by functions such as skb_make_writable and pskb_expand_head. This allows us to remove the double pointers later. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/netfilter.c')
-rw-r--r--net/ipv4/netfilter.c31
1 files changed, 9 insertions, 22 deletions
diff --git a/net/ipv4/netfilter.c b/net/ipv4/netfilter.c
index b44192924f9..d1e3012d891 100644
--- a/net/ipv4/netfilter.c
+++ b/net/ipv4/netfilter.c
@@ -3,6 +3,7 @@
3#include <linux/netfilter.h> 3#include <linux/netfilter.h>
4#include <linux/netfilter_ipv4.h> 4#include <linux/netfilter_ipv4.h>
5#include <linux/ip.h> 5#include <linux/ip.h>
6#include <linux/skbuff.h>
6#include <net/route.h> 7#include <net/route.h>
7#include <net/xfrm.h> 8#include <net/xfrm.h>
8#include <net/ip.h> 9#include <net/ip.h>
@@ -66,17 +67,10 @@ int ip_route_me_harder(struct sk_buff **pskb, unsigned addr_type)
66 67
67 /* Change in oif may mean change in hh_len. */ 68 /* Change in oif may mean change in hh_len. */
68 hh_len = (*pskb)->dst->dev->hard_header_len; 69 hh_len = (*pskb)->dst->dev->hard_header_len;
69 if (skb_headroom(*pskb) < hh_len) { 70 if (skb_headroom(*pskb) < hh_len &&
70 struct sk_buff *nskb; 71 pskb_expand_head(*pskb, hh_len - skb_headroom(*pskb), 0,
71 72 GFP_ATOMIC))
72 nskb = skb_realloc_headroom(*pskb, hh_len); 73 return -1;
73 if (!nskb)
74 return -1;
75 if ((*pskb)->sk)
76 skb_set_owner_w(nskb, (*pskb)->sk);
77 kfree_skb(*pskb);
78 *pskb = nskb;
79 }
80 74
81 return 0; 75 return 0;
82} 76}
@@ -107,17 +101,10 @@ int ip_xfrm_me_harder(struct sk_buff **pskb)
107 101
108 /* Change in oif may mean change in hh_len. */ 102 /* Change in oif may mean change in hh_len. */
109 hh_len = (*pskb)->dst->dev->hard_header_len; 103 hh_len = (*pskb)->dst->dev->hard_header_len;
110 if (skb_headroom(*pskb) < hh_len) { 104 if (skb_headroom(*pskb) < hh_len &&
111 struct sk_buff *nskb; 105 pskb_expand_head(*pskb, hh_len - skb_headroom(*pskb), 0,
112 106 GFP_ATOMIC))
113 nskb = skb_realloc_headroom(*pskb, hh_len); 107 return -1;
114 if (!nskb)
115 return -1;
116 if ((*pskb)->sk)
117 skb_set_owner_w(nskb, (*pskb)->sk);
118 kfree_skb(*pskb);
119 *pskb = nskb;
120 }
121 return 0; 108 return 0;
122} 109}
123EXPORT_SYMBOL(ip_xfrm_me_harder); 110EXPORT_SYMBOL(ip_xfrm_me_harder);