[dm-devel] [PATCH 4/7] dm mpath: remove process_queued_ios()
Junichi Nomura
j-nomura at ce.jp.nec.com
Tue Feb 4 08:55:44 UTC 2014
On 02/04/14 17:18, Hannes Reinecke wrote:
>>> @@ -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.
I think it is possible that __choose_pgpath() being called twice
before pg_init_required is checked.
For example,
multipath_ioctl()
__choose_pgpath()
clear pg_init_required
select a new pg
__switch_pg()
set pg_init_required
map_io()
__choose_pgpath()
clear pg_init_required
select the same pg
(pg_init_required is not set)
...
In this case, pg_init should be submitted to the pg but not.
--
Jun'ichi Nomura, NEC Corporation
More information about the dm-devel
mailing list