On Fri, 18 Mar 2022 11:26:41 +0900, Shin'ichiro Kawasaki wrote: > When IO requests are made continuously and the target block device > handles requests faster than request arrival, the request dispatch loop > keeps on repeating to dispatch the arriving requests very long time, > more than a minute. Since the loop runs as a workqueue worker task, the > very long loop duration triggers workqueue watchdog timeout and BUG [1]. > > To avoid the very long loop duration, break the loop periodically. When > opportunity to dispatch requests still exists, check need_resched(). If > need_resched() returns true, the dispatch loop already consumed its time > slice, then reschedule the dispatch work and break the loop. With heavy > IO load, need_resched() does not return true for 20~30 seconds. To cover > such case, check time spent in the dispatch loop with jiffies. If more > than 1 second is spent, reschedule the dispatch work and break the loop. > > [...] Applied, thanks! [1/1] block: limit request dispatch loop duration commit: 572299f03afd676dd4e20669cdaf5ed0fe1379d4 Best regards, -- Jens Axboe