Merge ra.kernel.org:/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / net / xen-netfront.c
index 8d33970..e14ec75 100644 (file)
@@ -531,7 +531,7 @@ static int xennet_count_skb_slots(struct sk_buff *skb)
        for (i = 0; i < frags; i++) {
                skb_frag_t *frag = skb_shinfo(skb)->frags + i;
                unsigned long size = skb_frag_size(frag);
-               unsigned long offset = frag->page_offset;
+               unsigned long offset = skb_frag_off(frag);
 
                /* Skip unused frames from start of page */
                offset &= ~PAGE_MASK;
@@ -674,8 +674,8 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
        /* Requests for all the frags. */
        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
-               tx = xennet_make_txreqs(queue, tx, skb,
-                                       skb_frag_page(frag), frag->page_offset,
+               tx = xennet_make_txreqs(queue, tx, skb, skb_frag_page(frag),
+                                       skb_frag_off(frag),
                                        skb_frag_size(frag));
        }
 
@@ -906,7 +906,7 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
                        __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
                }
                if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
-                       queue->rx.rsp_cons = ++cons;
+                       queue->rx.rsp_cons = ++cons + skb_queue_len(list);
                        kfree_skb(nskb);
                        return ~0U;
                }
@@ -1040,7 +1040,7 @@ err:
                if (NETFRONT_SKB_CB(skb)->pull_to > RX_COPY_THRESHOLD)
                        NETFRONT_SKB_CB(skb)->pull_to = RX_COPY_THRESHOLD;
 
-               skb_shinfo(skb)->frags[0].page_offset = rx->offset;
+               skb_frag_off_set(&skb_shinfo(skb)->frags[0], rx->offset);
                skb_frag_size_set(&skb_shinfo(skb)->frags[0], rx->status);
                skb->data_len = rx->status;
                skb->len += rx->status;