Add os_trim() support for FreeBSD
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Thu, 14 Jul 2016 12:27:43 +0000 (21:27 +0900)
committerJens Axboe <axboe@fb.com>
Thu, 14 Jul 2016 15:31:13 +0000 (08:31 -0700)
It has the same interface as Linux kernel with a different ioctl name.

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

index a9cd151f6e20c3694a2636d4f9a7c56ae8389537..b54f7e9e0cfde374fa86d98b635e224d9c0ab457 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -145,6 +145,7 @@ ifeq ($(CONFIG_TARGET_OS), SunOS)
   CPPFLAGS += -D__EXTENSIONS__
 endif
 ifeq ($(CONFIG_TARGET_OS), FreeBSD)
+  SOURCE += trim.c
   LIBS  += -lpthread -lrt
   LDFLAGS += -rdynamic
 endif
index fa00bb8001a230af4edc4d76c08553299f5f9f07..ac408c9df8ef509a94213ba8ca671c074f74885f 100644 (file)
@@ -19,6 +19,7 @@
 #define FIO_USE_GENERIC_INIT_RANDOM_STATE
 #define FIO_HAVE_CHARDEV_SIZE
 #define FIO_HAVE_FS_STAT
+#define FIO_HAVE_TRIM
 #define FIO_HAVE_GETTID
 #define FIO_HAVE_CPU_AFFINITY
 
@@ -114,6 +115,20 @@ static inline unsigned long long get_fs_free_size(const char *path)
        return ret;
 }
 
+static inline int os_trim(int fd, unsigned long long start,
+                         unsigned long long len)
+{
+       off_t range[2];
+
+       range[0] = start;
+       range[1] = len;
+
+       if (!ioctl(fd, DIOCGDELETE, range))
+               return 0;
+
+       return errno;
+}
+
 #ifdef MADV_FREE
 #define FIO_MADV_FREE  MADV_FREE
 #endif