From 90225db5dd17d46fdb281a625ef98780329b0677 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 11 May 2011 09:35:35 -0400 Subject: [PATCH] Add splice_to_pipe wrapper Signed-off-by: Mathieu Desnoyers --- lib/ringbuffer/ring_buffer_splice.c | 3 +- wrapper/splice.h | 46 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 wrapper/splice.h diff --git a/lib/ringbuffer/ring_buffer_splice.c b/lib/ringbuffer/ring_buffer_splice.c index 531914a4..5fa779f5 100644 --- a/lib/ringbuffer/ring_buffer_splice.c +++ b/lib/ringbuffer/ring_buffer_splice.c @@ -13,6 +13,7 @@ #include #include +#include "../../wrapper/splice.h" #include "../../wrapper/ringbuffer/backend.h" #include "../../wrapper/ringbuffer/frontend.h" #include "../../wrapper/ringbuffer/vfs.h" @@ -142,7 +143,7 @@ static int subbuf_splice_actor(struct file *in, if (!spd.nr_pages) return 0; - return splice_to_pipe(pipe, &spd); + return wrapper_splice_to_pipe(pipe, &spd); } ssize_t lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, diff --git a/wrapper/splice.h b/wrapper/splice.h new file mode 100644 index 00000000..5f400747 --- /dev/null +++ b/wrapper/splice.h @@ -0,0 +1,46 @@ +#ifndef _LTT_WRAPPER_SPLICE_H +#define _LTT_WRAPPER_SPLICE_H + +/* + * Copyright (C) 2011 Mathieu Desnoyers (mathieu.desnoyers@efficios.com) + * + * wrapper around vmalloc_sync_all. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Dual LGPL v2.1/GPL v2 license. + */ + +#ifdef CONFIG_KALLSYMS + +#include +#include + +static inline +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + ssize_t (*splice_to_pipe_sym)(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd); + + splice_to_pipe_sym = (void *) kallsyms_lookup_name("splice_to_pipe"); + if (splice_to_pipe_sym) { + return splice_to_pipe_sym(pipe, spd); + } else { + printk(KERN_WARNING "LTTng: splice_to_pipe symbol lookup failed.\n"); + return -ENOSYS; + } +} +#else + +#include + +static inline +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + return splice_to_pipe(pipe, spd); +} +#endif + +#endif /* _LTT_WRAPPER_SPLICE_H */ -- 2.34.1