Skip to content

Commit 34410a9

Browse files
braunertehcaster
authored andcommitted
slab: pass struct kmem_cache_args to create_cache()
Pass struct kmem_cache_args to create_cache() so that we can later simplify further helpers. Reviewed-by: Kees Cook <[email protected]> Reviewed-by: Jens Axboe <[email protected]> Reviewed-by: Mike Rapoport (Microsoft) <[email protected]> Reviewed-by: Vlastimil Babka <[email protected]> Signed-off-by: Christian Brauner <[email protected]> Reviewed-by: Roman Gushchin <[email protected]> Signed-off-by: Vlastimil Babka <[email protected]>
1 parent 1d3d764 commit 34410a9

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

mm/slab_common.c

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -202,22 +202,22 @@ struct kmem_cache *find_mergeable(unsigned int size, unsigned int align,
202202
}
203203

204204
static struct kmem_cache *create_cache(const char *name,
205-
unsigned int object_size, unsigned int freeptr_offset,
206-
unsigned int align, slab_flags_t flags,
207-
unsigned int useroffset, unsigned int usersize,
208-
void (*ctor)(void *))
205+
unsigned int object_size,
206+
struct kmem_cache_args *args,
207+
slab_flags_t flags)
209208
{
210209
struct kmem_cache *s;
211210
int err;
212211

213-
if (WARN_ON(useroffset + usersize > object_size))
214-
useroffset = usersize = 0;
212+
if (WARN_ON(args->useroffset + args->usersize > object_size))
213+
args->useroffset = args->usersize = 0;
215214

216215
/* If a custom freelist pointer is requested make sure it's sane. */
217216
err = -EINVAL;
218-
if (freeptr_offset != UINT_MAX &&
219-
(freeptr_offset >= object_size || !(flags & SLAB_TYPESAFE_BY_RCU) ||
220-
!IS_ALIGNED(freeptr_offset, sizeof(freeptr_t))))
217+
if (args->use_freeptr_offset &&
218+
(args->freeptr_offset >= object_size ||
219+
!(flags & SLAB_TYPESAFE_BY_RCU) ||
220+
!IS_ALIGNED(args->freeptr_offset, sizeof(freeptr_t))))
221221
goto out;
222222

223223
err = -ENOMEM;
@@ -227,12 +227,15 @@ static struct kmem_cache *create_cache(const char *name,
227227

228228
s->name = name;
229229
s->size = s->object_size = object_size;
230-
s->rcu_freeptr_offset = freeptr_offset;
231-
s->align = align;
232-
s->ctor = ctor;
230+
if (args->use_freeptr_offset)
231+
s->rcu_freeptr_offset = args->freeptr_offset;
232+
else
233+
s->rcu_freeptr_offset = UINT_MAX;
234+
s->align = args->align;
235+
s->ctor = args->ctor;
233236
#ifdef CONFIG_HARDENED_USERCOPY
234-
s->useroffset = useroffset;
235-
s->usersize = usersize;
237+
s->useroffset = args->useroffset;
238+
s->usersize = args->usersize;
236239
#endif
237240
err = do_kmem_cache_create(s, flags);
238241
if (err)
@@ -265,7 +268,6 @@ struct kmem_cache *__kmem_cache_create_args(const char *name,
265268
slab_flags_t flags)
266269
{
267270
struct kmem_cache *s = NULL;
268-
unsigned int freeptr_offset = UINT_MAX;
269271
const char *cache_name;
270272
int err;
271273

@@ -323,11 +325,8 @@ struct kmem_cache *__kmem_cache_create_args(const char *name,
323325
goto out_unlock;
324326
}
325327

326-
if (args->use_freeptr_offset)
327-
freeptr_offset = args->freeptr_offset;
328-
s = create_cache(cache_name, object_size, freeptr_offset,
329-
calculate_alignment(flags, args->align, object_size),
330-
flags, args->useroffset, args->usersize, args->ctor);
328+
args->align = calculate_alignment(flags, args->align, object_size);
329+
s = create_cache(cache_name, object_size, args, flags);
331330
if (IS_ERR(s)) {
332331
err = PTR_ERR(s);
333332
kfree_const(cache_name);

0 commit comments

Comments
 (0)