On 02/04/14 05:28, Mike Snitzer wrote: > @@ -1216,9 +1185,12 @@ static void pg_init_done(void *data, int errors) > > if (!m->pg_init_required) > m->queue_io = 0; > - > - m->pg_init_delay_retry = delay_retry; > - queue_work(kmultipathd, &m->process_queued_ios); > + else if (m->current_pg) { > + m->pg_init_delay_retry = delay_retry; > + /* Use a small delay to force the use of workqueue context */ > + __pg_init_all_paths(m, 50/HZ); > + goto out; > + } I think the patch is still broken. When "m->pg_init_required && !m->current_pg", it ends up with !pg_ready() and no pg_init running. So map_io() will not be called and IO will stall. What do you think about my suggestion here: https://www.redhat.com/archives/dm-devel/2014-February/msg00013.html Also it's not yet clear why the second parameter of __pg_init_all_paths() is needed. (At least, "50/HZ" is typo or something.) > @@ -1591,8 +1563,17 @@ static int multipath_ioctl(struct dm_target *ti, unsigned int cmd, ... > + if (m->current_pg && m->pg_init_required) > + __pg_init_all_paths(m, 0); > + spin_unlock_irqrestore(&m->lock, flags); > + dm_table_run_md_queue_async(m->ti->table); > + } What happens if "!m->current_pg && m->pg_init_required"? -- Jun'ichi Nomura, NEC Corporation -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel