 if (kaweth->removed) { /* our device is undergoing disconnection - we bail out */ spin_unlock(&kaweth->device_lock); dev_kfree_skb_irq(skb); return 0; } 
static int kaweth_start_xmit(struct sk_buff *skb, struct net_device *net){	struct kaweth_device *kaweth = netdev_priv(net);	__le16 *private_header;	int res;	spin_lock(&kaweth->device_lock);	if (kaweth->removed) {	/* our device is undergoing disconnection - we bail out */		spin_unlock(&kaweth->device_lock);		dev_kfree_skb_irq(skb);		return 0;	}	kaweth_async_set_rx_mode(kaweth);	netif_stop_queue(net);	/* We now decide whether we can put our special header into the sk_buff */	if (skb_cloned(skb) || skb_headroom(skb) < 2) {		/* no such luck - we make our own */		struct sk_buff *copied_skb;		copied_skb = skb_copy_expand(skb, 2, 0, GFP_ATOMIC);		dev_kfree_skb_irq(skb);		skb = copied_skb;		if (!copied_skb) {			kaweth->stats.tx_errors++;			netif_start_queue(net);			spin_unlock(&kaweth->device_lock);			return 0;		}	}	private_header = (__le16 *)__skb_push(skb, 2);	*private_header = cpu_to_le16(skb->len-2);	kaweth->tx_skb = skb;	usb_fill_bulk_urb(kaweth->tx_urb,		      kaweth->dev,		      usb_sndbulkpipe(kaweth->dev, 2),		      private_header,		      skb->len,		      kaweth_usb_transmit_complete,		      kaweth);	kaweth->end = 0;	if((res = usb_submit_urb(kaweth->tx_urb, GFP_ATOMIC)))	{		kaweth_warn("kaweth failed tx_urb %d", res);		kaweth->stats.tx_errors++;		netif_start_queue(net);		dev_kfree_skb_irq(skb);	}	else	{		kaweth->stats.tx_packets++;		kaweth->stats.tx_bytes += skb->len;		net->trans_start = jiffies;	}	spin_unlock(&kaweth->device_lock);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d23b536bb715673ca0ccbdaac2b6ce2c001d06e9/kaweth.c/clean/drivers/usb/net/kaweth.c