Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Oleg Nesterov
Date: Monday, May 7, 2007 - 3:34 am

On 05/07, Jarek Poplawski wrote:

No, this is basically the same patch + re-check-cwq-after-lock,
the latter is mostly needed to prevent racing with CPU-hotplug.


The slowdown is small, changelog mentions it just to be "fair".

I am not happy with the complication this patch adds, mostly
I hate this smb_wmb() in insert_work(). I have an idea how to
remove it later, but this needs another patch not related to
workqueue.c.


It would be very strange to do wait_on_work() only in case
when del_timer() failed. This way we still need to do
cancel_work_sync() after cancel_rearming_delayed_work(),
but only when del_timer() failed, ugly. Note also that
wait_on_work() does not sleep if work->func() is not running.

Also, consider this callback:

	void work_handler(struct work_struct *w)
	{
		struct delayed_work dw = container_of(...);

		queue_delayed_work(dw, delay);

		// <------------- cancel_rearming_delayed_work()

		cancel_delayed_work(dw);
		queue_delayed_work(dw, another_delay);
	}

Yes, this is strange and ugly. But correct! The current version
(before this patch) can't cancel this delayed_work. The new
implementation works correctly. So I think it is far better to
do wait_on_work() unconditionally.


Yes, please!

Oleg.

-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Thu May 3, 1:42 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Fri May 4, 10:09 am)
[PATCH] make-cancel_rearming_delayed_work-reliable-fix, Oleg Nesterov, (Sat May 5, 2:32 pm)
Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix, Jarek Poplawski, (Mon May 7, 3:31 am)
Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix, Oleg Nesterov, (Mon May 7, 3:34 am)
Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix, Anton Vorontsov, (Mon May 7, 4:55 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 8, 12:15 am)
Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix, Jarek Poplawski, (Tue May 8, 2:16 am)
Re: [PATCH] make-cancel_rearming_delayed_work-reliable-fix, Jarek Poplawski, (Tue May 8, 6:07 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 8, 6:56 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 8, 7:12 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 8, 7:32 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Fri May 11, 6:47 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Fri May 11, 7:53 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Sun May 13, 12:27 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Sun May 13, 2:25 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Mon May 14, 12:44 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 15, 6:09 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Tue May 15, 3:00 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Tue May 15, 3:08 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Tue May 15, 10:21 pm)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Oleg Nesterov, (Wed May 16, 11:52 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Fri May 18, 12:35 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Fri May 18, 1:13 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Mon May 21, 12:00 am)
Re: [PATCH] make cancel_rearming_delayed_work() reliable, Jarek Poplawski, (Mon May 21, 3:10 am)