↑ Collapse Diff ↑
...
 
@@ -275,14 +275,17 @@ static void defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_hea
275 275
 

	
276 276
 
	spin_lock_irqsave(&list->lock, flags);
277 277
 
	__skb_unlink(skb, list);
278 278
 
	spin_unlock(&list->lock);
279 279
 
	spin_lock(&dev->done.lock);
280 280
 
	__skb_queue_tail(&dev->done, skb);
281
 
	if (dev->done.qlen == 1)
281
 
	if (dev->done.qlen == 1) {
282
 
		spin_unlock_irqrestore(&dev->done.lock, flags);
282 283
 
		tasklet_schedule(&dev->bh);
284
 
		return;
285
 
	}
283 286
 
	spin_unlock_irqrestore(&dev->done.lock, flags);
284 287
 
}
285 288
 

	
286 289
 
/* some work can't be done in tasklets, so we use keventd
287 290
 
 *
288 291
 
 * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,