#define dev_kfree_skb(a)       consume_skb(a)
 
 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
-                        int offset, size_t size);
+                        int offset, size_t size, size_t max_frags);
 
 struct skb_seq_state {
        __u32           lower_offset;
 
 EXPORT_SYMBOL(skb_find_text);
 
 int skb_append_pagefrags(struct sk_buff *skb, struct page *page,
-                        int offset, size_t size)
+                        int offset, size_t size, size_t max_frags)
 {
        int i = skb_shinfo(skb)->nr_frags;
 
        if (skb_can_coalesce(skb, i, page, offset)) {
                skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], size);
-       } else if (i < MAX_SKB_FRAGS) {
+       } else if (i < max_frags) {
                skb_zcopy_downgrade_managed(skb);
                get_page(page);
                skb_fill_page_desc_noacc(skb, i, page, offset, size);
 
                if (len > size)
                        len = size;
 
-               if (skb_append_pagefrags(skb, page, offset, len)) {
+               if (skb_append_pagefrags(skb, page, offset, len,
+                                        MAX_SKB_FRAGS)) {
                        err = -EMSGSIZE;
                        goto error;
                }
 
                newskb = NULL;
        }
 
-       if (skb_append_pagefrags(skb, page, offset, size)) {
+       if (skb_append_pagefrags(skb, page, offset, size, MAX_SKB_FRAGS)) {
                tail = skb;
                goto alloc_skb;
        }