X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Fringbuffer%2Fring_buffer_splice.c;h=cac44e16e860d873c36e37e0502b735fab108e6a;hb=e20c0fec4a2e120143f2e71c63d9fcd664af55a4;hp=cd803a70805e29abada097e5933170ce453804ae;hpb=cfa6cc1d0f01c2cfcc1a679abf3a6572d411c309;p=lttng-modules.git diff --git a/src/lib/ringbuffer/ring_buffer_splice.c b/src/lib/ringbuffer/ring_buffer_splice.c index cd803a70..cac44e16 100644 --- a/src/lib/ringbuffer/ring_buffer_splice.c +++ b/src/lib/ringbuffer/ring_buffer_splice.c @@ -12,17 +12,22 @@ #include #include -#include +#include #include #include #include #include -#if 0 +#ifdef DEBUG #define printk_dbg(fmt, args...) printk(fmt, args) #else -#define printk_dbg(fmt, args...) +#define printk_dbg(fmt, args...) \ +do { \ + /* do nothing but check printf format */ \ + if (0) \ + printk(fmt, ## args); \ +} while (0) #endif loff_t vfs_lib_ring_buffer_no_llseek(struct file *file, loff_t offset, @@ -42,19 +47,38 @@ static void lib_ring_buffer_pipe_buf_release(struct pipe_inode_info *pipe, __free_page(pbuf->page); } +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,8,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .release = lib_ring_buffer_pipe_buf_release, + .try_steal = generic_pipe_buf_try_steal, + .get = generic_pipe_buf_get +}; +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,1,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .confirm = generic_pipe_buf_confirm, + .release = lib_ring_buffer_pipe_buf_release, + .steal = generic_pipe_buf_steal, + .get = generic_pipe_buf_get +}; +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,15,0)) +static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { + .can_merge = 0, + .confirm = generic_pipe_buf_confirm, + .release = lib_ring_buffer_pipe_buf_release, + .steal = generic_pipe_buf_steal, + .get = generic_pipe_buf_get +}; +#else static const struct pipe_buf_operations ring_buffer_pipe_buf_ops = { -#if (LINUX_VERSION_CODE < KERNEL_VERSION(5,1,0)) .can_merge = 0, -#endif -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)) .map = generic_pipe_buf_map, .unmap = generic_pipe_buf_unmap, -#endif .confirm = generic_pipe_buf_confirm, .release = lib_ring_buffer_pipe_buf_release, .steal = generic_pipe_buf_steal, - .get = generic_pipe_buf_get, + .get = generic_pipe_buf_get }; +#endif /* * Page release operation after splice pipe_to_file ends. @@ -73,10 +97,10 @@ static int subbuf_splice_actor(struct file *in, struct pipe_inode_info *pipe, size_t len, unsigned int flags, - struct lib_ring_buffer *buf) + struct lttng_kernel_ring_buffer *buf) { - struct channel *chan = buf->backend.chan; - const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lttng_kernel_ring_buffer_channel *chan = buf->backend.chan; + const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; unsigned int poff, subbuf_pages, nr_pages; struct page *pages[PIPE_DEF_BUFFERS]; struct partial_page partial[PIPE_DEF_BUFFERS]; @@ -84,7 +108,7 @@ static int subbuf_splice_actor(struct file *in, .pages = pages, .nr_pages = 0, .partial = partial, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)) +#if (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(4,12,0)) .flags = flags, #endif .ops = &ring_buffer_pipe_buf_ops, @@ -112,7 +136,7 @@ static int subbuf_splice_actor(struct file *in, nr_pages = min_t(unsigned int, subbuf_pages, PIPE_DEF_BUFFERS); roffset = consumed_old & PAGE_MASK; poff = consumed_old & ~PAGE_MASK; - printk_dbg(KERN_DEBUG "SPLICE actor len %zu pos %zd write_pos %ld\n", + printk_dbg(KERN_DEBUG "LTTng: SPLICE actor len %zu pos %zd write_pos %ld\n", len, (ssize_t)*ppos, lib_ring_buffer_get_offset(config, buf)); for (; spd.nr_pages < nr_pages; spd.nr_pages++) { @@ -123,7 +147,7 @@ static int subbuf_splice_actor(struct file *in, if (!len) break; - printk_dbg(KERN_DEBUG "SPLICE actor loop len %zu roffset %ld\n", + printk_dbg(KERN_DEBUG "LTTng: SPLICE actor loop len %zu roffset %ld\n", len, roffset); /* @@ -158,10 +182,10 @@ static int subbuf_splice_actor(struct file *in, ssize_t lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags, - struct lib_ring_buffer *buf) + struct lttng_kernel_ring_buffer *buf) { - struct channel *chan = buf->backend.chan; - const struct lib_ring_buffer_config *config = &chan->backend.config; + struct lttng_kernel_ring_buffer_channel *chan = buf->backend.chan; + const struct lttng_kernel_ring_buffer_config *config = &chan->backend.config; ssize_t spliced; int ret; @@ -183,11 +207,11 @@ ssize_t lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, ret = 0; spliced = 0; - printk_dbg(KERN_DEBUG "SPLICE read len %zu pos %zd\n", len, + printk_dbg(KERN_DEBUG "LTTng: SPLICE read len %zu pos %zd\n", len, (ssize_t)*ppos); while (len && !spliced) { ret = subbuf_splice_actor(in, ppos, pipe, len, flags, buf); - printk_dbg(KERN_DEBUG "SPLICE read loop ret %d\n", ret); + printk_dbg(KERN_DEBUG "LTTng: SPLICE read loop ret %d\n", ret); if (ret < 0) break; else if (!ret) { @@ -215,7 +239,7 @@ ssize_t vfs_lib_ring_buffer_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags) { - struct lib_ring_buffer *buf = in->private_data; + struct lttng_kernel_ring_buffer *buf = in->private_data; return lib_ring_buffer_splice_read(in, ppos, pipe, len, flags, buf); }