[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] linux-2.6.18/netback: use correct index for invalidation in netbk_tx_check_mop()



Hi,

On 11/18/11 14:15, Jan Beulich wrote:

> --- a/drivers/xen/netback/netback.c
> +++ b/drivers/xen/netback/netback.c
> @@ -1155,7 +1155,7 @@ static int netbk_tx_check_mop(struct sk_
>               pending_idx = *((u16 *)skb->data);
>               netif_idx_release(pending_idx);
>               for (j = start; j<  i; j++) {
> -                     pending_idx = (unsigned long)shinfo->frags[i].page;
> +                     pending_idx = (unsigned long)shinfo->frags[j].page;
>                       netif_idx_release(pending_idx);
>               }

Please excuse the uneducated question: what could be the consequences of using 
the wrong index here? I notice that with the fix, frags[i].page is never 
touched, while without the fix, it is the only one that's released.

I'm asking because we have an elusive bug: netloop sometimes crashes in 
skb_remove_foreign_references(). As of 1125:985b8f62df25, the crash happens on 
line 118:

   116                  vaddr = kmap_skb_frag(&skb_shinfo(skb)->frags[i]);
   117                  off = skb_shinfo(skb)->frags[i].page_offset;
   118                  memcpy(page_address(page) + off,
   119                         vaddr + off,
   120                         skb_shinfo(skb)->frags[i].size);

because the PTE for the vaddr returned by kmap_skb_frag() for the first frag is 
0.

It appears somehow related to NFS and closing/reopening TCP connections for NFS.

Thanks!
Laszlo

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.