On 02/04/2014 12:26 PM, Junichi Nomura wrote: > On 02/04/14 19:54, Hannes Reinecke wrote: >> We only need to take care to add a small delay when calling >> __pg_init_all_paths() to move processing off to a workqueue; otherwise >> pg_init_done() might end up calling scsi_dh_activate() directly, which >> might use non-atomic memory allocations or issue I/O. > > Hi Hannes, > > could you tell me how "might end up calling scsi_dh_active()" happens? > > queue_delayed_work() > queue_delayed_work_on() > __queue_delayed_work() > if (!delay) > __queue_work() > get_work_pool() > insert_work() > set_work_pwq() > get_pwq() > if (__need_more_worker()) > wake_up_worker() > > queue_work() doesn't execute the work itself. > > What am I missing? > As mentioned, I stumbled across the same issue when developing the asynchronous SCSI aborts. I'll see to have it recreated with this patchset. Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage hare@xxxxxxx +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg) -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel