]> granicus.if.org Git - procps-ng/commitdiff
vmstat si and so fields zero with -S mM 1
authorJaromir Capik <jcapik@redhat.com>
Sat, 28 Jul 2012 07:50:00 +0000 (17:50 +1000)
committerCraig Small <csmall@enc.com.au>
Sat, 28 Jul 2012 07:50:00 +0000 (17:50 +1000)
'si' and 'so' values depend on the result of the unitConvert
function where the output is a fixed-point size of kb_per_page
after the conversion. It gives 4 for kB units and 0 for MB units.
This also causes problems when switching between 'K' and 'k'
since the output value is 4 in both cases and the result for
'k' and 'K' then doesn't differ ... I swapped the conversion with
multiplication in order to make the number higher so it doesn't
lose precision. Since the unitConvert now accepts long instead
of int, I had to change the input type from int to long.

Signed-off-by: Craig Small <csmall@enc.com.au>
vmstat.c

index 669a263fca5bca212d961b885efddab06a04b5ab..93f620d142d1a59bea366b513c655aa8f7950482 100644 (file)
--- a/vmstat.c
+++ b/vmstat.c
@@ -220,7 +220,7 @@ static void new_header(void)
             _("wa"));
 }
 
-static unsigned long unitConvert(unsigned int size)
+static unsigned long unitConvert(unsigned long size)
 {
        float cvSize;
        cvSize = (float)size / dataUnit * ((statMode == SLABSTAT) ? 1 : 1024);
@@ -264,8 +264,8 @@ static void new_format(void)
               unitConvert(kb_swap_used), unitConvert(kb_main_free),
               unitConvert(a_option?kb_inactive:kb_main_buffers),
               unitConvert(a_option?kb_active:kb_main_cached),
-              (unsigned)( (*pswpin  * unitConvert(kb_per_page) * hz + divo2) / Div ),
-              (unsigned)( (*pswpout * unitConvert(kb_per_page) * hz + divo2) / Div ),
+              (unsigned)( (unitConvert(*pswpin  * kb_per_page) * hz + divo2) / Div ),
+              (unsigned)( (unitConvert(*pswpout * kb_per_page) * hz + divo2) / Div ),
               (unsigned)( (*pgpgin                * hz + divo2) / Div ),
               (unsigned)( (*pgpgout               * hz + divo2) / Div ),
               (unsigned)( (*intr                  * hz + divo2) / Div ),
@@ -320,9 +320,9 @@ static void new_format(void)
                       unitConvert(a_option?kb_inactive:kb_main_buffers),
                       unitConvert(a_option?kb_active:kb_main_cached),
                       /*si */
-                      (unsigned)( ( (pswpin [tog] - pswpin [!tog])*unitConvert(kb_per_page)+sleep_half )/sleep_time ),
+                      (unsigned)( ( unitConvert((pswpin [tog] - pswpin [!tog])*kb_per_page)+sleep_half )/sleep_time ),
                       /* so */
-                      (unsigned)( ( (pswpout[tog] - pswpout[!tog])*unitConvert(kb_per_page)+sleep_half )/sleep_time ),
+                      (unsigned)( ( unitConvert((pswpout[tog] - pswpout[!tog])*kb_per_page)+sleep_half )/sleep_time ),
                       /* bi */
                       (unsigned)( (  pgpgin [tog] - pgpgin [!tog]             +sleep_half )/sleep_time ),
                       /* bo */