From 3cd4c66f35fad0df64e4e6dfeddc5bdfd5206e0c Mon Sep 17 00:00:00 2001 From: John Date: Sun, 29 Dec 2013 19:20:35 -0700 Subject: [PATCH 1/1] Add OpenBSD support I managed to make a clean compile and a few test runs using the attached patches. These work on OpenBSD 5.4 at least. I used the 2.1.4 release of fio as a basis. Signed-off-by: Jens Axboe --- Makefile | 4 ++++ filesetup.c | 6 +++-- os/os-openbsd.h | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ os/os.h | 3 +++ 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 os/os-openbsd.h diff --git a/Makefile b/Makefile index 7c0e7980..8c2c5146 100644 --- a/Makefile +++ b/Makefile @@ -108,6 +108,10 @@ ifeq ($(CONFIG_TARGET_OS), FreeBSD) LIBS += -lpthread -lrt LDFLAGS += -rdynamic endif +ifeq ($(CONFIG_TARGET_OS), OpenBSD) + LIBS += -lpthread + LDFLAGS += -rdynamic +endif ifeq ($(CONFIG_TARGET_OS), NetBSD) LIBS += -lpthread -lrt LDFLAGS += -rdynamic diff --git a/filesetup.c b/filesetup.c index c9b060b7..601df8f1 100644 --- a/filesetup.c +++ b/filesetup.c @@ -121,8 +121,10 @@ static int extend_file(struct thread_data *td, struct fio_file *f) dprint(FD_FILE, "truncate file %s, size %llu\n", f->file_name, (unsigned long long) f->real_file_size); if (ftruncate(f->fd, f->real_file_size) == -1) { - td_verror(td, errno, "ftruncate"); - goto err; + if (errno != EFBIG) { + td_verror(td, errno, "ftruncate"); + goto err; + } } } diff --git a/os/os-openbsd.h b/os/os-openbsd.h new file mode 100644 index 00000000..b1d8e832 --- /dev/null +++ b/os/os-openbsd.h @@ -0,0 +1,60 @@ +#ifndef FIO_OS_OPENBSD_H +#define FIO_OS_OPENBSD_H + +#define FIO_OS os_openbsd + +#include +#include +/* XXX hack to avoid conflicts between rbtree.h and */ +#include +#undef RB_BLACK +#undef RB_RED +#undef RB_ROOT + +#include "../file.h" + +#undef FIO_HAVE_ODIRECT +#define FIO_USE_GENERIC_BDEV_SIZE +#define FIO_USE_GENERIC_RAND +#define FIO_USE_GENERIC_INIT_RANDOM_STATE +#define FIO_HAVE_GETTID + +#undef FIO_HAVE_CPU_AFFINITY /* XXX notyet */ + +#define OS_MAP_ANON MAP_ANON + +#ifndef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 4096 +#endif + +#define fio_swap16(x) bswap16(x) +#define fio_swap32(x) bswap32(x) +#define fio_swap64(x) bswap64(x) + +typedef off_t off64_t; + +static inline int blockdev_invalidate_cache(struct fio_file *f) +{ + return EINVAL; +} + +static inline unsigned long long os_phys_mem(void) +{ + int mib[2] = { CTL_HW, HW_PHYSMEM64 }; + uint64_t mem; + size_t len = sizeof(mem); + + sysctl(mib, 2, &mem, &len, NULL, 0); + return mem; +} + +static inline int gettid(void) +{ + return (int) pthread_self(); +} + +#ifdef MADV_FREE +#define FIO_MADV_FREE MADV_FREE +#endif + +#endif diff --git a/os/os.h b/os/os.h index 4b590347..03d1e9a1 100644 --- a/os/os.h +++ b/os/os.h @@ -17,6 +17,7 @@ enum { os_hpux, os_mac, os_netbsd, + os_openbsd, os_solaris, os_windows, os_android, @@ -30,6 +31,8 @@ enum { #include "os-linux.h" #elif defined(__FreeBSD__) #include "os-freebsd.h" +#elif defined(__OpenBSD__) +#include "os-openbsd.h" #elif defined(__NetBSD__) #include "os-netbsd.h" #elif defined(__sun__) -- 2.25.1