All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@SteelEye.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Linux Kernel <linux-kernel@vger.kernel.org>, mingo@elte.hu
Subject: Re: [PATCH] add unschedule_delayed_work to the workqueue API
Date: 18 Oct 2004 17:15:41 -0500	[thread overview]
Message-ID: <1098137747.1714.351.camel@mulgrave> (raw)
In-Reply-To: <20041018150217.0fbf714f.akpm@osdl.org>

On Mon, 2004-10-18 at 17:02, Andrew Morton wrote:
> James Bottomley <James.Bottomley@SteelEye.com> wrote:
> >
> > > > OK, found it in the headers, sorry .. it's not synchronous, so it can't
> > > > really be used in most of the cases where we use del_timer_sync().
> > > 
> > > cancel_delayed_work() will tell you whether it successfully cancelled the
> > > timer.  If it didn't, you should run flush_workqueue() to wait on the final
> > > handler.  The combination of the two is synchronous.
> > 
> > Right, but it potentially does too much work for my purposes.
> 
> Are you sure?

I'm positive the potential is there.

> >  I want to
> > cancel the work if it's cancellable or wait for it if it's already
> > executing.  I don't want to have to wait for all the work in the queue
> > just because the timer fired and it got added to the workqueue schedule.
> 
> The probability that the handler is running when you call
> cancel_delayed_work() is surely very low.  And the probability that there
> is more than one thing pending in the queue at that time is also low. 
> Multiplying them both together, then multiplying that by the relative
> expense of the handler makes me say "show me" ;)

OK.  In the current code, domain validation is done from the workqueue
interface.  This can take several seconds per target to complete.  Why
should I have to wait this extra time.  As I move other SCSI daemon
threads to being work queue items, these times rise.

However, now there's a worse problem.  If I want to cancel a piece of
work synchronously, flush_scheduled_work() makes me dependent on the
execution of all the prior pieces of work.  If some of them are related,
like Domain Validation and device unlocking say, I have to now be
extremely careful that the place I cancel and flush from isn't likely to
deadlock with any other work scheduled on the device.  This makes it a
hard to use interface.  By contrast, the proposed patch will *only* wait
if the item of work is currently executing.  This is a (OK reasonably
given the aic del_timer_sync() issues) well understood deadlock
problem---the main point being I now don't have to consider any of the
other work that might be queued.

James



  reply	other threads:[~2004-10-18 22:15 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-18 16:31 [PATCH] add unschedule_delayed_work to the workqueue API James Bottomley
2004-10-18 21:25 ` Andrew Morton
2004-10-18 21:26   ` James Bottomley
2004-10-18 21:29     ` James Bottomley
2004-10-18 21:43       ` Andrew Morton
2004-10-18 21:47         ` James Bottomley
2004-10-18 22:02           ` Andrew Morton
2004-10-18 22:15             ` James Bottomley [this message]
2004-10-18 22:57               ` Andrew Morton
2004-10-18 23:24                 ` James Bottomley

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=1098137747.1714.351.camel@mulgrave \
    --to=james.bottomley@steeleye.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.