From 636b48efd8a441543b6eec5c5d4cb2d119adcb75 Mon Sep 17 00:00:00 2001 From: Takayuki Nagata Date: Wed, 27 Jul 2016 17:29:15 +0900 Subject: [PATCH 1/2] Revert "bprocps: fix order of operations for %use of slabinfo" This reverts commit 99d71ad5810b8fbfab5c4c6be97f3e86953b6157. When nr_active_objs / nr_objs is calculated, the result will be 1 or 0 since the variables are integer. So the commit is wrong. --- proc/slab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proc/slab.c b/proc/slab.c index 2d7f9678..444b79cc 100644 --- a/proc/slab.c +++ b/proc/slab.c @@ -179,7 +179,7 @@ static int parse_slabinfo20(struct slab_info **list, struct slab_stat *stats, curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size; if (curr->nr_objs) { - curr->use = 100 * (curr->nr_active_objs / curr->nr_objs); + curr->use = 100 * curr->nr_active_objs / curr->nr_objs; stats->nr_active_caches++; } else curr->use = 0; From 23ba442c886f6250d1068a82fb7d0fc544acfd63 Mon Sep 17 00:00:00 2001 From: Takayuki Nagata Date: Thu, 4 Aug 2016 18:06:06 +0900 Subject: [PATCH 2/2] libprocps: use float to calculate %use of slabtop In some environments, 100 * nr_active_objs is calculated at first, and the result of lower 32bits is divided by nr_objs. This occurs even in a 64-bit architecture. So nr_active_objes > 42949672, %use will be incorrect. This fix casts type of nr_active_objs to float to calculate correctly the %use in 32-bit/64-bit architectures. Signed-off-by: Takayuki Nagata --- proc/slab.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proc/slab.c b/proc/slab.c index 444b79cc..49177416 100644 --- a/proc/slab.c +++ b/proc/slab.c @@ -179,7 +179,7 @@ static int parse_slabinfo20(struct slab_info **list, struct slab_stat *stats, curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size; if (curr->nr_objs) { - curr->use = 100 * curr->nr_active_objs / curr->nr_objs; + curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs; stats->nr_active_caches++; } else curr->use = 0; @@ -258,7 +258,7 @@ static int parse_slabinfo11(struct slab_info **list, struct slab_stat *stats, curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size; if (curr->nr_objs) { - curr->use = 100 * curr->nr_active_objs / curr->nr_objs; + curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs; stats->nr_active_caches++; } else curr->use = 0;