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