From: Mathieu Desnoyers Date: Wed, 11 May 2011 13:35:35 +0000 (-0400) Subject: Add splice_to_pipe wrapper X-Git-Tag: v2.0-pre1~164 X-Git-Url: http://git.liburcu.org/?a=commitdiff_plain;h=90225db5dd17d46fdb281a625ef98780329b0677;p=lttng-modules.git Add splice_to_pipe wrapper Signed-off-by: Mathieu Desnoyers --- 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 */