summaryrefslogtreecommitdiffstats
path: root/libglusterfs
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2018-05-16 14:12:21 +0530
committerPranith Kumar K <pkarampu@redhat.com>2018-05-16 14:57:53 +0530
commit9ead9a66900b15387b4b7588ff5c1300810d5eba (patch)
tree3549df31aaee121bfbd471eb57c2900d5344062a /libglusterfs
parentf631ceb79e822bb5c3bbbaa2ad3a28a3f32e4251 (diff)
statedump: Prevent duplicate statedump for master and active
Csaba found that statedump of fusemount has two instances of each of the mem-accounting information. On debugging, I realized that statedump is called for both ctx->master and ctx->active. Since ctx->active is a sub-graph of ctx->master, there are duplicate entries. Fixed this part to prevent duplication in this patch. fixes bz#1578721 BUG: 1578721 Change-Id: I5a63b4f5933d4d720ac010c58e6dee3b27067d42 Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Diffstat (limited to 'libglusterfs')
-rw-r--r--libglusterfs/src/statedump.c67
1 files changed, 38 insertions, 29 deletions
diff --git a/libglusterfs/src/statedump.c b/libglusterfs/src/statedump.c
index 412a47b9383..874326f44ce 100644
--- a/libglusterfs/src/statedump.c
+++ b/libglusterfs/src/statedump.c
@@ -502,44 +502,53 @@ gf_proc_dump_dict_info (glusterfs_ctx_t *ctx)
}
static void
-gf_proc_dump_per_xlator_info (xlator_t *top)
+gf_proc_dump_single_xlator_info (xlator_t *trav)
{
- xlator_t *trav = top;
- glusterfs_ctx_t *ctx = top->ctx;
+ glusterfs_ctx_t *ctx = trav->ctx;
char itable_key[1024] = {0,};
- while (trav && !trav->cleanup_starting) {
- if (ctx->measure_latency)
- gf_proc_dump_latency_info (trav);
- gf_proc_dump_xlator_mem_info(trav);
+ if (trav->cleanup_starting)
+ return;
- if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &&
- (trav->itable)) {
- snprintf (itable_key, 1024, "%d.%s.itable",
- ctx->graph_id, trav->name);
- }
+ if (ctx->measure_latency)
+ gf_proc_dump_latency_info (trav);
- if (!trav->dumpops) {
- trav = trav->next;
- continue;
- }
+ gf_proc_dump_xlator_mem_info(trav);
- if (trav->dumpops->priv &&
- GF_PROC_DUMP_IS_XL_OPTION_ENABLED (priv))
- trav->dumpops->priv (trav);
+ if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &&
+ (trav->itable)) {
+ snprintf (itable_key, 1024, "%d.%s.itable",
+ ctx->graph_id, trav->name);
+ }
- if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &&
- (trav->dumpops->inode))
- trav->dumpops->inode (trav);
- if (trav->dumpops->fd &&
- GF_PROC_DUMP_IS_XL_OPTION_ENABLED (fd))
- trav->dumpops->fd (trav);
+ if (!trav->dumpops) {
+ return;
+ }
+
+ if (trav->dumpops->priv &&
+ GF_PROC_DUMP_IS_XL_OPTION_ENABLED (priv))
+ trav->dumpops->priv (trav);
+
+ if (GF_PROC_DUMP_IS_XL_OPTION_ENABLED (inode) &&
+ (trav->dumpops->inode))
+ trav->dumpops->inode (trav);
+ if (trav->dumpops->fd &&
+ GF_PROC_DUMP_IS_XL_OPTION_ENABLED (fd))
+ trav->dumpops->fd (trav);
- if (trav->dumpops->history &&
- GF_PROC_DUMP_IS_XL_OPTION_ENABLED (history))
- trav->dumpops->history (trav);
+ if (trav->dumpops->history &&
+ GF_PROC_DUMP_IS_XL_OPTION_ENABLED (history))
+ trav->dumpops->history (trav);
+}
+static void
+gf_proc_dump_per_xlator_info (xlator_t *top)
+{
+ xlator_t *trav = top;
+
+ while (trav && !trav->cleanup_starting) {
+ gf_proc_dump_single_xlator_info (trav);
trav = trav->next;
}
}
@@ -899,7 +908,7 @@ gf_proc_dump_info (int signum, glusterfs_ctx_t *ctx)
if (ctx->master) {
gf_proc_dump_add_section ("fuse");
- gf_proc_dump_xlator_info (ctx->master, _gf_false);
+ gf_proc_dump_single_xlator_info (ctx->master);
}
if (ctx->active) {