igb/igbvf: cleanup exception handling in tx_map_adv
authorAlexander Duyck <alexander.h.duyck@intel.com>
Sat, 23 Jan 2010 09:35:00 +0000 (01:35 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 Jan 2010 09:35:00 +0000 (01:35 -0800)
After removing the skb_dma_map/unmap calls the exception handling in
igb_tx_map_adv is not correct.  The issue is that the count value was not
being correctly handled so as a result we were not rewinding the ring as
back as we should have been.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/igb/igb_main.c
drivers/net/igbvf/netdev.c

index 933c64ff24657d362a2d3e34cb1c525c04826bb6..2ca173453b66cf200098bec5fc361a0197fd90f6 100644 (file)
@@ -3584,6 +3584,7 @@ static inline int igb_tx_map_adv(struct igb_ring *tx_ring, struct sk_buff *skb,
        for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
                struct skb_frag_struct *frag;
 
+               count++;
                i++;
                if (i == tx_ring->count)
                        i = 0;
@@ -3605,7 +3606,6 @@ static inline int igb_tx_map_adv(struct igb_ring *tx_ring, struct sk_buff *skb,
                if (pci_dma_mapping_error(pdev, buffer_info->dma))
                        goto dma_error;
 
-               count++;
        }
 
        tx_ring->buffer_info[i].skb = skb;
index 10e038adba0f5b245fc4ba77b63fac76168aa823..43c8375f11105c29036fb3e3786f63ce59b9d023 100644 (file)
@@ -2126,6 +2126,7 @@ static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter,
        for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
                struct skb_frag_struct *frag;
 
+               count++;
                i++;
                if (i == tx_ring->count)
                        i = 0;
@@ -2146,7 +2147,6 @@ static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter,
                                                PCI_DMA_TODEVICE);
                if (pci_dma_mapping_error(pdev, buffer_info->dma))
                        goto dma_error;
-               count++;
        }
 
        tx_ring->buffer_info[i].skb = skb;