diff options
author | Vijay Bellur <vijay@gluster.com> | 2009-09-15 04:47:50 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2009-09-16 07:11:37 -0700 |
commit | 9fd8f212bc1f6031b9ad7eaaf014d39916881947 (patch) | |
tree | 788a6950630ee1df028c9d5cddecee038fe9fc49 | |
parent | dcfc4bdd5962ad18665d9ad3f3309884c941845e (diff) |
Dumop inodectx added
Added dumpop inodectx.
Support for dumop inodectx added in dht, locks and client-protocol.
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
-rw-r--r-- | libglusterfs/src/inode.c | 15 | ||||
-rw-r--r-- | libglusterfs/src/xlator.h | 3 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht.c | 29 | ||||
-rw-r--r-- | xlators/features/locks/src/posix.c | 26 | ||||
-rw-r--r-- | xlators/protocol/client/src/client-protocol.c | 28 |
5 files changed, 88 insertions, 13 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 06f742cc625..ff65d101ec3 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1213,6 +1213,8 @@ inode_dump (inode_t *inode, char *prefix) { char key[GF_DUMP_MAX_BUF_LEN]; int ret = -1; + xlator_t *xl = NULL; + int i = 0; if (!inode) return; @@ -1236,6 +1238,19 @@ inode_dump (inode_t *inode, char *prefix) gf_proc_dump_build_key(key, prefix, "st_mode"); gf_proc_dump_write(key, "%d", inode->st_mode); UNLOCK(&inode->lock); + if (!inode->_ctx) + goto out; + + for (i = 0; i < inode->table->xl->ctx->xl_count; i++) { + if (inode->_ctx[i].key) { + xl = (xlator_t *)(long)inode->_ctx[i].key; + if (xl->dumpops && xl->dumpops->inodectx) + xl->dumpops->inodectx (xl, inode); + } + } + +out: + return; } void diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 2e815af911a..4adbec2e5d8 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -812,11 +812,14 @@ typedef int32_t (*dumpop_inode_t) (xlator_t *this); typedef int32_t (*dumpop_fd_t) (xlator_t *this); +typedef int32_t (*dumpop_inodectx_t) (xlator_t *this, inode_t *ino); + struct xlator_dumpops { dumpop_priv_t priv; dumpop_inode_t inode; dumpop_fd_t fd; + dumpop_inodectx_t inodectx; }; typedef struct xlator_list { diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index 24782471e1d..46f3b87000c 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.c @@ -166,6 +166,34 @@ dht_priv_dump (xlator_t *this) return 0; } +int32_t +dht_inodectx_dump (xlator_t *this, inode_t *inode) +{ + int ret = -1; + char key_prefix[GF_DUMP_MAX_BUF_LEN]; + dht_layout_t *layout = NULL; + uint64_t tmp_layout = 0; + + if (!inode) + return -1; + + ret = inode_ctx_get (inode, this, &tmp_layout); + + if (ret != 0) + return ret; + + layout = (dht_layout_t *)(long)tmp_layout; + + if (!layout) + return -1; + + gf_proc_dump_build_key(key_prefix, "xlator.cluster.dht", + "%s.inode.%ld", this->name, inode->ino); + dht_layout_dump(layout, key_prefix); + + return 0; +} + int notify (xlator_t *this, int event, void *data, ...) { @@ -373,6 +401,7 @@ struct xlator_mops mops = { struct xlator_dumpops dumpops = { .priv = dht_priv_dump, + .inodectx = dht_inodectx_dump, }; diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c index 71098be5e13..5514d441495 100644 --- a/xlators/features/locks/src/posix.c +++ b/xlators/features/locks/src/posix.c @@ -769,32 +769,34 @@ pl_forget (xlator_t *this, } -void -pl_dump_inode_priv (inode_t *inode) +int32_t +pl_dump_inode_priv (xlator_t *this, inode_t *inode) { - int ret = -1; - uint64_t tmp_pl_inode = 0; - pl_inode_t *pl_inode = NULL; - char key[GF_DUMP_MAX_BUF_LEN]; + int ret = -1; + uint64_t tmp_pl_inode = 0; + pl_inode_t *pl_inode = NULL; + char key[GF_DUMP_MAX_BUF_LEN]; if (!inode) - return; + return -1; - ret = inode_ctx_get (inode, inode->table->xl, &tmp_pl_inode); + ret = inode_ctx_get (inode, this, &tmp_pl_inode); if (ret != 0) - return; + return ret; pl_inode = (pl_inode_t *)(long)tmp_pl_inode; if (!pl_inode) - return; + return -1; gf_proc_dump_build_key(key, "xlator.feature.locks.inode", - "%ld.%s",inode->ino, "mandatory"); + "%ld.mandatory",inode->ino); gf_proc_dump_write(key, "%d", pl_inode->mandatory); + + return 0; } @@ -916,7 +918,7 @@ struct xlator_mops mops = { }; struct xlator_dumpops dumpops = { - .inode = pl_dump_inode, + .inodectx = pl_dump_inode_priv, }; struct xlator_cbks cbks = { diff --git a/xlators/protocol/client/src/client-protocol.c b/xlators/protocol/client/src/client-protocol.c index bd6854caa6d..db4e507ae1a 100644 --- a/xlators/protocol/client/src/client-protocol.c +++ b/xlators/protocol/client/src/client-protocol.c @@ -6105,7 +6105,7 @@ client_priv_dump (xlator_t *this) conf = this->private; if (!conf) { - gf_log (this->name, GF_LOG_WARNING, + gf_log (this->name, GF_LOG_WARNING, "conf null in xlator"); return -1; } @@ -6141,6 +6141,31 @@ client_priv_dump (xlator_t *this) } +int32_t +client_inodectx_dump (xlator_t *this, inode_t *inode) +{ + ino_t par = 0; + int ret = -1; + char key[GF_DUMP_MAX_BUF_LEN]; + + if (!inode) + return -1; + + if (!this) + return -1; + + ret = inode_ctx_get (inode, this, &par); + + if (ret != 0) + return ret; + + gf_proc_dump_build_key(key, "xlator.protocol.client", + "%s.inode.%ld.par", + this->name,inode->ino); + gf_proc_dump_write(key, "%ld", par); + + return 0; +} /* * client_protocol_notify - notify function for client protocol @@ -6358,6 +6383,7 @@ struct xlator_cbks cbks = { struct xlator_dumpops dumpops = { .priv = client_priv_dump, + .inodectx = client_inodectx_dump, }; struct volume_options options[] = { |