]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xen/netback: Calculate the number of SKB slots required correctly
authorSimon Graham <simon.graham@citrix.com>
Thu, 24 May 2012 06:26:07 +0000 (06:26 +0000)
committerMaxim Uvarov <maxim.uvarov@oracle.com>
Thu, 14 Jun 2012 08:35:58 +0000 (12:35 +0400)
When calculating the number of slots required for a packet header, the code
was reserving too many slots if the header crossed a page boundary. Since
netbk_gop_skb copies the header to the start of the page, the count of
slots required for the header should be based solely on the header size.

This problem is easy to reproduce if a VIF is bridged to a USB 3G modem
device as the skb->data value always starts near the end of the first page.

Signed-off-by: Simon Graham <simon.graham@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit e26b203ede31fffd52571a5ba607a26c79dc5c0d)

Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/xen-netback/netback.c

index a200af122653548050c8e9755f6a1623d4a09186..2f31fd342c87e1d8e786a9071ee609e8f1fd2df0 100644 (file)
@@ -312,8 +312,7 @@ unsigned int xen_netbk_count_skb_slots(struct xenvif *vif, struct sk_buff *skb)
        unsigned int count;
        int i, copy_off;
 
-       count = DIV_ROUND_UP(
-                       offset_in_page(skb->data + skb_headlen(skb)), PAGE_SIZE);
+       count = DIV_ROUND_UP(skb_headlen(skb), PAGE_SIZE);
 
        copy_off = skb_headlen(skb) % PAGE_SIZE;