defer_kevent (dev, EVENT_RX_HALT); 
usbnet_defer_kevent (dev, EVENT_RX_HALT); 
static void rx_complete (struct urb *urb, struct pt_regs *regs){	struct sk_buff		*skb = (struct sk_buff *) urb->context;	struct skb_data		*entry = (struct skb_data *) skb->cb;	struct usbnet		*dev = entry->dev;	int			urb_status = urb->status;	skb_put (skb, urb->actual_length);	entry->state = rx_done;	entry->urb = NULL;	switch (urb_status) {	    // success	    case 0:		if (skb->len < dev->net->hard_header_len) {			entry->state = rx_cleanup;			dev->stats.rx_errors++;			dev->stats.rx_length_errors++;			if (netif_msg_rx_err (dev))				devdbg (dev, "rx length %d", skb->len);		}		break;	    // stalls need manual reset. this is rare ... except that	    // when going through USB 2.0 TTs, unplug appears this way.	    // we avoid the highspeed version of the ETIMEOUT/EILSEQ	    // storm, recovering as needed.	    case -EPIPE:		dev->stats.rx_errors++;		defer_kevent (dev, EVENT_RX_HALT);		// FALLTHROUGH	    // software-driven interface shutdown	    case -ECONNRESET:		// async unlink	    case -ESHUTDOWN:		// hardware gone		if (netif_msg_ifdown (dev))			devdbg (dev, "rx shutdown, code %d", urb_status);		goto block;	    // we get controller i/o faults during khubd disconnect() delays.	    // throttle down resubmits, to avoid log floods; just temporarily,	    // so we still recover when the fault isn't a khubd delay.	    case -EPROTO:		// ehci	    case -ETIMEDOUT:		// ohci	    case -EILSEQ:		// uhci		dev->stats.rx_errors++;		if (!timer_pending (&dev->delay)) {			mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);			if (netif_msg_link (dev))				devdbg (dev, "rx throttle %d", urb_status);		}block:		entry->state = rx_cleanup;		entry->urb = urb;		urb = NULL;		break;	    // data overrun ... flush fifo?	    case -EOVERFLOW:		dev->stats.rx_over_errors++;		// FALLTHROUGH	    	    default:		entry->state = rx_cleanup;		dev->stats.rx_errors++;		if (netif_msg_rx_err (dev))			devdbg (dev, "rx status %d", urb_status);		break;	}	defer_bh(dev, skb, &dev->rxq);	if (urb) {		if (netif_running (dev->net)				&& !test_bit (EVENT_RX_HALT, &dev->flags)) {			rx_submit (dev, urb, GFP_ATOMIC);			return;		}		usb_free_urb (urb);	}	if (netif_msg_rx_err (dev))		devdbg (dev, "no read resubmitted");}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/2e55cc7210fef90f88201e860d8767594974574e/usbnet.c/clean/drivers/usb/net/usbnet.c