lkml.org 
[lkml]   [2022]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] mm/slub: check pfmemalloc_match in slab_alloc_node fastpath
On Sun, Apr 10, 2022 at 01:02:23AM +0900, Ohhoon Kwon wrote:
> If current alloc context does not have __GFP_MEMALLOC in its gfpflags,
> then slab objects that were previously created with __GFP_MEMALLOC
> should not be given.
>
> This criteria is well kept in slab alloc slowpath:
> When gfpflags does not contain __GFP_MEMALLOC but if per-cpu slab page
> was allocated with __GFP_MEMALLOC, then allocator first deactivates
> per-cpu slab page and then again allocates new slab page with the
> current context's gfpflags.
>
> However, this criteria is not checked in fastpath.
> It should also be checked in the fastpath, too.
>
> Signed-off-by: Ohhoon Kwon <ohkwon1043@gmail.com>
> ---
> mm/slub.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index 74d92aa4a3a2..c77cd548e106 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -3179,7 +3179,8 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s, struct list_l
> * there is a suitable cpu freelist.
> */
> if (IS_ENABLED(CONFIG_PREEMPT_RT) ||
> - unlikely(!object || !slab || !node_match(slab, node))) {
> + unlikely(!object || !slab || !node_match(slab, node) ||
> + !pfmemalloc_match(slab, gfpflags))) {
> object = __slab_alloc(s, gfpflags, node, addr, c);
> } else {
> void *next_object = get_freepointer_safe(s, object);

The missing pfmemalloc check in fastpath was intended.

pfmemalloc check in fast did exist in Mel's commit 072bb0aa5e0629 ("mm:
sl[au]b: add knowledge of PFMEMALLOC reserve pages").

But later removed by Christoph's commit 5091b74a95d4 ("mm: slub: optimise
the SLUB fast path to avoid pfmemalloc checks").

Any thoughts?

Thanks!

--
Thanks,
Hyeonggon

\
 
 \ /
  Last update: 2022-04-10 10:12    [W:0.039 / U:1.688 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site