X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdf.c;h=371a7fc3db9973b676322a75362d14b633b45a81;hb=488c2ca9e3f6f6082f192bdd5d737c6cd1298ba2;hp=4b3cba019cea9219289cc8adef7633a05e30a9ba;hpb=fbb822b876e877c69be066ceca693769d4a9618a;p=collectd.git diff --git a/src/df.c b/src/df.c index 4b3cba01..371a7fc3 100644 --- a/src/df.c +++ b/src/df.c @@ -33,12 +33,14 @@ # include # endif # define STATANYFS statvfs +# define STATANYFS_STR "statvfs" # define BLOCKSIZE(s) ((s).f_frsize ? (s).f_frsize : (s).f_bsize) #elif HAVE_STATFS # if HAVE_SYS_STATFS_H # include # endif # define STATANYFS statfs +# define STATANYFS_STR "statfs" # define BLOCKSIZE(s) (s).f_bsize #else # error "No applicable input method." @@ -198,7 +200,8 @@ static int df_read (void) if (STATANYFS (mnt_ptr->dir, &statbuf) < 0) { char errbuf[1024]; - ERROR ("statv?fs failed: %s", + ERROR (STATANYFS_STR"(%s) failed: %s", + mnt_ptr->dir, sstrerror (errno, errbuf, sizeof (errbuf))); continue; @@ -242,7 +245,22 @@ 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 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)