aboutsummaryrefslogtreecommitdiffstats
path: root/net/xfrm
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2014-09-29 16:29:15 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-01 16:34:25 -0400
commitd0bf4a9e92b9a93ffeeacbd7b6cb83e0ee3dc2ef (patch)
tree1ba29128caa07307632b6219c1692308ec89983a /net/xfrm
parentb248230c34970a6c1c17c591d63b464e8d2cfc33 (diff)
net: cleanup and document skb fclone layout
Lets use a proper structure to clearly document and implement skb fast clones. Then, we might experiment more easily alternative layouts. This patch adds a new skb_fclone_busy() helper, used by tcp and xfrm, to stop leaking of implementation details. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm')
-rw-r--r--net/xfrm/xfrm_policy.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index f623dca6ce30..4c4e457e7888 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1961,10 +1961,8 @@ static int xdst_queue_output(struct sock *sk, struct sk_buff *skb)
1961 struct xfrm_dst *xdst = (struct xfrm_dst *) dst; 1961 struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
1962 struct xfrm_policy *pol = xdst->pols[0]; 1962 struct xfrm_policy *pol = xdst->pols[0];
1963 struct xfrm_policy_queue *pq = &pol->polq; 1963 struct xfrm_policy_queue *pq = &pol->polq;
1964 const struct sk_buff *fclone = skb + 1;
1965 1964
1966 if (unlikely(skb->fclone == SKB_FCLONE_ORIG && 1965 if (unlikely(skb_fclone_busy(skb))) {
1967 fclone->fclone == SKB_FCLONE_CLONE)) {
1968 kfree_skb(skb); 1966 kfree_skb(skb);
1969 return 0; 1967 return 0;
1970 } 1968 }