From: Harry Yoo <harry.yoo@oracle.com>
To: Ye Liu <ye.liu@linux.dev>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, Ye Liu <liuye@kylinos.cn>
Subject: Re: [PATCH] mm/rmap: Move anon_vma initialization to anon_vma_ctor()
Date: Tue, 15 Apr 2025 20:28:45 +0900 [thread overview]
Message-ID: <Z_5C7YNDwZ4pdwQn@harry> (raw)
In-Reply-To: <20250415092548.271718-1-ye.liu@linux.dev>
On Tue, Apr 15, 2025 at 05:25:48PM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Currently, some initialization of anon_vma is performed in
> anon_vma_alloc(). Move the initialization to anon_vma_ctor()
> so that all object setup is handled in one place.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> ---
NACK unless the patch explains how the object's initial state
('constructed state') is preserved between uses.
anon_vma_ctor() is a slab constructor. That means it is called only once
when a slab (folio) is allocated, and not called again when an anon_vma
is allocated from an existing slab (folio). In other words it is not called
everytime an object allocated via kmem_cache_alloc() interface.
This patch looks very dangerous to me and makes me question whether you
tested it before submission.
--
Cheers,
Harry / Hyeonggon
> mm/rmap.c | 27 ++++++++++-----------------
> 1 file changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/mm/rmap.c b/mm/rmap.c
> index 67bb273dfb80..9802b1c27e4b 100644
> --- a/mm/rmap.c
> +++ b/mm/rmap.c
> @@ -89,22 +89,7 @@ static struct kmem_cache *anon_vma_chain_cachep;
>
> static inline struct anon_vma *anon_vma_alloc(void)
> {
> - struct anon_vma *anon_vma;
> -
> - anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL);
> - if (anon_vma) {
> - atomic_set(&anon_vma->refcount, 1);
> - anon_vma->num_children = 0;
> - anon_vma->num_active_vmas = 0;
> - anon_vma->parent = anon_vma;
> - /*
> - * Initialise the anon_vma root to point to itself. If called
> - * from fork, the root will be reset to the parents anon_vma.
> - */
> - anon_vma->root = anon_vma;
> - }
> -
> - return anon_vma;
> + return kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL);
> }
>
> static inline void anon_vma_free(struct anon_vma *anon_vma)
> @@ -453,8 +438,16 @@ static void anon_vma_ctor(void *data)
> struct anon_vma *anon_vma = data;
>
> init_rwsem(&anon_vma->rwsem);
> - atomic_set(&anon_vma->refcount, 0);
> + atomic_set(&anon_vma->refcount, 1);
> anon_vma->rb_root = RB_ROOT_CACHED;
> + anon_vma->num_children = 0;
> + anon_vma->num_active_vmas = 0;
> + anon_vma->parent = anon_vma;
> + /*
> + * Initialise the anon_vma root to point to itself. If called
> + * from fork, the root will be reset to the parents anon_vma.
> + */
> + anon_vma->root = anon_vma;
> }
>
> void __init anon_vma_init(void)
> --
> 2.25.1
>
>
next prev parent reply other threads:[~2025-04-15 11:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-15 9:25 [PATCH] mm/rmap: Move anon_vma initialization to anon_vma_ctor() Ye Liu
2025-04-15 11:28 ` Harry Yoo [this message]
2025-04-16 1:34 ` Ye Liu
2025-04-16 12:59 ` Lorenzo Stoakes
2025-04-16 13:02 ` David Hildenbrand
2025-04-16 13:30 ` Mateusz Guzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z_5C7YNDwZ4pdwQn@harry \
--to=harry.yoo@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=liuye@kylinos.cn \
--cc=ye.liu@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.