2020-11-11 09:16:51

by Zhang, Qiang

[permalink] [raw]
Subject: [PATCH] kthread_worker: Add flush delayed work func

From: Zqiang <[email protected]>

Add 'kthread_flush_delayed_work' func, the principle of
this func is wait for a dwork to finish executing the
last queueing.

Signed-off-by: Zqiang <[email protected]>
---
kernel/kthread.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

diff --git a/kernel/kthread.c b/kernel/kthread.c
index a5eceecd4513..1afe399ccd02 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -1045,6 +1045,30 @@ void kthread_flush_work(struct kthread_work *work)
}
EXPORT_SYMBOL_GPL(kthread_flush_work);

+/*
+ * kthread_flush_delayed_work - flush a kthread_delayed_work
+ * @dwork: dwork to flush
+ *
+ * wait for a dwork to finish executing the last queueing
+ */
+void kthread_flush_delayed_work(struct kthread_delayed_work *dwork)
+{
+ struct kthread_work *work = &dwork->work;
+ struct kthread_worker *worker = work->worker;
+ unsigned long flags;
+
+ if (del_timer_sync(&dwork->timer)) {
+ raw_spin_lock_irqsave(&worker->lock, flags);
+ list_del_init(&work->node);
+ if (!work->canceling)
+ kthread_insert_work(worker, work, &worker->work_list);
+
+ raw_spin_unlock_irqrestore(&worker->lock, flags);
+ }
+ kthread_flush_work(work);
+}
+EXPORT_SYMBOL_GPL(kthread_flush_delayed_work);
+
/*
* This function removes the work from the worker queue. Also it makes sure
* that it won't get queued later via the delayed work's timer.
--
2.17.1


2020-11-13 00:04:28

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] kthread_worker: Add flush delayed work func

On Wed, 11 Nov 2020 17:13:55 +0800 [email protected] wrote:

> Add 'kthread_flush_delayed_work' func, the principle of
> this func is wait for a dwork to finish executing the
> last queueing.

We'd like to see some code which actually uses this new function
please. Either in this patch or as one or more followup patches.

btw, we call it "function", not "func". But neither is really needed -
just use () to identify a function. ie:

: Add kthread_flush_delayed_work(). The principle of this is to wait for
: a dwork to finish executing the last queueing.

2020-11-13 09:04:13

by Zhang, Qiang

[permalink] [raw]
Subject: 回复: [PATCH] kthread_worker: Add flush delay ed work func



________________________________________
??????: Andrew Morton <[email protected]>
????ʱ??: 2020??11??13?? 8:01
?ռ???: Zhang, Qiang
????: [email protected]; [email protected]; [email protected]; [email protected]
????: Re: [PATCH] kthread_worker: Add flush delayed work func

[Please note this e-mail is from an EXTERNAL e-mail address]

On Wed, 11 Nov 2020 17:13:55 +0800 [email protected] wrote:

> Add 'kthread_flush_delayed_work' func, the principle of
> this func is wait for a dwork to finish executing the
> last queueing.
>
>We'd like to see some code which actually uses this new function
>please. Either in this patch or as one or more followup patches.
>
>btw, we call it "function", not "func". But neither is really needed -
>just use () to identify a function. ie:

>: Add kthread_flush_delayed_work(). The principle of this is to wait for
>: a dwork to finish executing the last queueing.

I don't see it being used in the kernel code so far, and I'm not sure if it's going to be used in subsequent scenarios (it like flush_delayed_work in workqueue )or whether it's currently using "kthread_work" some code needs it.

Thanks

Qiang

2020-11-13 10:27:03

by Petr Mladek

[permalink] [raw]
Subject: Re: 回复 : [PATCH] kthread_worker: Add flush delayed work func

On Fri 2020-11-13 08:59:37, Zhang, Qiang wrote:
>
>
> ________________________________________
> 发件人: Andrew Morton <[email protected]>
> 发送时间: 2020年11月13日 8:01
> 收件人: Zhang, Qiang
> 抄送: [email protected]; [email protected]; [email protected]; [email protected]
> 主题: Re: [PATCH] kthread_worker: Add flush delayed work func
>
> [Please note this e-mail is from an EXTERNAL e-mail address]
>
> On Wed, 11 Nov 2020 17:13:55 +0800 [email protected] wrote:
>
> > Add 'kthread_flush_delayed_work' func, the principle of
> > this func is wait for a dwork to finish executing the
> > last queueing.
> >
> >We'd like to see some code which actually uses this new function
> >please. Either in this patch or as one or more followup patches.
> >
> >btw, we call it "function", not "func". But neither is really needed -
> >just use () to identify a function. ie:
>
> >: Add kthread_flush_delayed_work(). The principle of this is to wait for
> >: a dwork to finish executing the last queueing.
>
> I don't see it being used in the kernel code so far, and I'm not sure if it's going to be used in subsequent scenarios (it like flush_delayed_work in workqueue )or whether it's currently using "kthread_work" some code needs it.

I agree with Andrew. It does not make sense to add/maintain new API
when it is not going to be used.

The kthread_worker API is used only when the kthread needs some special
scheduling policy or priority. There always will be only few users
in compare with the workqueues API. It is possible that this function
will never be necessary.

Best Regards,
Petr

2020-11-16 16:28:45

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] kthread_worker: Add flush delayed work func

On Wed, Nov 11, 2020 at 05:13:55PM +0800, [email protected] wrote:
> From: Zqiang <[email protected]>
>
> Add 'kthread_flush_delayed_work' func, the principle of
> this func is wait for a dwork to finish executing the
> last queueing.

Who is going to use it? And why? Please document this and resend it
together with the series adding the user(s).