wait_event_idle ?

workers and rcu threads use TASK_IDLE state.

On Fri, Jun 5, 2026 at 9:47 PM Alexey Kuznetsov <[email protected]> wrote:
>
> Nack!
>
> This is not a correct solution. The task is still accounted as
> contributor to load avarage
> which is inacceptable.
>
> Look how other kthreads do it. Ancient mechanism used
> TASK_INTERUPTIBLE and blocked signals or cleared them.
> Also we had to handle freeze. Generally it was chumbersome. What's
> about modern state: I still did not figure this out.
>
>
>
> On Fri, Jun 5, 2026 at 5:26 PM Liu Kui <[email protected]> wrote:
> >
> > The indefinite wait_event() makes the watcher in TASK_UNINTERRUPTIBLE,
> > so a long-lived watched process triggers khungtaskd:
> >
> >   INFO: task krpc_watcher:225326 blocked for more than 1228 seconds.
> >
> > Use wait_event_timeout() with a 60s period in a while-loop so the
> > task periodically reschedules and the warning goes away.
> >
> > Signed-off-by: Liu Kui <[email protected]>
> > ---
> >  fs/fuse/kio/pcs/pcs_krpc.c | 14 ++++++++++++--
> >  1 file changed, 12 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/fuse/kio/pcs/pcs_krpc.c b/fs/fuse/kio/pcs/pcs_krpc.c
> > index 7d5a9619276d..03ae995eaf55 100644
> > --- a/fs/fuse/kio/pcs/pcs_krpc.c
> > +++ b/fs/fuse/kio/pcs/pcs_krpc.c
> > @@ -665,12 +665,22 @@ static bool process_has_exited(struct pid *pid)
> >         return exited;
> >  }
> >
> > +static inline bool krpc_watcher_should_stop(struct pid *watched_pid)
> > +{
> > +       return process_has_exited(watched_pid) || kthread_should_stop();
> > +}
> > +
> >  static int krpc_watcher_fn(void *data)
> >  {
> >         struct pcs_krpc_set *krpcs = data;
> > +       struct pid *watched_pid = krpcs->watched_pid;
> >
> > -       wait_event(krpcs->watched_pid->wait_pidfd,
> > -                       process_has_exited(krpcs->watched_pid) || 
> > kthread_should_stop());
> > +       while (!krpc_watcher_should_stop(watched_pid)) {
> > +               /* Periodic wakeup so khungtaskd doesn't flag the watcher. 
> > */
> > +               wait_event_timeout(watched_pid->wait_pidfd,
> > +                                       
> > krpc_watcher_should_stop(watched_pid),
> > +                                       60 * HZ);
> > +       }
> >
> >         kthread_stop(krpcs->sender_task);
> >         put_task_struct(krpcs->sender_task);
> > --
> > 2.50.1 (Apple Git-155)

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to