From 00e6bbcc05403aec1c96674c1060d54f5f237e87 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 8 Sep 2012 00:58:25 -0400 Subject: add linux sync_file_range syscall --- include/fcntl.h | 4 ++++ src/linux/sync_file_range.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/linux/sync_file_range.c diff --git a/include/fcntl.h b/include/fcntl.h index b8d8702e..cfdccd9b 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -118,12 +118,16 @@ struct f_owner_ex { }; #define FALLOC_FL_KEEP_SIZE 1 #define FALLOC_FL_PUNCH_HOLE 2 +#define SYNC_FILE_RANGE_WAIT_BEFORE 1 +#define SYNC_FILE_RANGE_WRITE 2 +#define SYNC_FILE_RANGE_WAIT_AFTER 4 #define SPLICE_F_MOVE 1 #define SPLICE_F_NONBLOCK 2 #define SPLICE_F_MORE 4 #define SPLICE_F_GIFT 8 int fallocate(int, int, off_t, off_t); ssize_t readahead(int, off_t, size_t); +int sync_file_range(int, off_t, off_t, unsigned); ssize_t vmsplice(int, const struct iovec *, size_t, unsigned); ssize_t splice(int, off_t *, int, off_t *, size_t, unsigned); #define loff_t off_t diff --git a/src/linux/sync_file_range.c b/src/linux/sync_file_range.c new file mode 100644 index 00000000..739e602a --- /dev/null +++ b/src/linux/sync_file_range.c @@ -0,0 +1,16 @@ +#define _GNU_SOURCE +#include +#include "syscall.h" + +int sync_file_range(int fd, off_t pos, off_t len, unsigned flags) +{ +#if defined(SYS_sync_file_range2) + return syscall(SYS_sync_file_range2, fd, flags, + __SYSCALL_LL_E(pos), __SYSCALL_LL_E(len)); +#elif defined(SYS_sync_file_range) + return syscall(SYS_sync_file_range, fd, + __SYSCALL_LL_O(pos), __SYSCALL_LL_E(len), flags); +#else + return __syscall_ret(-ENOSYS); +#endif +} -- cgit v1.2.1