b7d4d7
From a18f03cbf2b5652f8617cb4dd236bb4ca9838d96 Mon Sep 17 00:00:00 2001
b7d4d7
From: Mohit Agrawal <moagrawa@redhat.com>
b7d4d7
Date: Tue, 6 Oct 2020 16:54:15 +0530
b7d4d7
Subject: [PATCH 509/511] core: configure optimum inode table hash_size for shd
b7d4d7
b7d4d7
In brick_mux environment a shd process consume high memory.
b7d4d7
After print the statedump i have found it allocates 1M per afr xlator
b7d4d7
for all bricks.In case of configure 4k volumes it consumes almost total
b7d4d7
6G RSS size in which 4G consumes by inode_tables
b7d4d7
b7d4d7
[cluster/replicate.test1-replicate-0 - usage-type gf_common_mt_list_head memusage]
b7d4d7
size=1273488
b7d4d7
num_allocs=2
b7d4d7
max_size=1273488
b7d4d7
max_num_allocs=2
b7d4d7
total_allocs=2
b7d4d7
b7d4d7
inode_new_table function allocates memory(1M) for a list of inode and dentry hash.
b7d4d7
For shd lru_limit size is 1 so we don't need to create a big hash table so to reduce
b7d4d7
RSS size for shd process pass optimum bucket count at the time of creating inode_table.
b7d4d7
b7d4d7
> Change-Id: I039716d42321a232fdee1ee8fd50295e638715bb
b7d4d7
> Fixes: #1538
b7d4d7
> Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
b7d4d7
> (Cherry pick from commit ca6bbc486e76fdb9a8e07119bb10d7fa45b2e93b)
b7d4d7
> (Reviewed on upstream link https://github.com/gluster/glusterfs/issues/1538)
b7d4d7
b7d4d7
Change-Id: I039716d42321a232fdee1ee8fd50295e638715bb
b7d4d7
BUG: 1898777
b7d4d7
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
b7d4d7
Reviewed-on: https://code.engineering.redhat.com/gerrit/221191
b7d4d7
Tested-by: RHGS Build Bot <nigelb@redhat.com>
b7d4d7
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
b7d4d7
---
b7d4d7
 api/src/glfs-master.c                          |  2 +-
b7d4d7
 libglusterfs/src/glusterfs/inode.h             | 17 +++++----
b7d4d7
 libglusterfs/src/inode.c                       | 53 +++++++++++++++++---------
b7d4d7
 xlators/cluster/afr/src/afr.c                  | 10 ++++-
b7d4d7
 xlators/cluster/dht/src/dht-rebalance.c        |  3 +-
b7d4d7
 xlators/cluster/ec/src/ec.c                    |  2 +-
b7d4d7
 xlators/features/bit-rot/src/bitd/bit-rot.c    |  2 +-
b7d4d7
 xlators/features/quota/src/quotad-helpers.c    |  2 +-
b7d4d7
 xlators/features/trash/src/trash.c             |  4 +-
b7d4d7
 xlators/mount/fuse/src/fuse-bridge.c           |  6 +--
b7d4d7
 xlators/nfs/server/src/nfs.c                   |  2 +-
b7d4d7
 xlators/protocol/server/src/server-handshake.c |  3 +-
b7d4d7
 12 files changed, 66 insertions(+), 40 deletions(-)
b7d4d7
b7d4d7
diff --git a/api/src/glfs-master.c b/api/src/glfs-master.c
b7d4d7
index b4473b1..9e604d3 100644
b7d4d7
--- a/api/src/glfs-master.c
b7d4d7
+++ b/api/src/glfs-master.c
b7d4d7
@@ -45,7 +45,7 @@ graph_setup(struct glfs *fs, glusterfs_graph_t *graph)
b7d4d7
         }
b7d4d7
 
b7d4d7
         if (!new_subvol->itable) {
b7d4d7
-            itable = inode_table_new(131072, new_subvol);
b7d4d7
+            itable = inode_table_new(131072, new_subvol, 0, 0);
b7d4d7
             if (!itable) {
b7d4d7
                 errno = ENOMEM;
b7d4d7
                 ret = -1;
b7d4d7
diff --git a/libglusterfs/src/glusterfs/inode.h b/libglusterfs/src/glusterfs/inode.h
b7d4d7
index c875653..62c093d 100644
b7d4d7
--- a/libglusterfs/src/glusterfs/inode.h
b7d4d7
+++ b/libglusterfs/src/glusterfs/inode.h
b7d4d7
@@ -35,11 +35,12 @@ typedef struct _dentry dentry_t;
b7d4d7
 
b7d4d7
 struct _inode_table {
b7d4d7
     pthread_mutex_t lock;
b7d4d7
-    size_t hashsize;    /* bucket size of inode hash and dentry hash */
b7d4d7
-    char *name;         /* name of the inode table, just for gf_log() */
b7d4d7
-    inode_t *root;      /* root directory inode, with number 1 */
b7d4d7
-    xlator_t *xl;       /* xlator to be called to do purge */
b7d4d7
-    uint32_t lru_limit; /* maximum LRU cache size */
b7d4d7
+    size_t dentry_hashsize; /* Number of buckets for dentry hash*/
b7d4d7
+    size_t inode_hashsize;  /* Size of inode hash table */
b7d4d7
+    char *name;             /* name of the inode table, just for gf_log() */
b7d4d7
+    inode_t *root;          /* root directory inode, with number 1 */
b7d4d7
+    xlator_t *xl;           /* xlator to be called to do purge */
b7d4d7
+    uint32_t lru_limit;     /* maximum LRU cache size */
b7d4d7
     struct list_head *inode_hash; /* buckets for inode hash table */
b7d4d7
     struct list_head *name_hash;  /* buckets for dentry hash table */
b7d4d7
     struct list_head active; /* list of inodes currently active (in an fop) */
b7d4d7
@@ -116,12 +117,14 @@ struct _inode {
b7d4d7
 #define GFID_STR_PFX_LEN (sizeof(GFID_STR_PFX) - 1)
b7d4d7
 
b7d4d7
 inode_table_t *
b7d4d7
-inode_table_new(uint32_t lru_limit, xlator_t *xl);
b7d4d7
+inode_table_new(uint32_t lru_limit, xlator_t *xl, uint32_t dhash_size,
b7d4d7
+                uint32_t inodehash_size);
b7d4d7
 
b7d4d7
 inode_table_t *
b7d4d7
 inode_table_with_invalidator(uint32_t lru_limit, xlator_t *xl,
b7d4d7
                              int32_t (*invalidator_fn)(xlator_t *, inode_t *),
b7d4d7
-                             xlator_t *invalidator_xl);
b7d4d7
+                             xlator_t *invalidator_xl, uint32_t dentry_hashsize,
b7d4d7
+                             uint32_t inode_hashsize);
b7d4d7
 
b7d4d7
 void
b7d4d7
 inode_table_destroy_all(glusterfs_ctx_t *ctx);
b7d4d7
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c
b7d4d7
index 71b2d2a..98f8ea6 100644
b7d4d7
--- a/libglusterfs/src/inode.c
b7d4d7
+++ b/libglusterfs/src/inode.c
b7d4d7
@@ -763,7 +763,7 @@ inode_grep(inode_table_t *table, inode_t *parent, const char *name)
b7d4d7
         return NULL;
b7d4d7
     }
b7d4d7
 
b7d4d7
-    int hash = hash_dentry(parent, name, table->hashsize);
b7d4d7
+    int hash = hash_dentry(parent, name, table->dentry_hashsize);
b7d4d7
 
b7d4d7
     pthread_mutex_lock(&table->lock);
b7d4d7
     {
b7d4d7
@@ -839,7 +839,7 @@ inode_grep_for_gfid(inode_table_t *table, inode_t *parent, const char *name,
b7d4d7
         return ret;
b7d4d7
     }
b7d4d7
 
b7d4d7
-    int hash = hash_dentry(parent, name, table->hashsize);
b7d4d7
+    int hash = hash_dentry(parent, name, table->dentry_hashsize);
b7d4d7
 
b7d4d7
     pthread_mutex_lock(&table->lock);
b7d4d7
     {
b7d4d7
@@ -903,7 +903,7 @@ inode_find(inode_table_t *table, uuid_t gfid)
b7d4d7
         return NULL;
b7d4d7
     }
b7d4d7
 
b7d4d7
-    int hash = hash_gfid(gfid, 65536);
b7d4d7
+    int hash = hash_gfid(gfid, table->inode_hashsize);
b7d4d7
 
b7d4d7
     pthread_mutex_lock(&table->lock);
b7d4d7
     {
b7d4d7
@@ -964,7 +964,7 @@ __inode_link(inode_t *inode, inode_t *parent, const char *name,
b7d4d7
             return NULL;
b7d4d7
         }
b7d4d7
 
b7d4d7
-        int ihash = hash_gfid(iatt->ia_gfid, 65536);
b7d4d7
+        int ihash = hash_gfid(iatt->ia_gfid, table->inode_hashsize);
b7d4d7
 
b7d4d7
         old_inode = __inode_find(table, iatt->ia_gfid, ihash);
b7d4d7
 
b7d4d7
@@ -1043,7 +1043,7 @@ inode_link(inode_t *inode, inode_t *parent, const char *name, struct iatt *iatt)
b7d4d7
     table = inode->table;
b7d4d7
 
b7d4d7
     if (parent && name) {
b7d4d7
-        hash = hash_dentry(parent, name, table->hashsize);
b7d4d7
+        hash = hash_dentry(parent, name, table->dentry_hashsize);
b7d4d7
     }
b7d4d7
 
b7d4d7
     if (name && strchr(name, '/')) {
b7d4d7
@@ -1262,7 +1262,7 @@ inode_rename(inode_table_t *table, inode_t *srcdir, const char *srcname,
b7d4d7
     }
b7d4d7
 
b7d4d7
     if (dstdir && dstname) {
b7d4d7
-        hash = hash_dentry(dstdir, dstname, table->hashsize);
b7d4d7
+        hash = hash_dentry(dstdir, dstname, table->dentry_hashsize);
b7d4d7
     }
b7d4d7
 
b7d4d7
     pthread_mutex_lock(&table->lock);
b7d4d7
@@ -1626,7 +1626,8 @@ __inode_table_init_root(inode_table_t *table)
b7d4d7
 inode_table_t *
b7d4d7
 inode_table_with_invalidator(uint32_t lru_limit, xlator_t *xl,
b7d4d7
                              int32_t (*invalidator_fn)(xlator_t *, inode_t *),
b7d4d7
-                             xlator_t *invalidator_xl)
b7d4d7
+                             xlator_t *invalidator_xl, uint32_t dentry_hashsize,
b7d4d7
+                             uint32_t inode_hashsize)
b7d4d7
 {
b7d4d7
     inode_table_t *new = NULL;
b7d4d7
     uint32_t mem_pool_size = lru_limit;
b7d4d7
@@ -1644,7 +1645,19 @@ inode_table_with_invalidator(uint32_t lru_limit, xlator_t *xl,
b7d4d7
     new->invalidator_fn = invalidator_fn;
b7d4d7
     new->invalidator_xl = invalidator_xl;
b7d4d7
 
b7d4d7
-    new->hashsize = 14057; /* TODO: Random Number?? */
b7d4d7
+    if (dentry_hashsize == 0) {
b7d4d7
+        /* Prime number for uniform distribution */
b7d4d7
+        new->dentry_hashsize = 14057;
b7d4d7
+    } else {
b7d4d7
+        new->dentry_hashsize = dentry_hashsize;
b7d4d7
+    }
b7d4d7
+
b7d4d7
+    if (inode_hashsize == 0) {
b7d4d7
+        /* The size of hash table always should be power of 2 */
b7d4d7
+        new->inode_hashsize = 65536;
b7d4d7
+    } else {
b7d4d7
+        new->inode_hashsize = inode_hashsize;
b7d4d7
+    }
b7d4d7
 
b7d4d7
     /* In case FUSE is initing the inode table. */
b7d4d7
     if (!mem_pool_size || (mem_pool_size > DEFAULT_INODE_MEMPOOL_ENTRIES))
b7d4d7
@@ -1658,13 +1671,13 @@ inode_table_with_invalidator(uint32_t lru_limit, xlator_t *xl,
b7d4d7
     if (!new->dentry_pool)
b7d4d7
         goto out;
b7d4d7
 
b7d4d7
-    new->inode_hash = (void *)GF_CALLOC(65536, sizeof(struct list_head),
b7d4d7
-                                        gf_common_mt_list_head);
b7d4d7
+    new->inode_hash = (void *)GF_CALLOC(
b7d4d7
+        new->inode_hashsize, sizeof(struct list_head), gf_common_mt_list_head);
b7d4d7
     if (!new->inode_hash)
b7d4d7
         goto out;
b7d4d7
 
b7d4d7
-    new->name_hash = (void *)GF_CALLOC(new->hashsize, sizeof(struct list_head),
b7d4d7
-                                       gf_common_mt_list_head);
b7d4d7
+    new->name_hash = (void *)GF_CALLOC(
b7d4d7
+        new->dentry_hashsize, sizeof(struct list_head), gf_common_mt_list_head);
b7d4d7
     if (!new->name_hash)
b7d4d7
         goto out;
b7d4d7
 
b7d4d7
@@ -1675,11 +1688,11 @@ inode_table_with_invalidator(uint32_t lru_limit, xlator_t *xl,
b7d4d7
     if (!new->fd_mem_pool)
b7d4d7
         goto out;
b7d4d7
 
b7d4d7
-    for (i = 0; i < 65536; i++) {
b7d4d7
+    for (i = 0; i < new->inode_hashsize; i++) {
b7d4d7
         INIT_LIST_HEAD(&new->inode_hash[i]);
b7d4d7
     }
b7d4d7
 
b7d4d7
-    for (i = 0; i < new->hashsize; i++) {
b7d4d7
+    for (i = 0; i < new->dentry_hashsize; i++) {
b7d4d7
         INIT_LIST_HEAD(&new->name_hash[i]);
b7d4d7
     }
b7d4d7
 
b7d4d7
@@ -1717,10 +1730,12 @@ out:
b7d4d7
 }
b7d4d7
 
b7d4d7
 inode_table_t *
b7d4d7
-inode_table_new(uint32_t lru_limit, xlator_t *xl)
b7d4d7
+inode_table_new(uint32_t lru_limit, xlator_t *xl, uint32_t dentry_hashsize,
b7d4d7
+                uint32_t inode_hashsize)
b7d4d7
 {
b7d4d7
     /* Only fuse for now requires the inode table with invalidator */
b7d4d7
-    return inode_table_with_invalidator(lru_limit, xl, NULL, NULL);
b7d4d7
+    return inode_table_with_invalidator(lru_limit, xl, NULL, NULL,
b7d4d7
+                                        dentry_hashsize, inode_hashsize);
b7d4d7
 }
b7d4d7
 
b7d4d7
 int
b7d4d7
@@ -2439,8 +2454,10 @@ inode_table_dump(inode_table_t *itable, char *prefix)
b7d4d7
         return;
b7d4d7
     }
b7d4d7
 
b7d4d7
-    gf_proc_dump_build_key(key, prefix, "hashsize");
b7d4d7
-    gf_proc_dump_write(key, "%" GF_PRI_SIZET, itable->hashsize);
b7d4d7
+    gf_proc_dump_build_key(key, prefix, "dentry_hashsize");
b7d4d7
+    gf_proc_dump_write(key, "%" GF_PRI_SIZET, itable->dentry_hashsize);
b7d4d7
+    gf_proc_dump_build_key(key, prefix, "inode_hashsize");
b7d4d7
+    gf_proc_dump_write(key, "%" GF_PRI_SIZET, itable->inode_hashsize);
b7d4d7
     gf_proc_dump_build_key(key, prefix, "name");
b7d4d7
     gf_proc_dump_write(key, "%s", itable->name);
b7d4d7
 
b7d4d7
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c
b7d4d7
index 8f9e71f..bfa464f 100644
b7d4d7
--- a/xlators/cluster/afr/src/afr.c
b7d4d7
+++ b/xlators/cluster/afr/src/afr.c
b7d4d7
@@ -594,7 +594,15 @@ init(xlator_t *this)
b7d4d7
         goto out;
b7d4d7
     }
b7d4d7
 
b7d4d7
-    this->itable = inode_table_new(SHD_INODE_LRU_LIMIT, this);
b7d4d7
+    if (priv->shd.iamshd) {
b7d4d7
+        /* Number of hash bucket should be prime number so declare 131
b7d4d7
+           total dentry hash buckets
b7d4d7
+        */
b7d4d7
+        this->itable = inode_table_new(SHD_INODE_LRU_LIMIT, this, 131, 128);
b7d4d7
+    } else {
b7d4d7
+        this->itable = inode_table_new(SHD_INODE_LRU_LIMIT, this, 0, 0);
b7d4d7
+    }
b7d4d7
+
b7d4d7
     if (!this->itable) {
b7d4d7
         ret = -ENOMEM;
b7d4d7
         goto out;
b7d4d7
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
b7d4d7
index 16ac16c..072896d 100644
b7d4d7
--- a/xlators/cluster/dht/src/dht-rebalance.c
b7d4d7
+++ b/xlators/cluster/dht/src/dht-rebalance.c
b7d4d7
@@ -1168,7 +1168,6 @@ __dht_rebalance_migrate_data(xlator_t *this, gf_defrag_info_t *defrag,
b7d4d7
             break;
b7d4d7
         }
b7d4d7
 
b7d4d7
-
b7d4d7
         offset += ret;
b7d4d7
         total += ret;
b7d4d7
 
b7d4d7
@@ -2467,7 +2466,7 @@ dht_build_root_inode(xlator_t *this, inode_t **inode)
b7d4d7
         0,
b7d4d7
     };
b7d4d7
 
b7d4d7
-    itable = inode_table_new(0, this);
b7d4d7
+    itable = inode_table_new(0, this, 0, 0);
b7d4d7
     if (!itable)
b7d4d7
         return;
b7d4d7
 
b7d4d7
diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c
b7d4d7
index 3f31c74..4118c3b 100644
b7d4d7
--- a/xlators/cluster/ec/src/ec.c
b7d4d7
+++ b/xlators/cluster/ec/src/ec.c
b7d4d7
@@ -734,7 +734,7 @@ init(xlator_t *this)
b7d4d7
     GF_OPTION_INIT("stripe-cache", ec->stripe_cache, uint32, failed);
b7d4d7
     GF_OPTION_INIT("quorum-count", ec->quorum_count, uint32, failed);
b7d4d7
 
b7d4d7
-    this->itable = inode_table_new(EC_SHD_INODE_LRU_LIMIT, this);
b7d4d7
+    this->itable = inode_table_new(EC_SHD_INODE_LRU_LIMIT, this, 0, 0);
b7d4d7
     if (!this->itable)
b7d4d7
         goto failed;
b7d4d7
 
b7d4d7
diff --git a/xlators/features/bit-rot/src/bitd/bit-rot.c b/xlators/features/bit-rot/src/bitd/bit-rot.c
b7d4d7
index 424c0d5..4e0e798 100644
b7d4d7
--- a/xlators/features/bit-rot/src/bitd/bit-rot.c
b7d4d7
+++ b/xlators/features/bit-rot/src/bitd/bit-rot.c
b7d4d7
@@ -1658,7 +1658,7 @@ notify(xlator_t *this, int32_t event, void *data, ...)
b7d4d7
                 child->child_up = 1;
b7d4d7
                 child->xl = subvol;
b7d4d7
                 if (!child->table)
b7d4d7
-                    child->table = inode_table_new(4096, subvol);
b7d4d7
+                    child->table = inode_table_new(4096, subvol, 0, 0);
b7d4d7
 
b7d4d7
                 _br_qchild_event(this, child, br_brick_connect);
b7d4d7
                 pthread_cond_signal(&priv->cond);
b7d4d7
diff --git a/xlators/features/quota/src/quotad-helpers.c b/xlators/features/quota/src/quotad-helpers.c
b7d4d7
index d9f0351..46ac116 100644
b7d4d7
--- a/xlators/features/quota/src/quotad-helpers.c
b7d4d7
+++ b/xlators/features/quota/src/quotad-helpers.c
b7d4d7
@@ -32,7 +32,7 @@ get_quotad_aggregator_state(xlator_t *this, rpcsvc_request_t *req)
b7d4d7
     UNLOCK(&priv->lock);
b7d4d7
 
b7d4d7
     if (active_subvol->itable == NULL)
b7d4d7
-        active_subvol->itable = inode_table_new(4096, active_subvol);
b7d4d7
+        active_subvol->itable = inode_table_new(4096, active_subvol, 0, 0);
b7d4d7
 
b7d4d7
     state->itable = active_subvol->itable;
b7d4d7
 
b7d4d7
diff --git a/xlators/features/trash/src/trash.c b/xlators/features/trash/src/trash.c
b7d4d7
index 93f020f..099c887 100644
b7d4d7
--- a/xlators/features/trash/src/trash.c
b7d4d7
+++ b/xlators/features/trash/src/trash.c
b7d4d7
@@ -2261,7 +2261,7 @@ reconfigure(xlator_t *this, dict_t *options)
b7d4d7
 
b7d4d7
     if (!active_earlier && active_now) {
b7d4d7
         if (!priv->trash_itable) {
b7d4d7
-            priv->trash_itable = inode_table_new(0, this);
b7d4d7
+            priv->trash_itable = inode_table_new(0, this, 0, 0);
b7d4d7
             if (!priv->trash_itable) {
b7d4d7
                 ret = -ENOMEM;
b7d4d7
                 gf_log(this->name, GF_LOG_ERROR,
b7d4d7
@@ -2533,7 +2533,7 @@ init(xlator_t *this)
b7d4d7
     }
b7d4d7
 
b7d4d7
     if (priv->state) {
b7d4d7
-        priv->trash_itable = inode_table_new(0, this);
b7d4d7
+        priv->trash_itable = inode_table_new(0, this, 0, 0);
b7d4d7
         if (!priv->trash_itable) {
b7d4d7
             ret = -ENOMEM;
b7d4d7
             priv->state = _gf_false;
b7d4d7
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
b7d4d7
index 1bddac2..919eea3 100644
b7d4d7
--- a/xlators/mount/fuse/src/fuse-bridge.c
b7d4d7
+++ b/xlators/mount/fuse/src/fuse-bridge.c
b7d4d7
@@ -6298,10 +6298,10 @@ fuse_graph_setup(xlator_t *this, glusterfs_graph_t *graph)
b7d4d7
         }
b7d4d7
 
b7d4d7
 #if FUSE_KERNEL_MINOR_VERSION >= 11
b7d4d7
-        itable = inode_table_with_invalidator(priv->lru_limit, graph->top,
b7d4d7
-                                              fuse_inode_invalidate_fn, this);
b7d4d7
+        itable = inode_table_with_invalidator(
b7d4d7
+            priv->lru_limit, graph->top, fuse_inode_invalidate_fn, this, 0, 0);
b7d4d7
 #else
b7d4d7
-        itable = inode_table_new(0, graph->top);
b7d4d7
+        itable = inode_table_new(0, graph->top, 0, 0);
b7d4d7
 #endif
b7d4d7
         if (!itable) {
b7d4d7
             ret = -1;
b7d4d7
diff --git a/xlators/nfs/server/src/nfs.c b/xlators/nfs/server/src/nfs.c
b7d4d7
index ebded41..402be30 100644
b7d4d7
--- a/xlators/nfs/server/src/nfs.c
b7d4d7
+++ b/xlators/nfs/server/src/nfs.c
b7d4d7
@@ -564,7 +564,7 @@ nfs_init_subvolume(struct nfs_state *nfs, xlator_t *xl)
b7d4d7
         return -1;
b7d4d7
 
b7d4d7
     lrusize = nfs->memfactor * GF_NFS_INODE_LRU_MULT;
b7d4d7
-    xl->itable = inode_table_new(lrusize, xl);
b7d4d7
+    xl->itable = inode_table_new(lrusize, xl, 0, 0);
b7d4d7
     if (!xl->itable) {
b7d4d7
         gf_msg(GF_NFS, GF_LOG_CRITICAL, ENOMEM, NFS_MSG_NO_MEMORY,
b7d4d7
                "Failed to allocate inode table");
b7d4d7
diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c
b7d4d7
index 1d1177d..eeca73c 100644
b7d4d7
--- a/xlators/protocol/server/src/server-handshake.c
b7d4d7
+++ b/xlators/protocol/server/src/server-handshake.c
b7d4d7
@@ -36,7 +36,6 @@ gf_compare_client_version(rpcsvc_request_t *req, int fop_prognum,
b7d4d7
     return ret;
b7d4d7
 }
b7d4d7
 
b7d4d7
-
b7d4d7
 int
b7d4d7
 server_getspec(rpcsvc_request_t *req)
b7d4d7
 {
b7d4d7
@@ -629,7 +628,7 @@ server_setvolume(rpcsvc_request_t *req)
b7d4d7
 
b7d4d7
             /* TODO: what is this ? */
b7d4d7
             client->bound_xl->itable = inode_table_new(conf->inode_lru_limit,
b7d4d7
-                                                       client->bound_xl);
b7d4d7
+                                                       client->bound_xl, 0, 0);
b7d4d7
         }
b7d4d7
     }
b7d4d7
     UNLOCK(&conf->itable_lock);
b7d4d7
-- 
b7d4d7
1.8.3.1
b7d4d7