On Tue 11-01-22 16:16:57, Yu Zhao wrote: > On Mon, Jan 10, 2022 at 04:01:13PM +0100, Michal Hocko wrote: > > On Thu 06-01-22 17:12:18, Michal Hocko wrote: > > > On Tue 04-01-22 13:22:25, Yu Zhao wrote: > > > > +static struct lru_gen_mm_walk *alloc_mm_walk(void) > > > > +{ > > > > + if (!current->reclaim_state || !current->reclaim_state->mm_walk) > > > > + return kvzalloc(sizeof(struct lru_gen_mm_walk), GFP_KERNEL); > > > > One thing I have overlooked completely. > > I appreciate your attention to details but GFP_KERNEL is legit in the > reclaim path. It's been used many years in our production, e.g., > page reclaim > swap_writepage() > frontswap_store() > zswap_frontswap_store() > zswap_entry_cache_alloc(GFP_KERNEL) > > (And I always test my changes with lockdep, kasan, DEBUG_VM, etc., no > warnings ever seen from using GFP_KERNEL in the reclaim path.) OK, I can see it now. __need_reclaim will check for PF_MEMALLOC and skip the fs_reclaim tracking. I still maintain I am not really happy about (nor in the zswap example) allocations from the direct reclaim context. I would really recommend using a pre-allocated pool of objects. If there are strong reasons for not doing so then at lease change that to kzalloc. Thanks! -- Michal Hocko SUSE Labs