[dm-devel] [PATCH 4/6] dm-multipath: remove process_queued_ios()
Hannes Reinecke
hare at suse.de
Mon Feb 3 12:57:54 UTC 2014
On 02/03/2014 01:39 PM, Junichi Nomura wrote:
> On 02/03/14 21:18, Hannes Reinecke wrote:
>> On 02/03/2014 01:08 PM, Junichi Nomura wrote:
>>> On 02/03/14 17:18, 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;
>>>> pg_init_done() is run from an interrupt context and needs to
>>>> complete as fast as possible.
>>> ...
>>>> @@ -1217,9 +1185,11 @@ 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 {
>>>> + m->pg_init_delay_retry = delay_retry;
>>>> + __pg_init_all_paths(m, 50/HZ);
>>>> + goto out;
>>>> + }
>>>>
>>>
>>> I forgot to comment on this.
>>> Adding delay to queue_work() doesn't make it fast.
>>> So I couldn't see why this "50/HZ" delay has to be added
>>> and where this value comes.
>>>
>> Well, it wasn't probably the best choice of words.
>>
>> Thing is, without a delay the workqueue item will be executed
>> directly (cf __queue_delayed_work()).
>> But pg_init_done() is run from an interrupt context, and as such any
>> memory allocations have to be atomic.
>> So if we were to call queue_delayed_work() without any delay
>> we will end up calling scsi_dh_activate from an interrupt context,
>> too, but there we most definitely do _not_ have only atomic allocations.
>> Hence the delay.
>
> Work is executed in the worker context (in this case by kmpath_handlerd).
> Isn't it?
>
Yes, but without the delay we'd be scheduling during pg_init_done(),
ie within an interrupt context.
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare at suse.de +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)
More information about the dm-devel
mailing list