]> 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:

8553876ae2f29cfc818ce2bbf935515d654f43c5 cxgb3: convert to SKB paged frag API.
5c53baf0bf02c2e2ee8356b887badd797307a6ac myri10ge: convert to SKB paged frag API.
32bd1e4808c472fc42b10efcb8039d508941a6d0 vmxnet3: convert to SKB paged frag API.
cb25246b91f0f57edba9271bad686aba544231e7 virtionet: convert to SKB paged frag API.
4599744db344048cc2bc7400e05f64911d3fddef sfc: convert to SKB paged frag API.
cf2aec86d8cd8fc2cd5a7aa893c9680110372b56 cassini: convert to SKB paged frag API.
ac32ff5d3c0436e466dd68e306a074155677cd76 benet: convert to SKB paged frag API.
da4c7e143c926b4860e54ae4f6433e953f93979a bnx2: convert to SKB paged frag API.
cd6819958156ff20b8a9090ff687c27f5b56ad33 net: xfrm: convert to SKB frag APIs
421924a26967d918a4eb4e9b631e46bdc51705a7 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*/