summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2016-04-24 06:31:14 +0530
committerNiels de Vos <ndevos@redhat.com>2016-04-24 06:44:44 -0700
commit3c04a91f5245708d0a148bf01cfdac1d0d59c797 (patch)
tree3de196110d55780dd8df1ae36de9283abd7b4350
parentbfd5c7683708949e87bd40fb0ddb6933021c6912 (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.c4
-rw-r--r--libglusterfs/src/statedump.c4
-rwxr-xr-xtests/bugs/core/bug-834465.t8
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/*