On Sat, Apr 30, 2011 at 04:56:02PM +0200, Tejun Heo wrote: > SCSI is the only subsystem which uses execute_in_process_context() and > its use is racy against module unload. ie. the reap work is not > properly flushed and could still be running after the scsi module is > unloaded. > > Although execute_in_process_context() can be more efficient when the > caller already has a context, in this case, the call paths are quite > cold and the difference is practically meaningless. With commit > c8efcc25 (workqueue: allow chained queueing during destruction), the > race condition can easily be fixed by using a dedicated workqueue and > destroying it on module unload. > > Create and use scsi_wq instead of execute_in_process_context(). > > * scsi_device->ew is replaced with release_work. scsi_target->ew is > replaced with reap_work. > > * Both works are initialized with the respective release/reap function > during device/target init. scsi_target_reap_usercontext() is moved > upwards to avoid needing forward declaration. > > * scsi_alloc_target() now explicitly flushes the reap_work of the > found dying target before putting it instead of depending on > flush_scheduled_work(). > > For more info on the issues, please read the following threads. > > http://thread.gmane.org/gmane.linux.scsi/62923 > http://thread.gmane.org/gmane.linux.kernel/1124773 > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Steven Whitehouse <swhiteho@xxxxxxxxxx> James, ping? -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html