[PATCH] fix a divide by zero error
authorMing Zhang <blackmagic02881@gmail.com>
Thu, 21 Dec 2006 07:39:55 +0000 (08:39 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 21 Dec 2006 07:39:55 +0000 (08:39 +0100)
When pdi->events and pdi->seq_skips are both 0, current code will do
0/0.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
blkparse.c

index cbb422f59a076cc230221ce3e743853e04810e6a..b4c371a1cf5db9787de77d6268929e9a1b852aab 100644 (file)
@@ -1615,6 +1615,7 @@ static void show_device_and_cpu_stats(void)
        int i, j, pci_events;
        char line[3 + 8/*cpu*/ + 2 + 32/*dev*/ + 3];
        char name[32];
+       double ratio;
 
        for (pdi = devices, i = 0; i < ndevices; i++, pdi++) {
 
@@ -1674,10 +1675,13 @@ static void show_device_and_cpu_stats(void)
                        get_dev_name(pdi, line, sizeof(line)), pdi->events);
 
                collect_pdi_skips(pdi);
+               if (!pdi->skips && !pdi->events)
+                       ratio = 0.0;
+               else
+                       ratio = 100.0 * ((double)pdi->seq_skips /
+                                       (double)(pdi->events + pdi->seq_skips));
                fprintf(ofp, "Skips: %'lu forward (%'llu - %5.1lf%%)\n",
-                       pdi->skips,pdi->seq_skips,
-                       100.0 * ((double)pdi->seq_skips /
-                               (double)(pdi->events + pdi->seq_skips)));
+                       pdi->skips, pdi->seq_skips, ratio);
        }
 }