From fdbbaaec14f991ac0d03092f115c48b9737031fa Mon Sep 17 00:00:00 2001 From: Sebastien GODARD Date: Mon, 23 Dec 2019 11:52:59 +0100 Subject: [PATCH] iostat: Make code a bit more solid Add some extra verifications even though flush operations are normally counted as writes before being merged. Signed-off-by: Sebastien GODARD --- iostat.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/iostat.c b/iostat.c index 1d3c8e1..07c4dd7 100644 --- a/iostat.c +++ b/iostat.c @@ -617,13 +617,13 @@ void read_diskstats_stat(int curr) unsigned long dc_ios, dc_merges, dc_sec, fl_ios; unsigned int major, minor; - memset(&sdev, 0, sizeof(struct io_stats)); - if ((fp = fopen(DISKSTATS, "r")) == NULL) return; while (fgets(line, sizeof(line), fp) != NULL) { + memset(&sdev, 0, sizeof(struct io_stats)); + /* major minor name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq dcio dcmerge dcsect dcuse flio fltm */ i = sscanf(line, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %u %u %u %u %lu %lu %lu %u %lu %u", &major, &minor, dev_name, @@ -1642,20 +1642,22 @@ void write_stats(int curr, struct tm *rectime, int skip) ioj = d->dev_stats[!curr]; /* Origin (unmerged) flush operations are counted as writes */ if (!DISPLAY_UNFILTERED(flags)) { - if (!ioi->rd_ios && !ioi->wr_ios && !ioi->dc_ios) + if (!ioi->rd_ios && !ioi->wr_ios && !ioi->dc_ios && !ioi->fl_ios) continue; } if (DISPLAY_ZERO_OMIT(flags)) { if ((ioi->rd_ios == ioj->rd_ios) && (ioi->wr_ios == ioj->wr_ios) && - (ioi->dc_ios == ioj->dc_ios)) + (ioi->dc_ios == ioj->dc_ios) && + (ioi->fl_ios == ioj->fl_ios)) /* No activity: Ignore it */ continue; } /* Try to detect if device has been removed then inserted again */ - if (((ioi->rd_ios + ioi->wr_ios + ioi->dc_ios) < (ioj->rd_ios + ioj->wr_ios + ioj->dc_ios)) && + if (((ioi->rd_ios + ioi->wr_ios + ioi->dc_ios + ioi->fl_ios) < + (ioj->rd_ios + ioj->wr_ios + ioj->dc_ios + ioj->fl_ios)) && (!ioj->rd_sectors || (ioi->rd_sectors < ioj->rd_sectors)) && (!ioj->wr_sectors || (ioi->wr_sectors < ioj->wr_sectors)) && (!ioj->dc_sectors || (ioi->dc_sectors < ioj->dc_sectors))) { -- 2.40.0