diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 77ddf2de712fa4d03f77d48136d3feb8241f4a0d..1ebf1ea29d605e7d0ee5b7fd3f61aa194404e3ed 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -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);
 }
 
 /**
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index 38d6577374984a9b5cf118c750da729c93552ce7..6bbf00801f61ea84522866c013f8d5718ca69842 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -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*/