From 9ead9a66900b15387b4b7588ff5c1300810d5eba Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Wed, 16 May 2018 14:12:21 +0530 Subject: 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 --- libglusterfs/src/statedump.c | 67 +++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 29 deletions(-) (limited to 'libglusterfs/src/statedump.c') 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) { -- cgit