diff options
| -rw-r--r-- | libglusterfs/src/inode.c | 21 | ||||
| -rw-r--r-- | libglusterfs/src/inode.h | 6 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.c | 19 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 3 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server.c | 10 | 
5 files changed, 59 insertions, 0 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index d4eade8ba88..373ba9beb39 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1238,6 +1238,27 @@ inode_path (inode_t *inode, const char *name, char **bufp)          return ret;  } +void +__inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit) +{ +        table->lru_limit = lru_limit; +        return; +} + + +void +inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit) +{ +        pthread_mutex_lock (&table->lock); +        { +                __inode_table_set_lru_limit (table, lru_limit); +        } +        pthread_mutex_unlock (&table->lock); + +        inode_table_prune (table); + +        return; +}  static int  inode_table_prune (inode_table_t *table) diff --git a/libglusterfs/src/inode.h b/libglusterfs/src/inode.h index 60adba68425..5d373fcaec9 100644 --- a/libglusterfs/src/inode.h +++ b/libglusterfs/src/inode.h @@ -251,4 +251,10 @@ inode_ctx_put(inode_t *inode, xlator_t *this, uint64_t v)  gf_boolean_t  __is_root_gfid (uuid_t gfid); +void +__inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit); + +void +inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit); +  #endif /* _INODE_H */ diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 4f8b8b21f95..7b873fcc79d 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -291,6 +291,25 @@ xlator_set_type (xlator_t *xl, const char *type)          return ret;  } +void +xlator_set_inode_lru_limit (xlator_t *this, void *data) +{ +        int inode_lru_limit = 0; + +        if (this->itable) { +                if (!data) { +                        gf_log (this->name, GF_LOG_WARNING, "input data is " +                                "NULL. Cannot update the lru limit of the inode" +                                " table. Continuing with older value"); +                        goto out; +                } +                inode_lru_limit = *(int *)data; +                inode_table_set_lru_limit (this->itable, inode_lru_limit); +        } + +out: +        return; +}  void  xlator_foreach (xlator_t *this, diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 47ae6cdd6b6..0c4e820c2d3 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -935,6 +935,9 @@ void xlator_foreach_depth_first (xlator_t *this,  xlator_t *xlator_search_by_name (xlator_t *any, const char *name); +void +xlator_set_inode_lru_limit (xlator_t *this, void *data); +  void inode_destroy_notify (inode_t *inode, const char *xlname);  int loc_copy (loc_t *dst, loc_t *src); diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index 04faee290ea..60092a557de 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -677,6 +677,8 @@ reconfigure (xlator_t *this, dict_t *options)          data_t                   *data;          int                       ret = 0;          char                     *statedump_path = NULL; +        xlator_t                 *xl     = NULL; +          conf = this->private;          if (!conf) { @@ -687,6 +689,14 @@ reconfigure (xlator_t *this, dict_t *options)                  conf->inode_lru_limit = inode_lru_limit;                  gf_log (this->name, GF_LOG_TRACE, "Reconfigured inode-lru-limit"                          " to %d", conf->inode_lru_limit); + +                /* traverse through the xlator graph. For each xlator in the +                   graph check whether it is a bound_xl or not (bound_xl means +                   the xlator will have its itable pointer set). If so, then +                   set the lru limit for the itable. +                */ +                xlator_foreach (this, xlator_set_inode_lru_limit, +                                &inode_lru_limit);          }          data = dict_get (options, "trace");  | 
