+ blocksize = BLOCKSIZE(statbuf);
+
+ if (report_reserved)
+ {
+ uint64_t blk_free;
+ uint64_t blk_reserved;
+ uint64_t blk_used;
+
+ /* Sanity-check for the values in the struct */
+ if (statbuf.f_bfree < statbuf.f_bavail)
+ statbuf.f_bfree = statbuf.f_bavail;
+ if (statbuf.f_blocks < statbuf.f_bfree)
+ statbuf.f_blocks = statbuf.f_bfree;
+
+ blk_free = (uint64_t) statbuf.f_bavail;
+ blk_reserved = (uint64_t) (statbuf.f_bfree - statbuf.f_bavail);
+ blk_used = (uint64_t) (statbuf.f_blocks - statbuf.f_bfree);
+
+ df_submit_one (disk_name, "df_complex", "free",
+ (gauge_t) (blk_free * blocksize));
+ df_submit_one (disk_name, "df_complex", "reserved",
+ (gauge_t) (blk_reserved * blocksize));
+ df_submit_one (disk_name, "df_complex", "used",
+ (gauge_t) (blk_used * blocksize));
+ }
+ else /* compatibility code */
+ {
+ gauge_t df_free;
+ gauge_t df_used;
+
+ df_free = statbuf.f_bfree * blocksize;
+ df_used = (statbuf.f_blocks - statbuf.f_bfree) * blocksize;
+
+ df_submit_two (disk_name, "df", df_used, df_free);
+ }
+
+ /* inode handling */
+ if (report_inodes)
+ {
+ uint64_t inode_free;
+ uint64_t inode_reserved;
+ uint64_t inode_used;
+
+ /* Sanity-check for the values in the struct */
+ if (statbuf.f_ffree < statbuf.f_favail)
+ statbuf.f_ffree = statbuf.f_favail;
+ if (statbuf.f_files < statbuf.f_ffree)
+ statbuf.f_files = statbuf.f_ffree;
+
+ inode_free = (uint64_t) statbuf.f_favail;
+ inode_reserved = (uint64_t) (statbuf.f_ffree - statbuf.f_favail);
+ inode_used = (uint64_t) (statbuf.f_files - statbuf.f_ffree);
+
+ df_submit_one (disk_name, "df_inodes", "free",
+ (gauge_t) inode_free);
+ df_submit_one (disk_name, "df_inodes", "reserved",
+ (gauge_t) inode_reserved);
+ df_submit_one (disk_name, "df_inodes", "used",
+ (gauge_t) inode_used);
+ }