sfc: Don't leak PCI DMA maps in the TSO code when the queue fills up
authorBen Hutchings <bhutchings@solarflare.com>
Mon, 1 Sep 2008 11:46:36 +0000 (12:46 +0100)
committerJeff Garzik <jgarzik@redhat.com>
Wed, 3 Sep 2008 13:53:44 +0000 (09:53 -0400)
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/net/sfc/tx.c

index e5e0bab313eb210983e59eaf50b3c285e3e2324c..0452ea6937ab4ca76fc6488763e4a56e0b9a2387 100644 (file)
@@ -1096,6 +1096,11 @@ static int efx_enqueue_skb_tso(struct efx_tx_queue *tx_queue,
                efx_stop_queue(tx_queue->efx);
 
  unwind:
+       /* Free the DMA mapping we were in the process of writing out */
+       if (state.ifc.unmap_len)
+               pci_unmap_page(tx_queue->efx->pci_dev, state.ifc.unmap_addr,
+                              state.ifc.unmap_len, PCI_DMA_TODEVICE);
+
        efx_enqueue_unwind(tx_queue);
        return rc2;
 }