X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=os%2Fos-dragonfly.h;h=b67c660f00f651106d1501d0c18b8b1d84df2b44;hb=b06370ef479196773ee45d2d68d57e098e0f8d1e;hp=bc855baf1cab993e8049ea21e66c7e6082743d6b;hpb=fcb6b3ef8c606b60511c9c72a908e45f4cbd607b;p=fio.git diff --git a/os/os-dragonfly.h b/os/os-dragonfly.h index bc855baf..b67c660f 100644 --- a/os/os-dragonfly.h +++ b/os/os-dragonfly.h @@ -4,15 +4,19 @@ #define FIO_OS os_dragonfly #include +#include #include #include +#include +#include #include "../file.h" #define FIO_HAVE_ODIRECT -#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_CHARDEV_SIZE #define FIO_HAVE_GETTID #undef FIO_HAVE_CPU_AFFINITY /* XXX notyet */ @@ -29,6 +33,24 @@ typedef off_t off64_t; +static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) +{ + struct partinfo pi; + + if (!ioctl(f->fd, DIOCGPART, &pi)) { + *bytes = (unsigned long long) pi.media_size; + return 0; + } + + *bytes = 0; + return errno; +} + +static inline int chardev_size(struct fio_file *f, unsigned long long *bytes) +{ + return blockdev_size(f, bytes); +} + static inline int blockdev_invalidate_cache(struct fio_file *f) { return EINVAL; @@ -49,6 +71,19 @@ static inline int gettid(void) return (int) lwp_gettid(); } +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