From: Jarek Poplawski <jarkao2@o2.pl>
To: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org, David Howells <dhowells@redhat.com>
Subject: Re: Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work
Date: Fri, 27 Apr 2007 07:26:18 +0200 [thread overview]
Message-ID: <20070427052618.GA997@ff.dom.local> (raw)
In-Reply-To: <20070426163406.GA1933@tv-sign.ru>
On Thu, Apr 26, 2007 at 08:34:06PM +0400, Oleg Nesterov wrote:
> On 04/26, Jarek Poplawski wrote:
> >
> > > void cancel_rearming_delayed_work(struct delayed_work *dwork)
> > > {
> > > struct work_struct *work = &dwork->work;
> > > struct cpu_workqueue_struct *cwq = get_wq_data(work);
> > > int done;
> >
> > I don't understand, why you think cwq cannot be NULL here.
>
> sure it can, this is just a template.
>
> > >
> > > do {
> > > done = 1;
> > > spin_lock_irq(&cwq->lock);
> > >
> > > if (!list_empty(&work->entry))
> > > list_del_init(&work->entry);
> >
> > BTW, isn't needs_a_good_name needles after this and after del_timer positive?
>
> no, we still need it. work->func() may be running on another CPU as well.
>
> >
> > > else if (test_and_set_bit(WORK_STRUCT_PENDING, work_data_bits(work)))
> > > done = del_timer(&dwork->timer)
> >
> > If this runs while a work function is fired in run_workqueue,
> > it sets _PENDING bit, but if the work skips rearming, we have probably
> > endless loop, again.
>
> No, if the work skips rearming (or didn't yet), we set WORK_STRUCT_PENDING
> successfully.
Sorry! Should be:
"If this runs while a work function is fired in run_workqueue,
it sets _PENDING bit, but if the work skips rearming, I have probably
endless loop, again."
>
> > It is something alike to the current
> > way, with some added measures: you try to shoot a work on the run,
> > while queued or timer_pending, plus the _PENDING flag set, so it seems,
> > there is some risk of longer than planed looping.
>
> Sorry, can't understand. done == 0 means that the queueing in progress,
> this work should be placed on cwq->worklist very soon, most probably
> right after we drop cwq->lock.
I think, theoretically, probably, maybe, there is possible some strange
case, this function gets spin_lock only when: list_empty(&work->entry) == 1
&& _PENDING == 1 && del_timer(&dwork->timer) == 0.
>
> > I have to look at this more, at home and, if something new, I'll write
> > tomorrow. So, the good news, is you should have enough sleep this time!
>
> Thanks for review!
OK. Here is the review:
It looks great!!! I cannot believe, it could be so "easy"!
Regards,
Jarek P.
PS: probably unusable, but for my own satisfaction:
Acked-by: Jarek Poplawski <jarkao2@o2.pl
next prev parent reply other threads:[~2007-04-27 5:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070419002548.72689f0e.akpm@linux-foundation.org>
[not found] ` <20070419102122.GA93@tv-sign.ru>
2007-04-20 9:22 ` Fw: [PATCH -mm] workqueue: debug possible endless loop in cancel_rearming_delayed_work Jarek Poplawski
2007-04-20 17:08 ` Oleg Nesterov
2007-04-23 9:00 ` Jarek Poplawski
2007-04-23 16:33 ` Oleg Nesterov
2007-04-24 11:53 ` Jarek Poplawski
2007-04-24 18:55 ` Oleg Nesterov
2007-04-25 6:12 ` Jarek Poplawski
2007-04-25 12:20 ` Jarek Poplawski
2007-04-25 12:28 ` Jarek Poplawski
2007-04-25 12:47 ` Oleg Nesterov
2007-04-25 14:47 ` Oleg Nesterov
2007-04-26 12:59 ` Jarek Poplawski
2007-04-26 16:34 ` Oleg Nesterov
2007-04-27 5:26 ` Jarek Poplawski [this message]
2007-04-27 7:52 ` Oleg Nesterov
2007-04-27 9:03 ` Jarek Poplawski
2007-04-26 13:13 ` Jarek Poplawski
2007-04-26 16:44 ` Oleg Nesterov
2007-04-27 5:52 ` Jarek Poplawski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070427052618.GA997@ff.dom.local \
--to=jarkao2@o2.pl \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=oleg@tv-sign.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.