From: Toni Ylenius Date: Fri, 6 Jan 2012 16:13:56 +0000 (+0200) Subject: df: Set negative free space values to zero. X-Git-Tag: collectd-4.10.5~4 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=ca65f66c3cdbbb8af941d3624b85757355f38ad8;p=collectd.git df: Set negative free space values to zero. Some file systems (eg. UFS) may report negative free spave values. Previously this caused underflow, but now it is prevented by setting negative values to zero. Change-Id: I821adb8a6d7a40dcbd6c65ab3541fbcd714f8aba Conflicts: src/df.c --- diff --git a/src/df.c b/src/df.c index 2e9b2ae8..9d53b0b6 100644 --- a/src/df.c +++ b/src/df.c @@ -280,7 +280,22 @@ static int df_read (void) uint64_t blk_reserved; uint64_t blk_used; - /* Sanity-check for the values in the struct */ + /* + * Sanity-check for the values in the struct + */ + /* Check for negative "available" byes. For example UFS can + * report negative free space for user. Notice. blk_reserved + * will start to diminish after this. */ +#if HAVE_STATVFS + /* Cast is needed to avoid compiler warnings. + * ((struct statvfs).f_bavail is unsigned (POSIX)) */ + if (((int64_t) statbuf.f_bavail) < 0) + statbuf.f_bavail = 0; +#elif HAVE_STATFS + if (statbuf.f_bavail < 0) + statbuf.f_bavail = 0; +#endif + /* Make sure that f_blocks >= f_bfree >= f_bavail */ if (statbuf.f_bfree < statbuf.f_bavail) statbuf.f_bfree = statbuf.f_bavail; if (statbuf.f_blocks < statbuf.f_bfree)