Commit a816ee81 authored by Matthew Dharm's avatar Matthew Dharm Committed by Greg Kroah-Hartman

[PATCH] USB: fix a thread-exit problem at module unload

This patch fixes a thread-exit problem when the usb-storage module is
unloaded with a preemptable kernel.  Please refer to the comments in the
code for more detail.
parent b2df260f
...@@ -417,10 +417,21 @@ static int usb_stor_control_thread(void * __us) ...@@ -417,10 +417,21 @@ static int usb_stor_control_thread(void * __us)
scsi_unlock(host); scsi_unlock(host);
} /* for (;;) */ } /* for (;;) */
/* notify the exit routine that we're actually exiting now */ /* notify the exit routine that we're actually exiting now
complete(&(us->notify)); *
* complete()/wait_for_completion() is similar to up()/down(),
return 0; * except that complete() is safe in the case where the structure
* is getting deleted in a parallel mode of execution (i.e. just
* after the down() -- that's necessary for the thread-shutdown
* case.
*
* complete_and_exit() goes even further than this -- it is safe in
* the case that the thread of the caller is going away (not just
* the structure) -- this is necessary for the module-remove case.
* This is important in preemption kernels, which transfer the flow
* of execution immediately upon a complete().
*/
complete_and_exit(&(us->notify), 0);
} }
/*********************************************************************** /***********************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment