Add OpenBSD support
authorJohn <j@bitminer.ca>
Mon, 30 Dec 2013 02:20:35 +0000 (19:20 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 30 Dec 2013 02:20:35 +0000 (19:20 -0700)
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 <axboe@kernel.dk>
Makefile
filesetup.c
os/os-openbsd.h [new file with mode: 0644]
os/os.h

index 7c0e7980e5107b3fbeba74897ceddcd5010b232f..8c2c514607eae6f47d61cf0cce88484c49a0d8e3 100644 (file)
--- 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
index c9b060b7e8aba6b8cad4c498d3ee6736caaa6dc0..601df8f1ddec655b09ec8eb7b2d03947307a8e65 100644 (file)
@@ -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 (file)
index 0000000..b1d8e83
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef FIO_OS_OPENBSD_H
+#define FIO_OS_OPENBSD_H
+
+#define        FIO_OS  os_openbsd
+
+#include <errno.h>
+#include <sys/param.h>
+/* XXX hack to avoid conflicts between rbtree.h and <sys/tree.h> */
+#include <sys/sysctl.h>
+#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 4b5903471bf8a421c0571d3d8a2de4461d74b417..03d1e9a14565f8481dd93db480e1896dfde184ec 100644 (file)
--- 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__)