Re: [PATCH net-next-2.6] bnx2: remove cancel_work_sync() from remove_one

From: Tejun Heo
Date: Wed Dec 15 2010 - 08:52:42 EST


On 12/14/2010 06:48 PM, Michael Chan wrote:
>
> On Tue, 2010-12-14 at 08:09 -0800, Tejun Heo wrote:
>> Michael pointed out that bnx2_close() already cancels bp->reset_task
>> and thus it is guaranteed to be idle when bnx2_remove_one() is called.
>> Remove the unnecessary cancel_work_sync() in remove_one.
>>
>> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
>> Cc: Michael Chan <mchan@xxxxxxxxxxxx>
>
> Acked-by: Michael Chan <mchan@xxxxxxxxxxxx>

After looking through the code, I don't think this is necessarily
correct. ->ndo_close() doesn't guarantee that the watchdog timer has
finished running (the timer is deleted with del_timer() not
del_timer_sync()). ie. the watchdog timer could still be running
after ->ndo_close() and may schedule reset_task. If remove_one
doesn't flush the task, it may still be running when remove_one() is
called.

David, am I missing something? Wouldn't it cleaner to guarantee that
->ndo_close() is called with the guarantee that the watchdog timer is
not running anymore?

--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/