summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames K Lewis <jklewis@us.ibm.com>2006-11-17 23:39:36 +0100
committerJeff Garzik <jeff@garzik.org>2006-11-30 12:14:06 +0100
commit9c434f5e2181097e1d22d9b3e381ca6d693e5188 (patch)
treedc2b9aa9b07995601166e7d5b11545065a467cd0
parent[PATCH] bonding: fix an oops when slave device does not provide get_stats (diff)
downloadlinux-9c434f5e2181097e1d22d9b3e381ca6d693e5188.tar.xz
linux-9c434f5e2181097e1d22d9b3e381ca6d693e5188.zip
[PATCH] Spidernet: remove ETH_ZLEN check in earlier patch
In an earlier patch, code was added to pad packets that were less that ETH_ZLEN (60) bytes using the skb_pad function. This has caused hangs when accessing certain NFS mounted file systems. This patch removes the check and solves the NFS problem. The driver, with this patch, has been tested extensively. Please apply. Signed-off-by: James K Lewis <jklewis@us.ibm.com> Cc: Stephen Hemminger <shemminger@osdl.org> Cc: Jeff Garzik <jgarzik@pobox.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/spider_net.c18
-rw-r--r--drivers/net/spider_net.h2
2 files changed, 6 insertions, 14 deletions
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
index 418138dd6c68..9dd282346e1c 100644
--- a/drivers/net/spider_net.c
+++ b/drivers/net/spider_net.c
@@ -644,20 +644,12 @@ spider_net_prepare_tx_descr(struct spider_net_card *card,
struct spider_net_descr *descr;
dma_addr_t buf;
unsigned long flags;
- int length;
- length = skb->len;
- if (length < ETH_ZLEN) {
- if (skb_pad(skb, ETH_ZLEN-length))
- return 0;
- length = ETH_ZLEN;
- }
-
- buf = pci_map_single(card->pdev, skb->data, length, PCI_DMA_TODEVICE);
+ buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
if (pci_dma_mapping_error(buf)) {
if (netif_msg_tx_err(card) && net_ratelimit())
pr_err("could not iommu-map packet (%p, %i). "
- "Dropping packet\n", skb->data, length);
+ "Dropping packet\n", skb->data, skb->len);
card->spider_stats.tx_iommu_map_error++;
return -ENOMEM;
}
@@ -667,7 +659,7 @@ spider_net_prepare_tx_descr(struct spider_net_card *card,
card->tx_chain.head = descr->next;
descr->buf_addr = buf;
- descr->buf_size = length;
+ descr->buf_size = skb->len;
descr->next_descr_addr = 0;
descr->skb = skb;
descr->data_status = 0;
@@ -802,8 +794,8 @@ spider_net_release_tx_chain(struct spider_net_card *card, int brutal)
/* unmap the skb */
if (skb) {
- int len = skb->len < ETH_ZLEN ? ETH_ZLEN : skb->len;
- pci_unmap_single(card->pdev, buf_addr, len, PCI_DMA_TODEVICE);
+ pci_unmap_single(card->pdev, buf_addr, skb->len,
+ PCI_DMA_TODEVICE);
dev_kfree_skb(skb);
}
}
diff --git a/drivers/net/spider_net.h b/drivers/net/spider_net.h
index b3b46119b424..cb85cbb3d92d 100644
--- a/drivers/net/spider_net.h
+++ b/drivers/net/spider_net.h
@@ -24,7 +24,7 @@
#ifndef _SPIDER_NET_H
#define _SPIDER_NET_H
-#define VERSION "1.1 A"
+#define VERSION "1.5 A"
#include "sungem_phy.h"