[dm-devel] corruption causing crash in __queue_work

Nikolay Borisov n.borisov at siteground.com
Sat Dec 19 13:34:45 UTC 2015


On Thursday, December 17, 2015, Mike Snitzer <snitzer at redhat.com> wrote:

> On Thu, Dec 17 2015 at 10:50am -0500,
> Tejun Heo <tj at kernel.org <javascript:;>> wrote:
>
> > Hello, Nikolay.
> >
> > On Thu, Dec 17, 2015 at 05:43:12PM +0200, Nikolay Borisov wrote:
> > > Right, but my initial understanding was that when canceling the delayed
> > > work and then issuing flush_workqueue would act the same way as if
> > > cancel_delayed_work_sync is called wrt to this particular delayed
> item, no?
> >
> > Not necessarily.  cancel_delayed_work() cancels whatever is currently
> > pending.  flush_workqueue() flushes whatever is pending and in flight
> > at the time of invocation.  Imagine the following scenario.
> >
> > 1. Work item is running but hasn't requeued itself yet.
> >
> > 2. cancel_delayed_work_sync() doesn't do anything as it's not pending.
>
> Did you mean cancel_delayed_work()?
>
> > 3. flush_workqueue() starts and waits for the running instance.
> >
> > 4. The running instance requeues itself but this isn't included in the
> >    scope of the above flush_workqueue().
> >
> > 5. flush_workqueue() returns when the work item is finished (but it's
> >    still queued).
>
> Hmm, the comment above cancel_delayed_work() is pretty misleading then:
>
>  * Note:
>  * The work callback function may still be running on return, unless
>  * it returns %true and the work doesn't re-arm itself.  Explicitly flush
> or
>  * use cancel_delayed_work_sync() to wait on it.
>
> Given dm-thin.c:pool_postsuspend() does:
>
>         cancel_delayed_work(&pool->waker);
>         cancel_delayed_work(&pool->no_space_timeout);
>         flush_workqueue(pool->wq);
>
> I wouldn't have thought cancel_delayed_work_sync() was needed.
>

Ping as Tejun might have missed this email. I'm also interested in knowing
the logic behind the comment.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20151219/b88de3c1/attachment.htm>


More information about the dm-devel mailing list