Original: From:Julian Sun <sunjunchao2870@xxxxxxxxx> Date:2025-02-12 13:51:26(中国 (GMT+08:00)) To:linux-bcache<linux-bcache@xxxxxxxxxxxxxxx> Cc:colyli<colyli@xxxxxxxxxx> , kent.overstreet<kent.overstreet@xxxxxxxxx> , Julian Sun <sunjunchao2870@xxxxxxxxx> Subject:[PATCH] bcache: Use the lastest writeback_delay value when writeback thread is woken up When users reset writeback_delay value and woke up writeback thread via sysfs interface, expect the writeback thread to do actual writeback work, but in reality, the writeback thread probably continue to sleep. For example the following script set writeback_delay to 0 and wake up writeback thread, but writeback thread just continue to sleep: echo 0 > /sys/block/bcache0/bcache/writeback_delay echo 1 > /sys/block/bcache0/bcache/writeback_running Using the lastest value when writeback thread is woken up can urge it to do actual writeback work. Signed-off-by: Julian Sun <sunjunchao2870@xxxxxxxxx> --- drivers/md/bcache/writeback.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c index c1d28e365910..0d2d06aaacfe 100644 --- a/drivers/md/bcache/writeback.c +++ b/drivers/md/bcache/writeback.c @@ -825,8 +825,10 @@ static int bch_writeback_thread(void *arg) Hi, Julian Sun: We should first understand the role of writable_delay. The writeback thread only sleep when searched_full_index is True, which means that there are very few dirty keys at this time, all dirty keys are refilled at once. while (delay && !kthread_should_stop() && !test_bit(CACHE_SET_IO_DISABLE, &c->flags) && - !test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) + !test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)) { delay = schedule_timeout_interruptible(delay); + delay = min(delay, dc->writeback_delay * HZ); + } So, I don't think it is necessary to immediately adjust the sleep time unless the writeback_delay is set very large. We need to set a reasonable value for writable_delay at startup, rather than adjusting it at runtime. mingzhe bch_ratelimit_reset(&dc->writeback_rate); } -- 2.39.5 </sunjunchao2870@xxxxxxxxx></sunjunchao2870@xxxxxxxxx></kent.overstreet@xxxxxxxxx></colyli@xxxxxxxxxx></linux-bcache@xxxxxxxxxxxxxxx></sunjunchao2870@xxxxxxxxx>