diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2016-04-24 06:31:14 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2016-04-24 06:44:44 -0700 |
commit | 3c04a91f5245708d0a148bf01cfdac1d0d59c797 (patch) | |
tree | 3de196110d55780dd8df1ae36de9283abd7b4350 | |
parent | bfd5c7683708949e87bd40fb0ddb6933021c6912 (diff) |
statedump: Prevent (null) typestr to be printed
Problem:
After the commits: 7e44c783ad731856956929f6614bbe045c26ea3a - lock: use
spinlock only on multicore systems
a6aecae2cd8171b8538bfe5d2800bdd157380b85 - nfs: fix lock variable type
we see a lot of "[global.glusterfs - usage-type (null) memusage]" in statedump
because lock status is not all-zeros after init, and the memcmp to check that
a datatype is never allocated is invalid.
Fix:
Changed if a datatype is allocated or not check based on total_allocs. Also
removed setting typestr to NULL on gf_free even when num_allocs is 0. Because
even that is leading to 'null' memusage string to be printed in statedump.
BUG: 1329870
Change-Id: If2b01a557cbdc787625db32e276e06cee3ac46ee
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/14054
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
-rw-r--r-- | libglusterfs/src/mem-pool.c | 4 | ||||
-rw-r--r-- | libglusterfs/src/statedump.c | 4 | ||||
-rwxr-xr-x | tests/bugs/core/bug-834465.t | 8 |
3 files changed, 3 insertions, 13 deletions
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index 9a1320993d3..9533a733959 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -318,10 +318,6 @@ __gf_free (void *free_ptr) { mem_acct->rec[header->type].size -= header->size; mem_acct->rec[header->type].num_allocs--; - /* If all the instaces are freed up then ensure typestr is - * set to NULL */ - if (!mem_acct->rec[header->type].num_allocs) - mem_acct->rec[header->type].typestr = NULL; } UNLOCK (&mem_acct->rec[header->type].lock); diff --git a/libglusterfs/src/statedump.c b/libglusterfs/src/statedump.c index caf228a8b01..d4e7dbb3836 100644 --- a/libglusterfs/src/statedump.c +++ b/libglusterfs/src/statedump.c @@ -223,7 +223,6 @@ static void gf_proc_dump_xlator_mem_info (xlator_t *xl) { int i = 0; - struct mem_acct rec = {0,}; if (!xl) return; @@ -235,8 +234,7 @@ gf_proc_dump_xlator_mem_info (xlator_t *xl) gf_proc_dump_write ("num_types", "%d", xl->mem_acct->num_types); for (i = 0; i < xl->mem_acct->num_types; i++) { - if (!(memcmp (&xl->mem_acct->rec[i], &rec, - sizeof (struct mem_acct)))) + if (xl->mem_acct->rec[i].total_allocs == 0) continue; gf_proc_dump_add_section ("%s.%s - usage-type %s memusage", diff --git a/tests/bugs/core/bug-834465.t b/tests/bugs/core/bug-834465.t index 4bdee83ed2d..e21e95393a6 100755 --- a/tests/bugs/core/bug-834465.t +++ b/tests/bugs/core/bug-834465.t @@ -25,7 +25,7 @@ nalloc1=0 grep -A3 "fuse - usage-type gf_common_mt_fd_lk_ctx_node_t" $sdump1 if [ $? -eq '0' ] then - nalloc1=`grep -A3 "fuse - usage-type gf_common_mt_fd_lk_ctx_node_t" $sdump1 | grep num_allocs | cut -d '=' -f2` + nalloc1=`grep -A3 "fuse - usage-type gf_common_mt_fd_lk_ctx_node_t" $sdump1 | grep -E "^num_allocs" | cut -d '=' -f2` fi build_tester $(dirname $0)/bug-834465.c @@ -34,11 +34,7 @@ TEST $(dirname $0)/bug-834465 $M0/testfile sdump2=$(generate_mount_statedump $V0); -# With _gf_free now setting typestr to NULL when num_allocs become 0, it is -# expected that there wouldn't be any entry for gf_common_mt_fd_lk_ctx_node_t -# in the statedump file now - -nalloc2=`grep -A3 "fuse - usage-type gf_common_mt_fd_lk_ctx_node_t" $sdump2 | wc -l` +nalloc2=`grep -A3 "fuse - usage-type gf_common_mt_fd_lk_ctx_node_t" $sdump2 | grep -E "^num_allocs" | cut -d '=' -f2` TEST [ $nalloc1 -eq $nalloc2 ]; TEST rm -rf $MOUNTDIR/* |