linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Vlastimil Babka <vbabka@suse.cz>
To: Christian Brauner <brauner@kernel.org>,
	Jens Axboe <axboe@kernel.dk>, Jann Horn <jannh@google.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Mike Rapoport <rppt@kernel.org>
Cc: Kees Cook <kees@kernel.org>, Christoph Lameter <cl@linux.com>,
	Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Hyeonggon Yoo <42.hyeyoo@gmail.com>,
	linux-mm@kvack.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v4 00/17] slab: add struct kmem_cache_args
Date: Thu, 5 Sep 2024 14:02:33 +0200	[thread overview]
Message-ID: <696de186-ecf1-49b5-bb27-b3290a705e82@suse.cz> (raw)
In-Reply-To: <20240905-work-kmem_cache_args-v4-0-ed45d5380679@kernel.org>

On 9/5/24 9:56 AM, Christian Brauner wrote:
> Hey,
> 
> This is v4 which allows NULL to be passed in the struct kmem_cache_args
> argument of kmem_cache_create() and substitutes default parameters in
> this case.

Thanks, I've followed your earlier suggestion and put this series to a
branch that merges the vfs.file first:

https://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git/log/?h=slab/for-6.12/kmem_cache_args

and I'm including it to slab/for-next

Meanwhile I think we should look at the kerneldocs for the new
kmem_cache_create() (hopefully kerneldoc can be persuaded to document it
without throwing errors) and the kmem_cache_args, because patches 16 and
14 just removed what we had before, including the details about
freeptr_offset in patch 14.

> As discussed last week the various kmem_cache_*() functions should be
> replaced by a unified function that is based around a struct, with only
> the basic parameters passed separately.
> 
> Vlastimil already said that he would like to keep core parameters out
> of the struct: name, object size, and flags. I personally don't care
> much and would not object to moving everything into the struct but
> that's a matter of taste and I yield that decision power to the
> maintainer.
> 
> In the first version I pointed out that the choice of name is somewhat
> forced as kmem_cache_create() is taken and the only way to reuse it
> would be to replace all users in one go. Or to do a global
> sed/kmem_cache_create()/kmem_cache_create2()/g. And then introduce
> kmem_cache_setup(). That doesn't strike me as a viable option.
> 
> If we really cared about the *_create() suffix then an alternative might
> be to do a sed/kmem_cache_setup()/kmem_cache_create()/g after every user
> in the kernel is ported. I honestly don't think that's worth it but I
> wanted to at least mention it to highlight the fact that this might lead
> to a naming compromise.
> 
> However, I came up with an alternative using _Generic() to create a
> compatibility layer that will call the correct variant of
> kmem_cache_create() depending on whether struct kmem_cache_args is
> passed or not. That compatibility layer can stay in place until we
> updated all calls to be based on struct kmem_cache_args.
> 
> From a cursory grep (and not excluding Documentation mentions) we will
> have to replace 44 kmem_cache_create_usercopy() calls and about 463
> kmem_cache_create() calls which makes for a bit above 500 calls to port
> to kmem_cache_setup(). That'll probably be good work for people getting
> into kernel development.
> 
> Signed-off-by: Christian Brauner <brauner@kernel.org>
> ---
> Changes in v4:
> - Allow NULL to be passed in the struct kmem_cache_args argument of
>   kmem_cache_create() and use default parameters in this case.
> - Link to v3: https://lore.kernel.org/r/20240904-work-kmem_cache_args-v3-0-05db2179a8c2@kernel.org
> 
> Changes in v3:
> - Reworded some commit messages.
> - Picked up various RvBs.
> - Added two patches to make two functions static inline.
> - Link to v2: https://lore.kernel.org/r/20240903-work-kmem_cache_args-v2-0-76f97e9a4560@kernel.org
> 
> Changes in v2:
> - Remove kmem_cache_setup() and add a compatibility layer built around
>   _Generic() so that we can keep the kmem_cache_create() name and type
>   switch on the third argument to either call __kmem_cache_create() or
>   __kmem_cache_create_args().
> - Link to v1: https://lore.kernel.org/r/20240902-work-kmem_cache_args-v1-0-27d05bc05128@kernel.org
> 
> ---
> Christian Brauner (17):
>       slab: s/__kmem_cache_create/do_kmem_cache_create/g
>       slab: add struct kmem_cache_args
>       slab: port kmem_cache_create() to struct kmem_cache_args
>       slab: port kmem_cache_create_rcu() to struct kmem_cache_args
>       slab: port kmem_cache_create_usercopy() to struct kmem_cache_args
>       slab: pass struct kmem_cache_args to create_cache()
>       slab: pull kmem_cache_open() into do_kmem_cache_create()
>       slab: pass struct kmem_cache_args to do_kmem_cache_create()
>       slab: remove rcu_freeptr_offset from struct kmem_cache
>       slab: port KMEM_CACHE() to struct kmem_cache_args
>       slab: port KMEM_CACHE_USERCOPY() to struct kmem_cache_args
>       slab: create kmem_cache_create() compatibility layer
>       file: port to struct kmem_cache_args
>       slab: remove kmem_cache_create_rcu()
>       slab: make kmem_cache_create_usercopy() static inline
>       slab: make __kmem_cache_create() static inline
>       io_uring: port to struct kmem_cache_args
> 
>  fs/file_table.c      |  11 ++-
>  include/linux/slab.h | 130 +++++++++++++++++++++++++++------
>  io_uring/io_uring.c  |  14 ++--
>  mm/slab.h            |   6 +-
>  mm/slab_common.c     | 197 +++++++++++----------------------------------------
>  mm/slub.c            | 162 +++++++++++++++++++++---------------------
>  6 files changed, 250 insertions(+), 270 deletions(-)
> ---
> base-commit: 6e016babce7c845ed015da25c7a097fa3482d95a
> change-id: 20240902-work-kmem_cache_args-e9760972c7d4
> 


      parent reply	other threads:[~2024-09-05 12:00 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-05  7:56 Christian Brauner
2024-09-05  7:56 ` [PATCH v4 01/17] slab: s/__kmem_cache_create/do_kmem_cache_create/g Christian Brauner
2024-09-06  0:12   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 02/17] slab: add struct kmem_cache_args Christian Brauner
2024-09-06  0:15   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 03/17] slab: port kmem_cache_create() to " Christian Brauner
2024-09-06  0:43   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 04/17] slab: port kmem_cache_create_rcu() " Christian Brauner
2024-09-06  0:45   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 05/17] slab: port kmem_cache_create_usercopy() " Christian Brauner
2024-09-06  0:48   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 06/17] slab: pass struct kmem_cache_args to create_cache() Christian Brauner
2024-09-06  0:51   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 07/17] slab: pull kmem_cache_open() into do_kmem_cache_create() Christian Brauner
2024-09-06  0:53   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 08/17] slab: pass struct kmem_cache_args to do_kmem_cache_create() Christian Brauner
2024-09-06  0:54   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 09/17] slab: remove rcu_freeptr_offset from struct kmem_cache Christian Brauner
2024-09-06  0:55   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 10/17] slab: port KMEM_CACHE() to struct kmem_cache_args Christian Brauner
2024-09-06  0:58   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 11/17] slab: port KMEM_CACHE_USERCOPY() " Christian Brauner
2024-09-06  1:00   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 12/17] slab: create kmem_cache_create() compatibility layer Christian Brauner
2024-09-05  8:15   ` Mike Rapoport
2024-09-05 11:54   ` Vlastimil Babka
2024-09-06  1:05   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 13/17] file: port to struct kmem_cache_args Christian Brauner
2024-09-06  1:06   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 14/17] slab: remove kmem_cache_create_rcu() Christian Brauner
2024-09-06  1:08   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 15/17] slab: make kmem_cache_create_usercopy() static inline Christian Brauner
2024-09-05  8:15   ` Mike Rapoport
2024-09-06  1:08   ` Roman Gushchin
2024-09-05  7:56 ` [PATCH v4 16/17] slab: make __kmem_cache_create() " Christian Brauner
2024-09-05  8:16   ` Mike Rapoport
2024-09-06  1:10   ` Roman Gushchin
2024-09-05  7:57 ` [PATCH v4 17/17] io_uring: port to struct kmem_cache_args Christian Brauner
2024-09-05 12:02 ` Vlastimil Babka [this message]

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=696de186-ecf1-49b5-bb27-b3290a705e82@suse.cz \
    --to=vbabka@suse.cz \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=axboe@kernel.dk \
    --cc=brauner@kernel.org \
    --cc=cl@linux.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=jannh@google.com \
    --cc=kees@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=rppt@kernel.org \
    --cc=torvalds@linux-foundation.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox