blkiomon: Fix an output error
authorTao Ma <boyu.mt@taobao.com>
Fri, 14 Jan 2011 08:06:03 +0000 (09:06 +0100)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 14 Jan 2011 08:06:03 +0000 (09:06 +0100)
When we give out some statistics in blkiomon, we don't consider
the situation that the device has no correspoinding action. See
if there is no disk read during the interval, the output in my box is
like:
sizes read (bytes): num 0, min -1, max 0, sum 0, squ 0, avg nan, var nan

With the fix, now it looks like:
sizes read (bytes): num 0, min -1, max 0, sum 0, squ 0, avg 0.0, var 0.0

Cc: Martin Peschke <mpeschke@linux.vnet.ibm.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
stats.h

diff --git a/stats.h b/stats.h
index fdedf27dc940482adb5b928c30cf598b9e93df9a..5b9a3132d9aa1cb80cac7beaa68936238c492a8a 100644 (file)
--- a/stats.h
+++ b/stats.h
@@ -75,6 +75,9 @@ static inline void minmax_to_be(struct minmax *mm)
 
 static inline double minmax_avg(struct minmax *mm)
 {
+       if (!mm->num)
+               return 0;
+
        return (mm->sum / (double)mm->num);
 }
 
@@ -82,6 +85,9 @@ static inline double minmax_var(struct minmax *mm)
 {
        double num = (double)mm->num;
 
+       if (!mm->num)
+               return 0;
+
        return ((mm->sos - ((mm->sum * mm->sum) / num)) / num);
 }