[dm-devel] [PATCH 3/5] dm-multipath: remove process_queued_ios()
Junichi Nomura
j-nomura at ce.jp.nec.com
Fri Jan 31 09:43:00 UTC 2014
On 01/31/14 18:10, Hannes Reinecke wrote:
> @@ -1217,9 +1185,21 @@ 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 (!pg_init_delay) {
> + m->pg_init_delay_retry = 0;
> + /*
> + * Add a small delay to move the
> + * activation to a workqueue
> + */
> + pg_init_delay = HZ / 50;
> + } else
> + m->pg_init_delay_retry = 1;
> + if (queue_delayed_work(kmpath_handlerd, &pgpath->activate_path,
> + pg_init_delay))
> + m->pg_init_in_progress++;
> + goto out;
> + }
This code is called when pg_init_progress becomes 0,
that means it is possible that multiple pgpaths have requested retries.
So you have to activate_path for all non-active pgpath in this pg,
like __pg_init_all_paths() does in the current code.
Also, you aren't clearing pg_init_required here.
I think it causes extra pg_init unnecessarily.
What do you think if we just call __pg_init_all_paths() here
instead of open coding it?
--
Jun'ichi Nomura, NEC Corporation
More information about the dm-devel
mailing list