[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAAhV-H4PnPVumThckN8xtteXQGdBB-eAY_jW82m8i9qY=TeDUg@mail.gmail.com>
Date: Tue, 3 Feb 2026 10:46:05 +0800
From: Huacai Chen <chenhuacai@...nel.org>
To: Jan Kara <jack@...e.cz>
Cc: Huacai Chen <chenhuacai@...ngson.cn>, Alexander Viro <viro@...iv.linux.org.uk>,
Christian Brauner <brauner@...nel.org>, linux-fsdevel@...r.kernel.org,
Xuefeng Li <lixuefeng@...ngson.cn>, Julian Sun <sunjunchao@...edance.com>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] writeback: Fix wakeup and logging timeouts for !DETECT_HUNG_TASK
On Mon, Feb 2, 2026 at 8:49 PM Jan Kara <jack@...e.cz> wrote:
>
> On Sat 31-01-26 17:07:24, Huacai Chen wrote:
> > Recent changes of fs-writeback cause such warnings if DETECT_HUNG_TASK
> > is not enabled:
> >
> > INFO: The task sync:1342 has been waiting for writeback completion for more than 1 seconds.
> >
> > The reason is sysctl_hung_task_timeout_secs is 0 when DETECT_HUNG_TASK
> > is not enabled, then it causes the warning message even if the writeback
> > lasts for only one second.
> >
> > I believe the wakeup and logging is also useful for !DETECT_HUNG_TASK,
> > so I don't want to disable them completely. As DEFAULT_HUNG_TASK_TIMEOUT
> > is 120 seconds, so for the !DETECT_HUNG_TASK case let's use 120 seconds
> > instead of sysctl_hung_task_timeout_secs.
> >
> > Fixes: 1888635532fb ("writeback: Wake up waiting tasks when finishing the writeback of a chunk.")
> > Fixes: d6e621590764 ("writeback: Add logging for slow writeback (exceeds sysctl_hung_task_timeout_secs)")
> > Signed-off-by: Huacai Chen <chenhuacai@...ngson.cn>
>
> Thanks for the patch! I think if !CONFIG_DETECT_HUNG_TASK, we should just
> not print the message from wb_wait_for_completion_cb() as well. After all
> it's also a type of hung task detection and user explicitely disabled that.
> Also there would be no way to tune the timeout so there are high chances
> 120s will be too much for somebody and too few for somebody else...
OK, make sense.
Huacai
>
> > +#ifndef CONFIG_DETECT_HUNG_TASK
> > + unsigned long hung_secs = 120;
> > +#else
> > + unsigned long hung_secs = sysctl_hung_task_timeout_secs;
> > +#endif
> >
> > if (work->for_kupdate)
> > dirtied_before = jiffies -
> > @@ -2031,8 +2041,7 @@ static long writeback_sb_inodes(struct super_block *sb,
> >
> > /* Report progress to inform the hung task detector of the progress. */
> > if (work->done && work->done->progress_stamp &&
> > - (jiffies - work->done->progress_stamp) > HZ *
> > - sysctl_hung_task_timeout_secs / 2)
> > + (jiffies - work->done->progress_stamp) > HZ * hung_secs / 2)
> > wake_up_all(work->done->waitq);
> >
> > wbc_detach_inode(&wbc);
>
> Similarly here I'd just #ifdef out the wakeup when !CONFIG_DETECT_HUNG_TASK.
>
> Honza
> --
> Jan Kara <jack@...e.com>
> SUSE Labs, CR
Powered by blists - more mailing lists