In one spot (usbatm_cancel_send) we were calling dev_kfree_skb with irqs disabled. This mistake is just too easy to make, so systematically use dev_kfree_skb_any rather than dev_kfree_skb.
Signed-off-by: Duncan Sands <[EMAIL PROTECTED]>
Index: Linux/drivers/usb/atm/usbatm.c =================================================================== --- Linux.orig/drivers/usb/atm/usbatm.c 2006-01-13 08:59:16.000000000 +0100 +++ Linux/drivers/usb/atm/usbatm.c 2006-01-13 09:00:06.000000000 +0100 @@ -72,6 +72,7 @@ #include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> +#include <linux/netdevice.h> #include <linux/proc_fs.h> #include <linux/sched.h> #include <linux/signal.h> @@ -199,7 +200,7 @@ if (vcc->pop) vcc->pop(vcc, skb); else - dev_kfree_skb(skb); + dev_kfree_skb_any(skb); } @@ -397,7 +398,7 @@ if (!atm_charge(vcc, skb->truesize)) { atm_rldbg(instance, "%s: failed atm_charge (skb->truesize: %u)!\n", __func__, skb->truesize); - dev_kfree_skb(skb); + dev_kfree_skb_any(skb); goto out; /* atm_charge increments rx_drop */ }