summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2015-05-06 10:28:56 +0200
committerNiels de Vos <ndevos@redhat.com>2015-05-07 15:03:57 -0700
commiteb8847703b8560a045e7ed0336f895bcceda98ea (patch)
tree61a3b21f49e032231d16b4cad3f3d54e31c536dd
parent317560cc5544f8ca8286ba5ecedd8236746e9ebf (diff)
nfs: allocate the auth_cache->cache_dict on auth_cache_init()
It seems possible that auth_cache->cache_dict is not always allocated before it is accessed. Instead of allocating the dict upon the 1st access, just create it in auth_cache_init(). Change-Id: I00e60522478b433cb0aae0c1f0948eac544dfd2b URL: http://thread.gmane.org/gmane.comp.file-systems.gluster.devel/10710 BUG: 1143880 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/10600 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> Tested-by: NetBSD Build System
-rw-r--r--xlators/nfs/server/src/auth-cache.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/xlators/nfs/server/src/auth-cache.c b/xlators/nfs/server/src/auth-cache.c
index b33dc96db6f..848eed5e8fb 100644
--- a/xlators/nfs/server/src/auth-cache.c
+++ b/xlators/nfs/server/src/auth-cache.c
@@ -63,6 +63,13 @@ auth_cache_init (time_t ttl_sec)
GF_VALIDATE_OR_GOTO ("auth-cache", cache, out);
+ cache->cache_dict = dict_new ();
+ if (!cache->cache_dict) {
+ GF_FREE (cache);
+ cache = NULL;
+ goto out;
+ }
+
cache->ttl_sec = ttl_sec;
out:
return cache;
@@ -152,9 +159,7 @@ out:
}
/**
- * auth_cache_purge -- Purge the dict in the cache and set
- * the dict pointer to NULL. It will be allocated
- * on the first insert into the dict.
+ * auth_cache_purge -- Purge the dict in the cache and create a new empty one.
*
* @cache: Cache to purge
*
@@ -162,10 +167,10 @@ out:
void
auth_cache_purge (struct auth_cache *cache)
{
- dict_t *new_cache_dict = NULL;
+ dict_t *new_cache_dict = dict_new ();
dict_t *old_cache_dict = cache->cache_dict;
- if (!cache || !cache->cache_dict)
+ if (!cache)
goto out;
(void)__sync_lock_test_and_set (&cache->cache_dict, new_cache_dict);
@@ -264,15 +269,6 @@ cache_nfs_fh (struct auth_cache *cache, struct nfs3_fh *fh,
GF_VALIDATE_OR_GOTO (GF_NFS, cache, out);
GF_VALIDATE_OR_GOTO (GF_NFS, fh, out);
- /* If a dict has not been allocated already, allocate it. */
- if (!cache->cache_dict) {
- cache->cache_dict = dict_new ();
- if (!cache->cache_dict) {
- ret = -ENOMEM;
- goto out;
- }
- }
-
/* If we could already find it in the cache, just return */
ret = auth_cache_lookup (cache, fh, host_addr, &timestamp, &can_write);
if (ret == 0) {