On Wed, Feb 13, 2013 at 10:24:05AM -0800, [email protected] wrote: [...] > > --- a/drivers/net/xen-netback/netback.c > +++ b/drivers/net/xen-netback/netback.c > @@ -143,7 +143,8 @@ void xen_netbk_remove_xenvif(struct xenv > atomic_dec(&netbk->netfront_count); > } > > -static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx); > +static void xen_netbk_idx_release(struct xen_netbk *netbk, u16 pending_idx, > + u8 status); > static void make_tx_response(struct xenvif *vif, > struct xen_netif_tx_request *txp, > s8 st); > @@ -968,30 +969,20 @@ static int xen_netbk_tx_check_gop(struct > { > struct gnttab_copy *gop = *gopp; > int pending_idx = *((u16 *)skb->data); > - struct pending_tx_info *pending_tx_info = netbk->pending_tx_info; > - struct xenvif *vif = pending_tx_info[pending_idx].vif; > - struct xen_netif_tx_request *txp; > struct skb_shared_info *shinfo = skb_shinfo(skb); > int nr_frags = shinfo->nr_frags; > int i, err, start; > > /* Check status of header. */ > err = gop->status; > - if (unlikely(err)) { > - pending_ring_idx_t index; > - index = pending_index(netbk->pending_prod++); > - txp = &pending_tx_info[pending_idx].req; > - make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR); > - netbk->pending_ring[index] = pending_idx; > - xenvif_put(vif); > - } > + if (unlikely(err)) > + xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_ERROR); > > /* Skip first skb fragment if it is on same page as header fragment. */ > - start = ((unsigned long)shinfo->frags[0].page == pending_idx); > + start = ((unsigned long)shinfo->frags[i].page == pending_idx);
This is wrong, change is not on original patch and i is unitialized here. [...] -- []'s Herton -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
