X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=lib%2Fringbuffer%2Fring_buffer_vfs.c;h=51d8a4d4305bb0dd53d61688d2859a54979e63fb;hb=5a8fd222992df9bbb709836e5bf4ca053dd776c3;hp=fecef217c8bfdd9a51587f930a5dc7c2dcecac64;hpb=254ec7bc4c72da11a4e3f2c90904b111a06a2c55;p=lttng-modules.git diff --git a/lib/ringbuffer/ring_buffer_vfs.c b/lib/ringbuffer/ring_buffer_vfs.c index fecef217..51d8a4d4 100644 --- a/lib/ringbuffer/ring_buffer_vfs.c +++ b/lib/ringbuffer/ring_buffer_vfs.c @@ -42,6 +42,9 @@ int lib_ring_buffer_open(struct inode *inode, struct file *file) struct lib_ring_buffer *buf = inode->i_private; int ret; + if (!buf) + return -EINVAL; + ret = lib_ring_buffer_open_read(buf); if (ret) return ret; @@ -85,11 +88,11 @@ unsigned int lib_ring_buffer_poll(struct file *filp, poll_table *wait) unsigned int mask = 0; struct lib_ring_buffer *buf = filp->private_data; struct channel *chan = buf->backend.chan; - const struct lib_ring_buffer_config *config = chan->backend.config; + const struct lib_ring_buffer_config *config = &chan->backend.config; int finalized, disabled; if (filp->f_mode & FMODE_READ) { - init_poll_funcptr(wait, wrapper_pollwait_exclusive); + poll_wait_set_exclusive(wait); poll_wait(filp, &buf->read_wait, wait); finalized = lib_ring_buffer_is_finalized(config, buf); @@ -162,7 +165,7 @@ long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd, unsigned long ar { struct lib_ring_buffer *buf = filp->private_data; struct channel *chan = buf->backend.chan; - const struct lib_ring_buffer_config *config = chan->backend.config; + const struct lib_ring_buffer_config *config = &chan->backend.config; if (lib_ring_buffer_channel_is_disabled(chan)) return -EIO; @@ -245,6 +248,9 @@ long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd, unsigned long ar return put_ulong(buf->backend.array[sb_bindex]->mmap_offset, arg); } + case RING_BUFFER_FLUSH: + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + return 0; default: return -ENOIOCTLCMD; } @@ -256,7 +262,7 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, { struct lib_ring_buffer *buf = filp->private_data; struct channel *chan = buf->backend.chan; - const struct lib_ring_buffer_config *config = chan->backend.config; + const struct lib_ring_buffer_config *config = &chan->backend.config; if (lib_ring_buffer_channel_is_disabled(chan)) return -EIO; @@ -355,6 +361,9 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, return -EINVAL; return put_ulong(read_offset, arg); } + case RING_BUFFER_FLUSH: + lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE); + return 0; default: return -ENOIOCTLCMD; } @@ -362,6 +371,7 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd, #endif const struct file_operations lib_ring_buffer_file_operations = { + .owner = THIS_MODULE, .open = lib_ring_buffer_open, .release = lib_ring_buffer_release, .poll = lib_ring_buffer_poll,