on 2/9/2024 2:29 AM, Tim Chen wrote: > On Fri, 2024-02-09 at 01:20 +0800, Kemeng Shi wrote: >> >> >> +static void filter_expired_io(struct bdi_writeback *wb) >> +{ >> + struct inode *inode, *tmp; >> + unsigned long expired_jiffies = jiffies - >> + msecs_to_jiffies(dirty_expire_interval * 10); > > We have kupdate trigger time hard coded with a factor of 10 to expire interval here. > The kupdate trigger time "mssecs_to_jiffies(dirty_expire_interval * 10)" is > also used in wb_writeback(). It will be better to have a macro or #define > to encapsulate the trigger time so if for any reason we need > to tune the trigger time, we just need to change it at one place. Hi Tim. Sorry for the late reply, I was on vacation these days. I agree it's better to have a macro and I will add it in next version. Thanks! > > Tim > >> + >> + spin_lock(&wb->list_lock); >> + list_for_each_entry_safe(inode, tmp, &wb->b_io, i_io_list) >> + if (inode_dirtied_after(inode, expired_jiffies)) >> + redirty_tail(inode, wb); >> + >> + list_for_each_entry_safe(inode, tmp, &wb->b_more_io, i_io_list) >> + if (inode_dirtied_after(inode, expired_jiffies)) >> + redirty_tail(inode, wb); >> + spin_unlock(&wb->list_lock); >> +} >> + >> /* >> * Explicit flushing or periodic writeback of "old" data. >> * >> @@ -2070,6 +2087,9 @@ static long wb_writeback(struct bdi_writeback *wb, >> long progress; >> struct blk_plug plug; >> >> + if (work->for_kupdate) >> + filter_expired_io(wb); >> + >> blk_start_plug(&plug); >> for (;;) { >> /* >