|
@@ -1349,7 +1349,7 @@ static int xenvif_handle_frag_list(struct xenvif_queue *queue, struct sk_buff *s
|
|
|
{
|
|
|
unsigned int offset = skb_headlen(skb);
|
|
|
skb_frag_t frags[MAX_SKB_FRAGS];
|
|
|
- int i;
|
|
|
+ int i, f;
|
|
|
struct ubuf_info *uarg;
|
|
|
struct sk_buff *nskb = skb_shinfo(skb)->frag_list;
|
|
|
|
|
@@ -1389,6 +1389,11 @@ static int xenvif_handle_frag_list(struct xenvif_queue *queue, struct sk_buff *s
|
|
|
frags[i].page_offset = 0;
|
|
|
skb_frag_size_set(&frags[i], len);
|
|
|
}
|
|
|
+
|
|
|
+ /* Release all the original (foreign) frags. */
|
|
|
+ for (f = 0; f < skb_shinfo(skb)->nr_frags; f++)
|
|
|
+ skb_frag_unref(skb, f);
|
|
|
+
|
|
|
/* swap out with old one */
|
|
|
memcpy(skb_shinfo(skb)->frags,
|
|
|
frags,
|