linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/15] slab: add struct kmem_cache_args
@ 2024-09-03 14:20 Christian Brauner
  2024-09-03 14:20 ` [PATCH v2 01/15] sl*b: s/__kmem_cache_create/do_kmem_cache_create/g Christian Brauner
                   ` (17 more replies)
  0 siblings, 18 replies; 67+ messages in thread
From: Christian Brauner @ 2024-09-03 14:20 UTC (permalink / raw)
  To: Vlastimil Babka, Jens Axboe, Jann Horn, Linus Torvalds,
	Mike Rapoport
  Cc: linux-mm, linux-fsdevel, Christian Brauner

Hey,

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 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 (15):
      sl*b: 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()
      slub: pull kmem_cache_open() into do_kmem_cache_create()
      slab: pass struct kmem_cache_args to do_kmem_cache_create()
      sl*b: 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()
      io_uring: port to struct kmem_cache_args

 fs/file_table.c      |  11 +++-
 include/linux/slab.h |  60 ++++++++++++++-----
 io_uring/io_uring.c  |  14 +++--
 mm/slab.h            |   6 +-
 mm/slab_common.c     | 150 +++++++++++++++++++----------------------------
 mm/slub.c            | 162 +++++++++++++++++++++++++--------------------------
 6 files changed, 203 insertions(+), 200 deletions(-)
---
base-commit: 6e016babce7c845ed015da25c7a097fa3482d95a
change-id: 20240902-work-kmem_cache_args-e9760972c7d4


^ permalink raw reply	[flat|nested] 67+ messages in thread

end of thread, other threads:[~2024-09-06  6:49 UTC | newest]

Thread overview: 67+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-03 14:20 [PATCH v2 00/15] slab: add struct kmem_cache_args Christian Brauner
2024-09-03 14:20 ` [PATCH v2 01/15] sl*b: s/__kmem_cache_create/do_kmem_cache_create/g Christian Brauner
2024-09-04  4:52   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 02/15] slab: add struct kmem_cache_args Christian Brauner
2024-09-04  4:54   ` Mike Rapoport
2024-09-04  8:13   ` Vlastimil Babka
2024-09-04  9:06     ` Christian Brauner
2024-09-04 15:16   ` Mike Rapoport
2024-09-04 15:48     ` Christian Brauner
2024-09-04 16:16       ` Mike Rapoport
2024-09-04 16:53         ` Christian Brauner
2024-09-04 15:49     ` Vlastimil Babka
2024-09-04 16:16       ` Mike Rapoport
2024-09-04 16:22         ` Vlastimil Babka
2024-09-04 18:21           ` Christian Brauner
2024-09-04 18:53             ` Linus Torvalds
2024-09-04 20:10               ` Christian Brauner
2024-09-03 14:20 ` [PATCH v2 03/15] slab: port kmem_cache_create() to " Christian Brauner
2024-09-04  4:55   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 04/15] slab: port kmem_cache_create_rcu() " Christian Brauner
2024-09-04  4:55   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 05/15] slab: port kmem_cache_create_usercopy() " Christian Brauner
2024-09-04  4:56   ` Mike Rapoport
2024-09-04  8:14   ` Vlastimil Babka
2024-09-04  8:59     ` Christian Brauner
2024-09-03 14:20 ` [PATCH v2 06/15] slab: pass struct kmem_cache_args to create_cache() Christian Brauner
2024-09-04  4:59   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 07/15] slub: pull kmem_cache_open() into do_kmem_cache_create() Christian Brauner
2024-09-04  5:02   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 08/15] slab: pass struct kmem_cache_args to do_kmem_cache_create() Christian Brauner
2024-09-04  5:04   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 09/15] sl*b: remove rcu_freeptr_offset from struct kmem_cache Christian Brauner
2024-09-04  5:08   ` Mike Rapoport
2024-09-04  8:16   ` Vlastimil Babka
2024-09-04  8:58     ` Christian Brauner
2024-09-03 14:20 ` [PATCH v2 10/15] slab: port KMEM_CACHE() to struct kmem_cache_args Christian Brauner
2024-09-04  5:08   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 11/15] slab: port KMEM_CACHE_USERCOPY() " Christian Brauner
2024-09-04  5:09   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 12/15] slab: create kmem_cache_create() compatibility layer Christian Brauner
2024-09-04  5:14   ` Mike Rapoport
2024-09-04  9:44     ` [PATCH 17/16] slab: make kmem_cache_create_usercopy() static inline Christian Brauner
2024-09-04  9:44     ` [PATCH 18/16] slab: make __kmem_cache_create() " Christian Brauner
2024-09-04  9:45     ` [PATCH v2 12/15] slab: create kmem_cache_create() compatibility layer Christian Brauner
2024-09-04 10:50       ` Vlastimil Babka
2024-09-04 11:38         ` Christian Brauner
2024-09-04 13:33           ` Vlastimil Babka
2024-09-04 14:44             ` Christian Brauner
2024-09-04 15:11               ` Mike Rapoport
2024-09-04 15:38                 ` Christian Brauner
2024-09-04 15:40                 ` Vlastimil Babka
2024-09-03 14:20 ` [PATCH v2 13/15] file: port to struct kmem_cache_args Christian Brauner
2024-09-04  5:15   ` Mike Rapoport
2024-09-03 14:20 ` [PATCH v2 14/15] slab: remove kmem_cache_create_rcu() Christian Brauner
2024-09-04  5:15   ` Mike Rapoport
2024-09-04  8:18   ` Vlastimil Babka
2024-09-04  8:55     ` Christian Brauner
2024-09-03 14:20 ` [PATCH v2 15/15] io_uring: port to struct kmem_cache_args Christian Brauner
2024-09-04  5:16   ` Mike Rapoport
2024-09-04  8:20   ` Vlastimil Babka
2024-09-04  8:50     ` Christian Brauner
2024-09-03 19:22 ` [PATCH v2 00/15] slab: add " Kees Cook
2024-09-03 19:25 ` Jens Axboe
2024-09-06  6:49   ` Christian Brauner
2024-09-04  8:25 ` Vlastimil Babka
2024-09-04  8:42   ` Christian Brauner
2024-09-04  9:05     ` Vlastimil Babka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).