linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: Vlastimil Babka <vbabka@suse.cz>, Jens Axboe <axboe@kernel.dk>,
	 Jann Horn <jannh@google.com>,
	 Linus Torvalds <torvalds@linux-foundation.org>,
	 Mike Rapoport <rppt@kernel.org>
Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
	 Christian Brauner <brauner@kernel.org>
Subject: [PATCH v2 08/15] slab: pass struct kmem_cache_args to do_kmem_cache_create()
Date: Tue, 03 Sep 2024 16:20:49 +0200	[thread overview]
Message-ID: <20240903-work-kmem_cache_args-v2-8-76f97e9a4560@kernel.org> (raw)
In-Reply-To: <20240903-work-kmem_cache_args-v2-0-76f97e9a4560@kernel.org>

and initialize most things in do_kmem_cache_create(). In a follow-up
patch we'll remove rcu_freeptr_offset from struct kmem_cache.

Signed-off-by: Christian Brauner <brauner@kernel.org>
---
 mm/slab.h        |  4 +++-
 mm/slab_common.c | 27 ++++++---------------------
 mm/slub.c        | 17 ++++++++++++++++-
 3 files changed, 25 insertions(+), 23 deletions(-)

diff --git a/mm/slab.h b/mm/slab.h
index 684bb48c4f39..c7a4e0fc3cf1 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -424,7 +424,9 @@ kmalloc_slab(size_t size, kmem_buckets *b, gfp_t flags, unsigned long caller)
 gfp_t kmalloc_fix_flags(gfp_t flags);
 
 /* Functions provided by the slab allocators */
-int do_kmem_cache_create(struct kmem_cache *, slab_flags_t flags);
+int do_kmem_cache_create(struct kmem_cache *s, const char *name,
+			 unsigned int size, struct kmem_cache_args *args,
+			 slab_flags_t flags);
 
 void __init kmem_cache_init(void);
 extern void create_boot_cache(struct kmem_cache *, const char *name,
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 9baa61c9c670..19ae3dd6e36f 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -224,20 +224,7 @@ static struct kmem_cache *create_cache(const char *name,
 	s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL);
 	if (!s)
 		goto out;
-
-	s->name = name;
-	s->size = s->object_size = object_size;
-	if (args->use_freeptr_offset)
-		s->rcu_freeptr_offset = args->freeptr_offset;
-	else
-		s->rcu_freeptr_offset = UINT_MAX;
-	s->align = args->align;
-	s->ctor = args->ctor;
-#ifdef CONFIG_HARDENED_USERCOPY
-	s->useroffset = args->useroffset;
-	s->usersize = args->usersize;
-#endif
-	err = do_kmem_cache_create(s, flags);
+	err = do_kmem_cache_create(s, name, object_size, args, flags);
 	if (err)
 		goto out_free_cache;
 
@@ -788,9 +775,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name,
 {
 	int err;
 	unsigned int align = ARCH_KMALLOC_MINALIGN;
-
-	s->name = name;
-	s->size = s->object_size = size;
+	struct kmem_cache_args kmem_args = {};
 
 	/*
 	 * kmalloc caches guarantee alignment of at least the largest
@@ -799,14 +784,14 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name,
 	 */
 	if (flags & SLAB_KMALLOC)
 		align = max(align, 1U << (ffs(size) - 1));
-	s->align = calculate_alignment(flags, align, size);
+	kmem_args.align = calculate_alignment(flags, align, size);
 
 #ifdef CONFIG_HARDENED_USERCOPY
-	s->useroffset = useroffset;
-	s->usersize = usersize;
+	kmem_args.useroffset = useroffset;
+	kmem_args.usersize = usersize;
 #endif
 
-	err = do_kmem_cache_create(s, flags);
+	err = do_kmem_cache_create(s, name, size, &kmem_args, flags);
 
 	if (err)
 		panic("Creation of kmalloc slab %s size=%u failed. Reason %d\n",
diff --git a/mm/slub.c b/mm/slub.c
index 30f4ca6335c7..4719b60215b8 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5843,14 +5843,29 @@ __kmem_cache_alias(const char *name, unsigned int size, unsigned int align,
 	return s;
 }
 
-int do_kmem_cache_create(struct kmem_cache *s, slab_flags_t flags)
+int do_kmem_cache_create(struct kmem_cache *s, const char *name,
+			 unsigned int size, struct kmem_cache_args *args,
+			 slab_flags_t flags)
 {
 	int err = -EINVAL;
 
+	s->name = name;
+	s->size = s->object_size = size;
+
 	s->flags = kmem_cache_flags(flags, s->name);
 #ifdef CONFIG_SLAB_FREELIST_HARDENED
 	s->random = get_random_long();
 #endif
+	if (args->use_freeptr_offset)
+		s->rcu_freeptr_offset = args->freeptr_offset;
+	else
+		s->rcu_freeptr_offset = UINT_MAX;
+	s->align = args->align;
+	s->ctor = args->ctor;
+#ifdef CONFIG_HARDENED_USERCOPY
+	s->useroffset = args->useroffset;
+	s->usersize = args->usersize;
+#endif
 
 	if (!calculate_sizes(s))
 		goto out;

-- 
2.45.2


  parent reply	other threads:[~2024-09-03 14:22 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Christian Brauner [this message]
2024-09-04  5:04   ` [PATCH v2 08/15] slab: pass struct kmem_cache_args to do_kmem_cache_create() 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

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=20240903-work-kmem_cache_args-v2-8-76f97e9a4560@kernel.org \
    --to=brauner@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=jannh@google.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rppt@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=vbabka@suse.cz \
    /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;
as well as URLs for NNTP newsgroup(s).