summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/inode.c
diff options
context:
space:
mode:
authorVijay Bellur <vijay@gluster.com>2009-08-15 12:58:08 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-08-19 17:57:53 -0700
commitb4d6c3d1bb461d2c8a396c9ed3881a4da40fc6ab (patch)
tree7a5a15665d46a91b9d4d744b0da599c4628d7f6c /libglusterfs/src/inode.c
parenta31b0016347b3bc9b341fa0f4541ed137224f593 (diff)
TAKE2[PATCH BUG:213 1/1] Support for Process State Dump
Support for process state dump. Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 213 (Support for process state dump) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=213
Diffstat (limited to 'libglusterfs/src/inode.c')
-rw-r--r--libglusterfs/src/inode.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c
index 9796071d87e..138e30068d4 100644
--- a/libglusterfs/src/inode.c
+++ b/libglusterfs/src/inode.c
@@ -24,6 +24,7 @@
#include "inode.h"
#include "common-utils.h"
+#include "statedump.h"
#include <pthread.h>
#include <sys/types.h>
#include <stdint.h>
@@ -35,6 +36,18 @@
move latest accessed dentry to list_head of inode
*/
+#define INODE_DUMP_LIST(head, key_buf, key_prefix, list_type, fn) \
+{ \
+ int i = 1;\
+ inode_t *inode = NULL;\
+ list_for_each_entry (inode, head, list) {\
+ gf_proc_dump_build_key(key_buf, key_prefix, "%s.%d",list_type,\
+ i++);\
+ gf_proc_dump_add_section(key_buf);\
+ inode_dump(inode, key, fn);\
+ }\
+}
+
static inode_t *
__inode_unref (inode_t *inode);
@@ -1194,3 +1207,66 @@ unlock:
return ret;
}
+
+void
+inode_dump (inode_t *inode, char *prefix, inode_priv_dump_fn fn)
+{
+ char key[GF_DUMP_MAX_BUF_LEN];
+ int ret;
+
+ if (!inode)
+ return;
+
+ ret = TRY_LOCK(&inode->lock);
+
+ if (ret != 0) {
+ gf_log("", GF_LOG_WARNING, "Unable to dump inode"
+ " errno: %d", errno);
+ return;
+ }
+
+ gf_proc_dump_build_key(key, prefix, "nlookup");
+ gf_proc_dump_write(key, "%ld", inode->nlookup);
+ gf_proc_dump_build_key(key, prefix, "generation");
+ gf_proc_dump_write(key, "%ld", inode->generation);
+ gf_proc_dump_build_key(key, prefix, "ref");
+ gf_proc_dump_write(key, "%u", inode->ref);
+ gf_proc_dump_build_key(key, prefix, "ino");
+ gf_proc_dump_write(key, "%ld", inode->ino);
+ gf_proc_dump_build_key(key, prefix, "st_mode");
+ gf_proc_dump_write(key, "%d", inode->st_mode);
+ UNLOCK(&inode->lock);
+ if (fn)
+ fn (inode);
+}
+
+void
+inode_table_dump (inode_table_t *itable, char *prefix, inode_priv_dump_fn fn)
+{
+
+ char key[GF_DUMP_MAX_BUF_LEN];
+
+ if (!itable)
+ return;
+
+ memset(key, 0, sizeof(key));
+ gf_proc_dump_build_key(key, prefix, "hashsize");
+ gf_proc_dump_write(key, "%d", itable->hashsize);
+ gf_proc_dump_build_key(key, prefix, "name");
+ gf_proc_dump_write(key, "%s", itable->name);
+
+ gf_proc_dump_build_key(key, prefix, "lru_limit");
+ gf_proc_dump_write(key, "%d", itable->lru_limit);
+ gf_proc_dump_build_key(key, prefix, "active_size");
+ gf_proc_dump_write(key, "%d", itable->active_size);
+ gf_proc_dump_build_key(key, prefix, "lru_size");
+ gf_proc_dump_write(key, "%d", itable->lru_size);
+ gf_proc_dump_build_key(key, prefix, "purge_size");
+ gf_proc_dump_write(key, "%d", itable->purge_size);
+
+ pthread_mutex_lock(&itable->lock);
+ INODE_DUMP_LIST(&itable->active, key, prefix, "active", fn);
+ INODE_DUMP_LIST(&itable->lru, key, prefix, "lru", fn);
+ INODE_DUMP_LIST(&itable->purge, key, prefix, "purge", fn);
+}
+