diff options
author | Vijay Bellur <vijay@gluster.com> | 2009-08-15 12:58:08 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2009-08-19 17:57:53 -0700 |
commit | b4d6c3d1bb461d2c8a396c9ed3881a4da40fc6ab (patch) | |
tree | 7a5a15665d46a91b9d4d744b0da599c4628d7f6c /libglusterfs/src/inode.c | |
parent | a31b0016347b3bc9b341fa0f4541ed137224f593 (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.c | 76 |
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); +} + |