| To: | jgarzik@xxxxxxxxx, netdev@xxxxxxxxxxx |
|---|---|
| Subject: | [PATCH 2.6.13-rc4 4/13] S2io: Removed memory leaks |
| From: | raghavendra.koushik@xxxxxxxxxxxx |
| Date: | Wed, 3 Aug 2005 12:30:43 -0700 (PDT) |
| Cc: | raghavendra.koushik@xxxxxxxxxxxx, ravinandan.arakali@xxxxxxxxxxxx, leonid.grossman@xxxxxxxxxxxx, rapuru.sriram@xxxxxxxxxxxx |
| Sender: | netdev-bounce@xxxxxxxxxxx |
Hi,
This patch fixes certain memory leaks discovered in free_tx_buffers()
and rx_osm_handler()
Signed-off-by: Ravinandan Arakali <ravinandan.arakali@xxxxxxxxxxxx>
Signed-off-by: Raghavendra Koushik <raghavendra.koushik@xxxxxxxxxxxx>
---
diff -uprN vanilla_linux/drivers/net/s2io.c linux-2.6.13-rc4/drivers/net/s2io.c
--- vanilla_linux/drivers/net/s2io.c 2005-08-02 02:51:35.000000000 -0700
+++ linux-2.6.13-rc4/drivers/net/s2io.c 2005-08-02 02:51:26.000000000 -0700
@@ -1709,7 +1709,7 @@ static void free_tx_buffers(struct s2io_
int i, j;
mac_info_t *mac_control;
struct config_param *config;
- int cnt = 0;
+ int cnt = 0, frg_cnt;
mac_control = &nic->mac_control;
config = &nic->config;
@@ -1722,11 +1722,33 @@ static void free_tx_buffers(struct s2io_
(struct sk_buff *) ((unsigned long) txdp->
Host_Control);
if (skb == NULL) {
- memset(txdp, 0, sizeof(TxD_t));
+ memset(txdp, 0, sizeof(TxD_t) *
+ config->max_txds);
continue;
}
+ frg_cnt = skb_shinfo(skb)->nr_frags;
+ pci_unmap_single(nic->pdev, (dma_addr_t)
+ txdp->Buffer_Pointer,
+ skb->len - skb->data_len,
+ PCI_DMA_TODEVICE);
+ if (frg_cnt) {
+ TxD_t *temp;
+ temp = txdp;
+ txdp++;
+ for (j = 0; j < frg_cnt; j++, txdp++) {
+ skb_frag_t *frag =
+ &skb_shinfo(skb)->frags[j];
+ pci_unmap_page(nic->pdev,
+ (dma_addr_t)
+ txdp->
+ Buffer_Pointer,
+ frag->size,
+ PCI_DMA_TODEVICE);
+ }
+ txdp = temp;
+ }
dev_kfree_skb(skb);
- memset(txdp, 0, sizeof(TxD_t));
+ memset(txdp, 0, sizeof(TxD_t) * config->max_txds);
cnt++;
}
DBG_PRINT(INTR_DBG,
@@ -4570,6 +4592,11 @@ static int rx_osm_handler(ring_info_t *r
unsigned long long err = rxdp->Control_1 & RXD_T_CODE;
DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%llx\n",
dev->name, err);
+ dev_kfree_skb(skb);
+ sp->stats.rx_crc_errors++;
+ atomic_dec(&sp->rx_bufs_left[ring_no]);
+ rxdp->Host_Control = 0;
+ return 0;
}
/* Updating statistics */
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [PATCH 2.6.13-rc4 3/13] S2io: Software fixes, raghavendra . koushik |
|---|---|
| Next by Date: | [PATCH 2.6.13-rc4 5/13] S2io: Performance improvements, raghavendra . koushik |
| Previous by Thread: | [PATCH 2.6.13-rc4 3/13] S2io: Software fixes, raghavendra . koushik |
| Next by Thread: | [PATCH 2.6.13-rc4 5/13] S2io: Performance improvements, raghavendra . koushik |
| Indexes: | [Date] [Thread] [Top] [All Lists] |