typedef struct skb_frag_struct skb_frag_t;
 
 struct skb_frag_struct {
-       struct page *page;
+       struct {
+               struct page *p;
+       } page;
 #if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536)
        __u32 page_offset;
        __u32 size;
 {
        skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
 
-       frag->page                = page;
+       frag->page.p              = page;
        frag->page_offset         = off;
        skb_frag_size_set(frag, size);
 }
  */
 static inline struct page *skb_frag_page(const skb_frag_t *frag)
 {
-       return frag->page;
+       return frag->page.p;
 }
 
 /**
  */
 static inline void __skb_frag_set_page(skb_frag_t *frag, struct page *page)
 {
-       frag->page = page;
+       frag->page.p = page;
 }
 
 /**
 
 
        /* skb frags release userspace buffers */
        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
-               put_page(skb_shinfo(skb)->frags[i].page);
+               skb_frag_unref(skb, i);
 
        uarg->callback(uarg);
 
        /* skb frags point to kernel buffers */
        for (i = skb_shinfo(skb)->nr_frags; i > 0; i--) {
-               skb_shinfo(skb)->frags[i - 1].page_offset = 0;
-               skb_shinfo(skb)->frags[i - 1].page = head;
+               __skb_fill_page_desc(skb, i-1, head, 0,
+                                    skb_shinfo(skb)->frags[i - 1].size);
                head = (struct page *)head->private;
        }