summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src')
-rw-r--r--libglusterfs/src/inode.c21
-rw-r--r--libglusterfs/src/inode.h6
-rw-r--r--libglusterfs/src/xlator.c19
-rw-r--r--libglusterfs/src/xlator.h3
4 files changed, 49 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);