if(err == -ENOSPC) {  schedule_work(&nic->tx_timeout_task); } 
static inline int e100_exec_cb(struct nic *nic, struct sk_buff *skb,	void (*cb_prepare)(struct nic *, struct cb *, struct sk_buff *)){	struct cb *cb;	unsigned long flags;	int err = 0;	spin_lock_irqsave(&nic->cb_lock, flags);	if(unlikely(!nic->cbs_avail)) {		err = -ENOMEM;		goto err_unlock;	}	cb = nic->cb_to_use;	nic->cb_to_use = cb->next;	nic->cbs_avail--;	cb->skb = skb;	if(unlikely(!nic->cbs_avail))		err = -ENOSPC;	cb_prepare(nic, cb, skb);	/* Order is important otherwise we'll be in a race with h/w:	 * set S-bit in current first, then clear S-bit in previous. */	cb->command |= cpu_to_le16(cb_s);	wmb();	cb->prev->command &= cpu_to_le16(~cb_s);	while(nic->cb_to_send != nic->cb_to_use) {		if(unlikely(e100_exec_cmd(nic, nic->cuc_cmd,			nic->cb_to_send->dma_addr))) {			/* Ok, here's where things get sticky.  It's			 * possible that we can't schedule the command			 * because the controller is too busy, so			 * let's just queue the command and try again			 * when another command is scheduled. */			break;		} else {			nic->cuc_cmd = cuc_resume;			nic->cb_to_send = nic->cb_to_send->next;		}	}err_unlock:	spin_unlock_irqrestore(&nic->cb_lock, flags);	return err;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/962082b6df11fe8cabafd2971b07c914cd52ee2a/e100.c/clean/drivers/net/e100.c