[SCSI] bnx2fc: IO completion not processed due to missed wakeup
authorBhanu Gollapudi <bprakash@broadcom.com>
Tue, 22 Mar 2011 01:51:13 +0000 (18:51 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 23 Mar 2011 17:53:06 +0000 (12:53 -0500)
commitfee787129d4d6a5e967a69ea3dea3e38ba556b3d
treeaa81010d8a41fe15eebbca19e7d0e9d970860129
parent2dcb0a61041a003f439bbd38005b6e454c368be0
[SCSI] bnx2fc: IO completion not processed due to missed wakeup

Driver does not detect a new CQE (completion queue entry) if a thread receives
the wakup when it is in TASK_RUNNING state. Fix is to set the state to
TASK_INTERRUPTIBLE while holding the fp_work_lock.

Also, Use __set_current_task() since it is now set inside a spinlock with
synchronization.

Two other related optimizations:

1.  After we exit the while (!kthread_should_stop()) loop, use
__set_current_state() since synchronization is no longer needed.

2.  Remove set_current_state(TASK_RUNNING) after schedule() since it
should always be TASK_RUNNING after schedule().

Reviewed-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/bnx2fc/bnx2fc_fcoe.c