Re: [PATCH] workqueue: Implement delayed_work_busy()

From: Tejun Heo
Date: Wed May 24 2017 - 11:12:01 EST


Hello,

On Wed, May 24, 2017 at 01:34:53AM +0200, Alex Naidis wrote:
> This implements a variant of work_busy() for
> delayed work.
>
> CC: linux-kernel@xxxxxxxxxxxxxxx
> Signed-off-by: Alex Naidis <alex.naidis@xxxxxxxxx>
> ---
> include/linux/workqueue.h | 1 +
> kernel/workqueue.c | 9 +++++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
> index c102ef6..32ab046 100644
> --- a/include/linux/workqueue.h
> +++ b/include/linux/workqueue.h
> @@ -467,6 +467,7 @@ extern void workqueue_set_max_active(struct workqueue_struct *wq,
> extern bool current_is_workqueue_rescuer(void);
> extern bool workqueue_congested(int cpu, struct workqueue_struct *wq);
> extern unsigned int work_busy(struct work_struct *work);
> +extern unsigned int delayed_work_busy(struct delayed_work *dwork);
> extern __printf(1, 2) void set_worker_desc(const char *fmt, ...);
> extern void print_worker_info(const char *log_lvl, struct task_struct *task);
> extern void show_workqueue_state(void);
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index c74bf39..658cc2e 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -4224,6 +4224,15 @@ unsigned int work_busy(struct work_struct *work)
> }
> EXPORT_SYMBOL_GPL(work_busy);
>
> +/*
> + * See work_busy()
> + */
> +unsigned int delayed_work_busy(struct delayed_work *dwork)
> +{
> + return work_busy(&dwork->work);
> +}
> +EXPORT_SYMBOL_GPL(delayed_work_busy);

What's the use case? Some of existing work_busy() seem wrong already.
Also, if we need this, let's make it an inline function.

Thanks.

--
tejun