Skip to content

Commit fc4bf75

Browse files
Raghava Aditya Renukuntamartinkpetersen
authored andcommitted
aacraid: Fix for aac_command_thread hang
Typically under error conditions, it is possible for aac_command_thread() to miss the wakeup from kthread_stop() and go back to sleep, causing it to hang aac_shutdown. In the observed scenario, the adapter is not functioning correctly and so aac_fib_send() never completes (or time-outs depending on how it was called). Shortly after aac_command_thread() starts it performs aac_fib_send(SendHostTime) which hangs. When aac_probe_one /aac_get_adapter_info send time outs, kthread_stop is called which breaks the command thread out of it's hang. The code will still go back to sleep in schedule_timeout() without checking kthread_should_stop() so it causes aac_probe_one to hang until the schedule_timeout() which is 30 minutes. Fixed by: Adding another kthread_should_stop() before schedule_timeout() Cc: [email protected] Signed-off-by: Raghava Aditya Renukunta <[email protected]> Reviewed-by: Johannes Thumshirn <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent e4d5c4e commit fc4bf75

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

drivers/scsi/aacraid/commsup.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,10 @@ int aac_command_thread(void *data)
19961996
if (difference <= 0)
19971997
difference = 1;
19981998
set_current_state(TASK_INTERRUPTIBLE);
1999+
2000+
if (kthread_should_stop())
2001+
break;
2002+
19992003
schedule_timeout(difference);
20002004

20012005
if (kthread_should_stop())

0 commit comments

Comments
 (0)