From 826a02a292d2bd409be87ea96ba2fccbccee76b1 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 21 Feb 2012 15:36:59 -0500 Subject: [PATCH] Add FreeBSD compat layer for splice and sync_file_range Signed-off-by: David Goulet --- src/common/compat/fcntl.h | 70 ++++++++++++++++++++ src/common/kernel-consumer/kernel-consumer.c | 7 +- src/common/ust-consumer/ust-consumer.c | 4 +- 3 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 src/common/compat/fcntl.h diff --git a/src/common/compat/fcntl.h b/src/common/compat/fcntl.h new file mode 100644 index 000000000..420546959 --- /dev/null +++ b/src/common/compat/fcntl.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011 - David Goulet + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; only version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _COMPAT_FCNTL_H +#define _COMPAT_FCNTL_H + +#include + +#define lttng_sync_file_range(fd, offset, nbytes, flags) \ + compat_sync_file_range(fd, offset, nbytes, flags) + +#ifdef __linux__ + +int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes, + unsigned int flags) +{ + return sync_file_range(fd, offset, nbytes, flags); +} + +#elif __FreeBSD__ + +/* + * Possible flags under Linux. Simply nullify them and avoid wrapper. + */ +#define SYNC_FILE_RANGE_WAIT_AFTER 0 +#define SYNC_FILE_RANGE_WAIT_BEFORE 0 +#define SYNC_FILE_RANGE_WRITE 0 + +typedef long int off64_t; +typedef off64_t loff_t; + +int compat_sync_file_range(int fd, off64_t offset, off64_t nbytes, + unsigned int flags) +{ + return 0; +} + +/* + * Possible flags under Linux. Simply nullify them and avoid wrappers. + */ +#define SPLICE_F_MOVE 0 +#define SPLICE_F_NONBLOCK 0 +#define SPLICE_F_MORE 0 +#define SPLICE_F_GIFT 0 + +ssize_t splice(int fd_in, loff_t *off_in, int fd_out, + loff_t *off_out, size_t len, unsigned int flags) +{ + return -ENOSYS; +} + +#else +#error "Please add support for your OS into compat/fcntl.h." +#endif /* __linux__ , __FreeBSD__ */ + +#endif /* _COMPAT_FCNTL_H */ diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c index 3489ab6ed..f32f47b3e 100644 --- a/src/common/kernel-consumer/kernel-consumer.c +++ b/src/common/kernel-consumer/kernel-consumer.c @@ -19,7 +19,6 @@ #define _GNU_SOURCE #include -#include #include #include #include @@ -28,10 +27,12 @@ #include #include #include +#include #include #include #include +#include #include "kernel-consumer.h" @@ -72,7 +73,7 @@ int lttng_kconsumer_on_read_subbuffer_mmap( goto end; } /* This won't block, but will start writeout asynchronously */ - sync_file_range(outfd, stream->out_fd_offset, ret, + lttng_sync_file_range(outfd, stream->out_fd_offset, ret, SYNC_FILE_RANGE_WRITE); stream->out_fd_offset += ret; } @@ -122,7 +123,7 @@ int lttng_kconsumer_on_read_subbuffer_splice( } len -= ret; /* This won't block, but will start writeout asynchronously */ - sync_file_range(outfd, stream->out_fd_offset, ret, + lttng_sync_file_range(outfd, stream->out_fd_offset, ret, SYNC_FILE_RANGE_WRITE); stream->out_fd_offset += ret; } diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c index 5f5e95825..9a5775b8e 100644 --- a/src/common/ust-consumer/ust-consumer.c +++ b/src/common/ust-consumer/ust-consumer.c @@ -26,12 +26,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include "ust-consumer.h" @@ -71,7 +73,7 @@ int lttng_ustconsumer_on_read_subbuffer_mmap( goto end; } /* This won't block, but will start writeout asynchronously */ - sync_file_range(outfd, stream->out_fd_offset, ret, + lttng_sync_file_range(outfd, stream->out_fd_offset, ret, SYNC_FILE_RANGE_WRITE); stream->out_fd_offset += ret; } -- 2.34.1