aboutsummaryrefslogtreecommitdiffstats
path: root/security/selinux/ss/hashtab.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/selinux/ss/hashtab.c')
-rw-r--r--security/selinux/ss/hashtab.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/security/selinux/ss/hashtab.c b/security/selinux/ss/hashtab.c
index 686c3917064c..bef7577d1270 100644
--- a/security/selinux/ss/hashtab.c
+++ b/security/selinux/ss/hashtab.c
@@ -9,6 +9,8 @@
9#include <linux/sched.h> 9#include <linux/sched.h>
10#include "hashtab.h" 10#include "hashtab.h"
11 11
12static struct kmem_cache *hashtab_node_cachep;
13
12struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key), 14struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, const void *key),
13 int (*keycmp)(struct hashtab *h, const void *key1, const void *key2), 15 int (*keycmp)(struct hashtab *h, const void *key1, const void *key2),
14 u32 size) 16 u32 size)
@@ -57,7 +59,7 @@ int hashtab_insert(struct hashtab *h, void *key, void *datum)
57 if (cur && (h->keycmp(h, key, cur->key) == 0)) 59 if (cur && (h->keycmp(h, key, cur->key) == 0))
58 return -EEXIST; 60 return -EEXIST;
59 61
60 newnode = kzalloc(sizeof(*newnode), GFP_KERNEL); 62 newnode = kmem_cache_zalloc(hashtab_node_cachep, GFP_KERNEL);
61 if (!newnode) 63 if (!newnode)
62 return -ENOMEM; 64 return -ENOMEM;
63 newnode->key = key; 65 newnode->key = key;
@@ -106,7 +108,7 @@ void hashtab_destroy(struct hashtab *h)
106 while (cur) { 108 while (cur) {
107 temp = cur; 109 temp = cur;
108 cur = cur->next; 110 cur = cur->next;
109 kfree(temp); 111 kmem_cache_free(hashtab_node_cachep, temp);
110 } 112 }
111 h->htable[i] = NULL; 113 h->htable[i] = NULL;
112 } 114 }
@@ -166,3 +168,14 @@ void hashtab_stat(struct hashtab *h, struct hashtab_info *info)
166 info->slots_used = slots_used; 168 info->slots_used = slots_used;
167 info->max_chain_len = max_chain_len; 169 info->max_chain_len = max_chain_len;
168} 170}
171void hashtab_cache_init(void)
172{
173 hashtab_node_cachep = kmem_cache_create("hashtab_node",
174 sizeof(struct hashtab_node),
175 0, SLAB_PANIC, NULL);
176}
177
178void hashtab_cache_destroy(void)
179{
180 kmem_cache_destroy(hashtab_node_cachep);
181}