]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: do not take an additional reference in skb_frag_set_page
authorIan Campbell <Ian.Campbell@citrix.com>
Tue, 18 Oct 2011 22:55:11 +0000 (22:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Oct 2011 23:40:39 +0000 (19:40 -0400)
I audited all of the callers in the tree and only one of them (pktgen) expects
it to do so. Taking this reference is pretty obviously confusing and error
prone.

In particular I looked at the following commits which switched callers of
(__)skb_frag_set_page to the skb paged fragment api:

b71230ee9d1afda91503d165da0da2fab080d875 cxgb3: convert to SKB paged frag API.
28debac1e89136a2fe29c5637373d23951bf466d myri10ge: convert to SKB paged frag API.
22cda0e9d6a098628524fbaa82d8c377e98958ae vmxnet3: convert to SKB paged frag API.
927fdcbb91747aabbcd596c009e72309f9efbc62 virtionet: convert to SKB paged frag API.
1d5f8df0c59d286398efd71186574313ac75f669 sfc: convert to SKB paged frag API.
dce561371ed941d376f1cf1ece2a44b626f04ce1 cassini: convert to SKB paged frag API.
3f352c3ebce70a49339f6164097d4e4bb6bb86a5 benet: convert to SKB paged frag API.
75c5e1c7611febca6e74a9f5df3d7c0d9b915744 bnx2: convert to SKB paged frag API.
f8bd24326a65e4dfc4b19c3c3712888259ec70f2 net: xfrm: convert to SKB frag APIs
8de9eb0010f69aaa097ac9437426fb76aed276a6 net: convert core to skb paged frag APIs

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
net/core/pktgen.c

index 77ddf2de712fa4d03f77d48136d3feb8241f4a0d..1ebf1ea29d605e7d0ee5b7fd3f61aa194404e3ed 100644 (file)
@@ -1786,7 +1786,6 @@ static inline void *skb_frag_address_safe(const skb_frag_t *frag)
 static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page)
 {
        frag->page = page;
-       __skb_frag_ref(frag);
 }
 
 /**
index 38d6577374984a9b5cf118c750da729c93552ce7..6bbf00801f61ea84522866c013f8d5718ca69842 100644 (file)
@@ -2602,6 +2602,7 @@ static void pktgen_finalize_skb(struct pktgen_dev *pkt_dev, struct sk_buff *skb,
                                if (!pkt_dev->page)
                                        break;
                        }
+                       get_page(pkt_dev->page);
                        skb_frag_set_page(skb, i, pkt_dev->page);
                        skb_shinfo(skb)->frags[i].page_offset = 0;
                        /*last fragment, fill rest of data*/