--- ns83820.c	Fri Aug 31 20:30:09 2001
+++ /tmp/ns83820.c	Tue Sep  4 19:04:42 2001
@@ -1,4 +1,4 @@
-#define VERSION "0.10"
+#define VERSION "0.10b"
 /* ns83820.c by Benjamin LaHaise <bcrl@redhat.com>
  *
  * $Revision: 1.34 $
@@ -456,10 +456,8 @@
 	next_empty = dev->rx_info.next_empty;
 
 	/* don't overrun last rx marker */
-	if (nr_rx_empty(dev) <= 2) {
-		kfree_skb(skb);
+	if (nr_rx_empty(dev) <= 2)
 		return 1;
-	}
 
 #if 0
 	dprintk("next_empty[%d] nr_used[%d] next_rx[%d]\n",
@@ -491,11 +489,11 @@
 	long flags = 0;
 
 	dprintk("rx_refill(%p)\n", dev);
-	if (gfp == GFP_ATOMIC)
-		spin_lock_irqsave(&dev->rx_info.lock, flags);
 	for (i=0; i<NR_RX_DESC; i++) {
 		struct sk_buff *skb;
 		long res;
+		if (nr_rx_empty(dev) <= 2)
+			break;
 		skb = __dev_alloc_skb(RX_BUF_SIZE+16, gfp);
 		if (!skb)
 			break;
@@ -506,18 +504,15 @@
 		skb_reserve(skb, res);
 
 		skb->dev = &dev->net_dev;
-		if (gfp != GFP_ATOMIC)
-			spin_lock_irqsave(&dev->rx_info.lock, flags);
+		spin_lock_irqsave(&dev->rx_info.lock, flags);
 		res = ns83820_add_rx_skb(dev, skb);
-		if (gfp != GFP_ATOMIC)
-			spin_unlock_irqrestore(&dev->rx_info.lock, flags);
+		spin_unlock_irqrestore(&dev->rx_info.lock, flags);
 		if (res) {
+			kfree_skb(skb);
 			i = 1;
 			break;
 		}
 	}
-	if (gfp == GFP_ATOMIC)
-		spin_unlock_irqrestore(&dev->rx_info.lock, flags);
 
 	return i ? 0 : -ENOMEM;
 }
