On Fri, Jan 7, 2022 at 11:05 AM Roman Gushchin <guro@xxxxxx> wrote: > [...] > > /* > > * struct kmem_cache related prototypes > > @@ -425,6 +426,8 @@ static __always_inline unsigned int __kmalloc_index(size_t size, > > > > void *__kmalloc(size_t size, gfp_t flags) __assume_kmalloc_alignment __alloc_size(1); > > void *kmem_cache_alloc(struct kmem_cache *s, gfp_t flags) __assume_slab_alignment __malloc; > > +void *kmem_cache_alloc_lru(struct kmem_cache *s, struct list_lru *lru, > > + gfp_t gfpflags) __assume_slab_alignment __malloc; > > I'm not a big fan of this patch: I don't see why preparing the lru > infrastructure has to be integrated that deep into the slab code. > > Why can't kmem_cache_alloc_lru() be a simple wrapper like (pseudo-code): > void *kmem_cache_alloc_lru(struct kmem_cache *s, struct list_lru *lru, > gfp_t gfpflags) { > if (necessarily) > prepare_lru_infra(); > return kmem_cache_alloc(); > } Hi Roman, Actually, it can. But there is going to be some redundant code similar like memcg_slab_pre_alloc_hook() does to detect the necessity of prepare_lru_infra() in the new scheme of kmem_cache_alloc_lru(). I just want to reduce the redundant overhead. Thanks.