Hi Ben, 

> On Mar 21, 2018, at 10:58 AM, Ben Hutchings <ben.hutchi...@codethink.co.uk> 
> wrote:
> 
> On Wed, 2018-03-21 at 17:55 +0000, Madhani, Himanshu wrote:
>> Hi Ben, 
>> 
>>> On Mar 21, 2018, at 10:45 AM, Ben Hutchings <ben.hutchi...@codethink.co.uk> 
>>> wrote:
>>> 
>>> On Wed, 2018-03-21 at 17:17 +0000, Madhani, Himanshu wrote:
>>>> Hi Ben, 
>>>> 
>>>>> On Mar 20, 2018, at 2:36 PM, Ben Hutchings 
>>>>> <ben.hutchi...@codethink.co.uk> wrote:
>>>>> 
>>>>> qla2x00_init_timer() calls add_timer() on the iocb timeout timer,
>>>>> which means the timeout function pointer and any data that the
>>>>> function depends on must be initialised beforehand.
>>>>> 
>>>>> Move this initialisation before each call to qla2x00_init_timer().  In
>>>>> some cases qla2x00_init_timer() initialises a completion structure
>>>>> needed by the timeout function, so move the call to add_timer() after
>>>>> that.
>>> 
>>> [...]
>>>> What motivated this patch? are you debugging any crash which was
>>>> helped by moving code around? 
>>> 
>>> I saw the recent fix that added a call to del_timer(), noticed the lack
>>> of synchronisation and then kept looking further.
>>> 
>>>> What I see from this patch is that its moving iocb.cmd.timeout field
>>>> before qla2x00_init_timer(),
>>>> which are completely different from each other. 
>>> 
>>> How are they "completely different"?  qla2x00_init_timer() starts a
>>> timer that will call qla2x00_sp_timeout(), which in turn uses the
>>> iocb_cmd.timeout function pointer.  We should not assume that any
>>> initialisation code after the call to add_timer() will run before the
>>> timer expires, since the scheduler might run other tasks for the whole
>>> time.  It's unlikely but not impossible.
>>> 
>> 
>> I see. I used “completely different” due to the lack of better wording. 
>> 
>> I wanted to get context and understand if there was any issue that would
>> have helped with these changes. 
>> 
>> your explanation does help and I agree that there is window where timer() 
>> will 
>> pop before timeout is initialized. 
>> 
>> Let me put this patch in our test cycle for couple days and will respond on 
>> this one
> 
> Thanks.
> 

Just to update, we are still going thru review and testing and will take some 
extra cycle to conclude. 
I will update as soon as we are able to reach conclusion.

> Ben.
> 
> -- 
> Ben Hutchings
> Software Developer, Codethink Ltd.

Thanks,
- Himanshu

Reply via email to