From: Paul Wankadia <jun...@google.com>
Signed-off-by: Valerie Aurora Henson <vaur...@redhat.com>
---
 include/automount.h |    2 +-
 lib/cache.c         |   29 ++++++++++++++++++-----------
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/include/automount.h b/include/automount.h
index 1ba0d3c..2a082b5 100644
--- a/include/automount.h
+++ b/include/automount.h
@@ -126,7 +126,7 @@ struct autofs_point;
 #define CHE_DUPLICATE  0x0020
 #define CHE_UNAVAIL    0x0040
 
-#define HASHSIZE               77
+#define HASHSIZE               4096
 #define NEGATIVE_TIMEOUT       10
 #define UMOUNT_RETRIES         8
 #define EXPIRE_RETRIES         3
diff --git a/lib/cache.c b/lib/cache.c
index ce47e04..36b8294 100644
--- a/lib/cache.c
+++ b/lib/cache.c
@@ -281,20 +281,27 @@ struct mapent_cache *cache_init_null_cache(struct master 
*master)
        return mc;
 }
 
-static unsigned int hash(const char *key)
+static u_int32_t hash(const char *key)
 {
-       unsigned long hashval;
+       u_int32_t hashval;
        char *s = (char *) key;
 
-       for (hashval = 0; *s != '\0';)
-               hashval += *s++;
+       for (hashval = 0; *s != '\0';) {
+               hashval += (unsigned char) *s++;
+               hashval += (hashval << 10);
+               hashval ^= (hashval >> 6);
+       }
+
+       hashval += (hashval << 3);
+       hashval ^= (hashval >> 11);
+       hashval += (hashval << 15);
 
        return hashval % HASHSIZE;
 }
 
-static unsigned int ino_hash(dev_t dev, ino_t ino)
+static u_int32_t ino_hash(dev_t dev, ino_t ino)
 {
-       unsigned long hashval;
+       u_int32_t hashval;
 
        hashval = dev + ino;
 
@@ -303,7 +310,7 @@ static unsigned int ino_hash(dev_t dev, ino_t ino)
 
 int cache_set_ino_index(struct mapent_cache *mc, const char *key, dev_t dev, 
ino_t ino)
 {
-       unsigned int ino_index = ino_hash(dev, ino);
+       u_int32_t ino_index = ino_hash(dev, ino);
        struct mapent *me;
 
        me = cache_lookup_distinct(mc, key);
@@ -325,7 +332,7 @@ struct mapent *cache_lookup_ino(struct mapent_cache *mc, 
dev_t dev, ino_t ino)
 {
        struct mapent *me = NULL;
        struct list_head *head, *p;
-       unsigned int ino_index;
+       u_int32_t ino_index;
 
        ino_index_lock(mc);
        ino_index = ino_hash(dev, ino);
@@ -371,7 +378,7 @@ struct mapent *cache_lookup_first(struct mapent_cache *mc)
 struct mapent *cache_lookup_next(struct mapent_cache *mc, struct mapent *me)
 {
        struct mapent *this;
-       unsigned long hashval;
+       u_int32_t hashval;
        unsigned int i;
 
        if (!me)
@@ -532,7 +539,7 @@ int cache_add(struct mapent_cache *mc, struct map_source 
*ms, const char *key, c
 {
        struct mapent *me, *existing = NULL;
        char *pkey, *pent;
-       unsigned int hashval = hash(key);
+       u_int32_t hashval = hash(key);
        int status;
 
        me = (struct mapent *) malloc(sizeof(struct mapent));
@@ -752,7 +759,7 @@ int cache_update(struct mapent_cache *mc, struct map_source 
*ms, const char *key
 int cache_delete(struct mapent_cache *mc, const char *key)
 {
        struct mapent *me = NULL, *pred;
-       unsigned int hashval = hash(key);
+       u_int32_t hashval = hash(key);
        int status, ret = CHE_OK;
        char *this;
 
-- 
1.6.0.4

_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to