diff -Naur linux-2.4.27.old/drivers/net/natsemi.c linux-2.4.27.new/drivers/net/natsemi.c
--- linux-2.4.27.old/drivers/net/natsemi.c	2004-08-19 01:35:13.000000000 +0000
+++ linux-2.4.27.new/drivers/net/natsemi.c	2004-10-08 22:18:09.000000000 +0000
@@ -165,6 +165,7 @@
 #include <linux/rtnetlink.h>
 #include <linux/mii.h>
 #include <linux/crc32.h>
+#include <linux/if_vlan.h>
 #include <asm/processor.h>	/* Processor type for cache alignment. */
 #include <asm/bitops.h>
 #include <asm/io.h>
@@ -639,7 +640,7 @@
 	DescRxDest=0x01800000, DescRxLong=0x00400000,
 	DescRxRunt=0x00200000, DescRxInvalid=0x00100000,
 	DescRxCRC=0x00080000, DescRxAlign=0x00040000,
-	DescRxLoop=0x00020000, DesRxColl=0x00010000,
+	DescRxLoop=0x00020000, DescRxColl=0x00010000,
 };
 
 struct netdev_private {
@@ -1305,7 +1306,7 @@
 	/* DRTH 0x10: start copying to memory if 128 bytes are in the fifo
 	 * MXDMA 0: up to 256 byte bursts
 	 */
-	np->rx_config = RxMxdma_256 | 0x20;
+	np->rx_config = RxMxdma_256 | RxAcceptLong | 0x20;
 	writel(np->rx_config, ioaddr + RxConfig);
 
 	/* Disable PME:
@@ -1517,7 +1518,7 @@
 	/* 2) RX ring */
 	np->dirty_rx = 0;
 	np->cur_rx = RX_RING_SIZE;
-	np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
+	np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ + VLAN_HLEN : dev->mtu + 36 + VLAN_HLEN);
 	np->oom = 0;
 	np->rx_head_desc = &np->rx_ring[0];
 

