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. 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 (;;) { > /*