From 7a2b1a2b3dbd8b669552abf89ef847875552b23d Mon Sep 17 00:00:00 2001 From: Neil Horman Date: Fri, 6 Jul 2012 10:40:05 -0700 Subject: [PATCH] --- yaml --- r: 316821 b: refs/heads/master c: 95fdd5e980e6eea4579c15043f7a9be6ad63012c h: refs/heads/master i: 316819: d50343d59937e94bc42f3c0bd9ed58b853837317 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/fcoe/fcoe.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index a89c2a012f8f..a06996f35d2c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 902a45af5c9fad283a530c3bc71225fa6a8e616a +refs/heads/master: 95fdd5e980e6eea4579c15043f7a9be6ad63012c diff --git a/trunk/drivers/scsi/fcoe/fcoe.c b/trunk/drivers/scsi/fcoe/fcoe.c index 2b065d26a5ae..078d262ac7cc 100644 --- a/trunk/drivers/scsi/fcoe/fcoe.c +++ b/trunk/drivers/scsi/fcoe/fcoe.c @@ -1851,23 +1851,25 @@ static int fcoe_percpu_receive_thread(void *arg) set_user_nice(current, -20); +retry: while (!kthread_should_stop()) { spin_lock_bh(&p->fcoe_rx_list.lock); skb_queue_splice_init(&p->fcoe_rx_list, &tmp); - spin_unlock_bh(&p->fcoe_rx_list.lock); - - while ((skb = __skb_dequeue(&tmp)) != NULL) - fcoe_recv_frame(skb); - spin_lock_bh(&p->fcoe_rx_list.lock); - if (!skb_queue_len(&p->fcoe_rx_list)) { + if (!skb_queue_len(&tmp)) { set_current_state(TASK_INTERRUPTIBLE); spin_unlock_bh(&p->fcoe_rx_list.lock); schedule(); set_current_state(TASK_RUNNING); - } else - spin_unlock_bh(&p->fcoe_rx_list.lock); + goto retry; + } + + spin_unlock_bh(&p->fcoe_rx_list.lock); + + while ((skb = __skb_dequeue(&tmp)) != NULL) + fcoe_recv_frame(skb); + } return 0; }