40
40
static struct hlist_head * pid_hash ;
41
41
static int pidhash_shift ;
42
42
struct pid init_struct_pid = INIT_STRUCT_PID ;
43
+ static struct kmem_cache * pid_ns_cachep ;
43
44
44
45
int pid_max = PID_MAX_DEFAULT ;
45
46
@@ -486,7 +487,7 @@ static struct pid_namespace *create_pid_namespace(int level)
486
487
struct pid_namespace * ns ;
487
488
int i ;
488
489
489
- ns = kmalloc ( sizeof ( struct pid_namespace ) , GFP_KERNEL );
490
+ ns = kmem_cache_alloc ( pid_ns_cachep , GFP_KERNEL );
490
491
if (ns == NULL )
491
492
goto out ;
492
493
@@ -516,7 +517,7 @@ static struct pid_namespace *create_pid_namespace(int level)
516
517
out_free_map :
517
518
kfree (ns -> pidmap [0 ].page );
518
519
out_free :
519
- kfree ( ns );
520
+ kmem_cache_free ( pid_ns_cachep , ns );
520
521
out :
521
522
return ERR_PTR (- ENOMEM );
522
523
}
@@ -527,7 +528,7 @@ static void destroy_pid_namespace(struct pid_namespace *ns)
527
528
528
529
for (i = 0 ; i < PIDMAP_ENTRIES ; i ++ )
529
530
kfree (ns -> pidmap [i ].page );
530
- kfree ( ns );
531
+ kmem_cache_free ( pid_ns_cachep , ns );
531
532
}
532
533
533
534
struct pid_namespace * copy_pid_ns (unsigned long flags , struct pid_namespace * old_ns )
@@ -601,4 +602,6 @@ void __init pidmap_init(void)
601
602
init_pid_ns .pid_cachep = create_pid_cachep (1 );
602
603
if (init_pid_ns .pid_cachep == NULL )
603
604
panic ("Can't create pid_1 cachep\n" );
605
+
606
+ pid_ns_cachep = KMEM_CACHE (pid_namespace , SLAB_PANIC );
604
607
}
0 commit comments