aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/auth.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/auth.c')
-rw-r--r--net/sunrpc/auth.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c
index db135543d21e..eef76a1f1dd6 100644
--- a/net/sunrpc/auth.c
+++ b/net/sunrpc/auth.c
@@ -145,12 +145,15 @@ int
145rpcauth_init_credcache(struct rpc_auth *auth) 145rpcauth_init_credcache(struct rpc_auth *auth)
146{ 146{
147 struct rpc_cred_cache *new; 147 struct rpc_cred_cache *new;
148 unsigned int hashsize;
148 int i; 149 int i;
149 150
150 new = kmalloc(sizeof(*new), GFP_KERNEL); 151 new = kmalloc(sizeof(*new), GFP_KERNEL);
151 if (!new) 152 if (!new)
152 return -ENOMEM; 153 return -ENOMEM;
153 for (i = 0; i < RPC_CREDCACHE_NR; i++) 154 new->hashbits = RPC_CREDCACHE_HASHBITS;
155 hashsize = 1U << new->hashbits;
156 for (i = 0; i < hashsize; i++)
154 INIT_HLIST_HEAD(&new->hashtable[i]); 157 INIT_HLIST_HEAD(&new->hashtable[i]);
155 spin_lock_init(&new->lock); 158 spin_lock_init(&new->lock);
156 auth->au_credcache = new; 159 auth->au_credcache = new;
@@ -183,11 +186,12 @@ rpcauth_clear_credcache(struct rpc_cred_cache *cache)
183 LIST_HEAD(free); 186 LIST_HEAD(free);
184 struct hlist_head *head; 187 struct hlist_head *head;
185 struct rpc_cred *cred; 188 struct rpc_cred *cred;
189 unsigned int hashsize = 1U << cache->hashbits;
186 int i; 190 int i;
187 191
188 spin_lock(&rpc_credcache_lock); 192 spin_lock(&rpc_credcache_lock);
189 spin_lock(&cache->lock); 193 spin_lock(&cache->lock);
190 for (i = 0; i < RPC_CREDCACHE_NR; i++) { 194 for (i = 0; i < hashsize; i++) {
191 head = &cache->hashtable[i]; 195 head = &cache->hashtable[i];
192 while (!hlist_empty(head)) { 196 while (!hlist_empty(head)) {
193 cred = hlist_entry(head->first, struct rpc_cred, cr_hash); 197 cred = hlist_entry(head->first, struct rpc_cred, cr_hash);
@@ -297,7 +301,7 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,
297 *entry, *new; 301 *entry, *new;
298 unsigned int nr; 302 unsigned int nr;
299 303
300 nr = hash_long(acred->uid, RPC_CREDCACHE_HASHBITS); 304 nr = hash_long(acred->uid, cache->hashbits);
301 305
302 rcu_read_lock(); 306 rcu_read_lock();
303 hlist_for_each_entry_rcu(entry, pos, &cache->hashtable[nr], cr_hash) { 307 hlist_for_each_entry_rcu(entry, pos, &cache->hashtable[nr], cr_hash) {