On 02/04/2014 04:24 AM, Junichi Nomura wrote: > 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 > Sigh. pg_init_required again... > 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"? > >From the current logic it means that no valid pg was found, so calling pg_init would be pointless. We're calling __choose_pgpath() before that, so if that returns with current_pg == NULL all paths are down, and calling pg_init would be pointless. But I think I see to have pg_init_required handling cleared up; I'll be doing a patch to unset it at the start of __choose_pgpath(), this we we can be sure that it'll be set correctly. 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