diff -ur linux-2.4.6.uc0pre0.orig/net/core/skbuff.c linux-2.4.6.uc0pre0.actiontec/net/core/skbuff.c
--- linux-2.4.6.uc0pre0.orig/net/core/skbuff.c	2001-04-12 21:11:39.000000000 +0200
+++ linux-2.4.6.uc0pre0.actiontec/net/core/skbuff.c	2004-12-06 19:35:49.000000000 +0100
@@ -20,6 +20,9 @@
  *		Alan Cox	:	skb_copy copy arp field
  *		Andi Kleen	:	slabified it.
  *
+ *    Ted Ma <mated@lineo.com>	:	prevent printk storms
+ * Copyright (c) 2001 Lineo, Inc./Lineo Canada Corp. (www.lineo.com)
+ *
  *	NOTE:
  *		The __skb_ routines should be called with interrupts 
  *	disabled, or you better be *real* sure that the operation is atomic 
@@ -310,6 +313,11 @@
 
 void __kfree_skb(struct sk_buff *skb)
 {
+	// Added code to stop printk from causing avalanche ...MaTed ---
+#define JIFFIE_WAIT		25	/* 0.25 S */
+    static long int printkJiffiesStart = 0;
+	static long int printkReturnAddr = 0;
+
 	if (skb->list) {
 	 	printk(KERN_WARNING "Warning: kfree_skb passed an skb still "
 		       "on a list (from %p).\n", NET_CALLER(skb));
@@ -319,8 +327,13 @@
 	dst_release(skb->dst);
 	if(skb->destructor) {
 		if (in_irq()) {
+		  if (jiffies > printkJiffiesStart 
+			  || printkReturnAddr != (long int) NET_CALLER(skb)) {
 			printk(KERN_WARNING "Warning: kfree_skb on hard IRQ %p\n",
-				NET_CALLER(skb));
+				   NET_CALLER(skb));
+			printkReturnAddr = (long int) NET_CALLER( skb);
+			printkJiffiesStart = jiffies + JIFFIE_WAIT;
+		  }
 		}
 		skb->destructor(skb);
 	}

