X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdf.c;h=41a03cbf6280067815419d8802c5d431c0fd239f;hp=61d0c28cb79deb01a222c510ffc57b33ea5911bc;hb=59c7ee1cafaf53814838794908dd84f8101334c7;hpb=068146351a826b413ea6dedf1c834e31e0ad11f6 diff --git a/src/df.c b/src/df.c index 61d0c28c..41a03cbf 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." @@ -60,8 +62,8 @@ static ignorelist_t *il_device = NULL; static ignorelist_t *il_mountpoint = NULL; static ignorelist_t *il_fstype = NULL; -static _Bool by_device = false; -static _Bool report_inodes = false; +static _Bool by_device = 0; +static _Bool report_inodes = 0; static int df_init (void) { @@ -116,21 +118,16 @@ static int df_config (const char *key, const char *value) else if (strcasecmp (key, "ReportByDevice") == 0) { if (IS_TRUE (value)) - by_device = true; + by_device = 1; return (0); } - else if (strcasecmp (key, "ReportReserved") == 0) - { - /* Nop for backwards compatibility. */ - return (0); - } else if (strcasecmp (key, "ReportInodes") == 0) { if (IS_TRUE (value)) - report_inodes = true; + report_inodes = 1; else - report_inodes = false; + report_inodes = 0; return (0); } @@ -177,7 +174,10 @@ static int df_read (void) mnt_list = NULL; if (cu_mount_getlist (&mnt_list) == NULL) + { + ERROR ("df plugin: cu_mount_getlist failed."); return (-1); + } for (mnt_ptr = mnt_list; mnt_ptr != NULL; mnt_ptr = mnt_ptr->next) { @@ -200,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; @@ -244,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)