* Julien Desfossez ([email protected]) wrote: > This patch allows LTTng to override the file operations of the lib ring > buffer. > For now it does not provide any additional functions, but it prepares > the work of adding LTTng-specific ioctls to the ring buffer. > > Signed-off-by: Julien Desfossez <[email protected]>
Acked-by: Mathieu Desnoyers <[email protected]> > --- > lttng-abi.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 49 insertions(+), 1 deletion(-) > > diff --git a/lttng-abi.c b/lttng-abi.c > index ba8362b..9a25490 100644 > --- a/lttng-abi.c > +++ b/lttng-abi.c > @@ -64,6 +64,7 @@ static const struct file_operations lttng_session_fops; > static const struct file_operations lttng_channel_fops; > static const struct file_operations lttng_metadata_fops; > static const struct file_operations lttng_event_fops; > +static struct file_operations lttng_stream_ring_buffer_file_operations; > > /* > * Teardown management: opened file descriptors keep a refcount on the > module, > @@ -781,7 +782,7 @@ int lttng_abi_open_stream(struct file *channel_file) > > stream_priv = buf; > ret = lttng_abi_create_stream_fd(channel_file, stream_priv, > - &lib_ring_buffer_file_operations); > + <tng_stream_ring_buffer_file_operations); > if (ret < 0) > goto fd_error; > > @@ -1293,6 +1294,51 @@ static const struct file_operations lttng_event_fops = > { > #endif > }; > > +static long lttng_stream_ring_buffer_ioctl(struct file *filp, > + unsigned int cmd, unsigned long arg) > +{ > + switch (cmd) { > + default: > + return > lib_ring_buffer_file_operations.unlocked_ioctl(filp, > + cmd, arg); > + } > +} > + > +#ifdef CONFIG_COMPAT > +static long lttng_stream_ring_buffer_compat_ioctl(struct file *filp, > + unsigned int cmd, unsigned long arg) > +{ > + switch (cmd) { > + default: > + return > lib_ring_buffer_file_operations.compat_ioctl(filp, > + cmd, arg); > + } > +} > +#endif /* CONFIG_COMPAT */ > + > +static void lttng_stream_override_ring_buffer_fops(void) > +{ > + lttng_stream_ring_buffer_file_operations.owner = THIS_MODULE; > + lttng_stream_ring_buffer_file_operations.open = > + lib_ring_buffer_file_operations.open; > + lttng_stream_ring_buffer_file_operations.release = > + lib_ring_buffer_file_operations.release; > + lttng_stream_ring_buffer_file_operations.poll = > + lib_ring_buffer_file_operations.poll; > + lttng_stream_ring_buffer_file_operations.splice_read = > + lib_ring_buffer_file_operations.splice_read; > + lttng_stream_ring_buffer_file_operations.mmap = > + lib_ring_buffer_file_operations.mmap; > + lttng_stream_ring_buffer_file_operations.unlocked_ioctl = > + lttng_stream_ring_buffer_ioctl; > + lttng_stream_ring_buffer_file_operations.llseek = > + lib_ring_buffer_file_operations.llseek; > +#ifdef CONFIG_COMPAT > + lttng_stream_ring_buffer_file_operations.compat_ioctl = > + lttng_stream_ring_buffer_compat_ioctl; > +#endif > +} > + > int __init lttng_abi_init(void) > { > int ret = 0; > @@ -1306,6 +1352,8 @@ int __init lttng_abi_init(void) > ret = -ENOMEM; > goto error; > } > + lttng_stream_override_ring_buffer_fops(); > + > error: > return ret; > } > -- > 1.7.10.4 > -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
