On Sat, Jan 04, 2025 at 09:50:32AM +1100, NeilBrown wrote: > On Fri, 03 Jan 2025, cel@xxxxxxxxxx wrote: ... > I think that instead of passing "list_lru_count()" we should pass some > constant like 1024. > > cnt = list_lru_count() > while (cnt > 0) { > num = min(cnt, 1024); > list_lru_walk(...., num); > cond_sched() > cnt -= num; > } > > Then run it from system_wq. > > list_lru_shrink is most often called as list_lru_shrink_walk() from a > shrinker, and the pattern there is essentially that above. A count is > taken, possibly scaled down, then the shrinker is called in batches. BTW, there's nothing wrong with taking some msecs or even tens of msecs running on system_unbound_wq, so the current state may be fine too. Thanks. -- tejun