Add FIO_HAVE_FS_STAT/get_fs_free_size() support for OpenBSD
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 17 Oct 2016 14:17:39 +0000 (23:17 +0900)
committerJens Axboe <axboe@fb.com>
Mon, 17 Oct 2016 14:12:58 +0000 (08:12 -0600)
This commit is OpenBSD version of 60f840a8 in 2015.
This is the same as 60f840a8, as well as the previous commit
for NetBSD, as it uses POSIX statvfs.

Note that fio doesn't compile on OpenBSD 5.9 (hits lex error),
but this this commit should still be good since this function
alone compiles on OpenBSD.

(Note that the function was renamed with _free in c08ad04c)

Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
os/os-openbsd.h

index b1d8e832f36b68e30a3e496d7a83324f8bcf2a65..299851090b2423ef5f36ab855d9cb70e1f748334 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <errno.h>
 #include <sys/param.h>
 
 #include <errno.h>
 #include <sys/param.h>
+#include <sys/statvfs.h>
 /* XXX hack to avoid conflicts between rbtree.h and <sys/tree.h> */
 #include <sys/sysctl.h>
 #undef RB_BLACK
 /* XXX hack to avoid conflicts between rbtree.h and <sys/tree.h> */
 #include <sys/sysctl.h>
 #undef RB_BLACK
@@ -17,6 +18,7 @@
 #define FIO_USE_GENERIC_BDEV_SIZE
 #define FIO_USE_GENERIC_RAND
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
 #define FIO_USE_GENERIC_BDEV_SIZE
 #define FIO_USE_GENERIC_RAND
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
+#define FIO_HAVE_FS_STAT
 #define FIO_HAVE_GETTID
 
 #undef FIO_HAVE_CPU_AFFINITY   /* XXX notyet */
 #define FIO_HAVE_GETTID
 
 #undef FIO_HAVE_CPU_AFFINITY   /* XXX notyet */
@@ -53,6 +55,19 @@ static inline int gettid(void)
        return (int) pthread_self();
 }
 
        return (int) pthread_self();
 }
 
+static inline unsigned long long get_fs_free_size(const char *path)
+{
+       unsigned long long ret;
+       struct statvfs s;
+
+       if (statvfs(path, &s) < 0)
+               return -1ULL;
+
+       ret = s.f_frsize;
+       ret *= (unsigned long long) s.f_bfree;
+       return ret;
+}
+
 #ifdef MADV_FREE
 #define FIO_MADV_FREE  MADV_FREE
 #endif
 #ifdef MADV_FREE
 #define FIO_MADV_FREE  MADV_FREE
 #endif