Merge branch 'collectd-4.10' into collectd-5.0
[collectd.git] / src / df.c
index 5391f50..41a03cb 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -245,7 +245,24 @@ static int df_read (void)
 
                blocksize = BLOCKSIZE(statbuf);
 
-               /* 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 and temporary variable are needed to avoid
+                * compiler warnings.
+                * ((struct statvfs).f_bavail is unsigned (POSIX)) */
+               int64_t signed_bavail = (int64_t) statbuf.f_bavail;
+               if (signed_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)