projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: ext4: add missing tracepoints for 3.11 kernel
[lttng-modules.git]
/
lttng-abi.c
diff --git
a/lttng-abi.c
b/lttng-abi.c
index bde20864d526b40220d42db1b79fff8f3f1df35a..26a456ece13f7ed0a62b5e3b3e92d2cff942c17c 100644
(file)
--- a/
lttng-abi.c
+++ b/
lttng-abi.c
@@
-539,7
+539,7
@@
unsigned int lttng_metadata_ring_buffer_poll(struct file *filp,
mask |= POLLHUP;
if (stream->metadata_cache->metadata_written >
mask |= POLLHUP;
if (stream->metadata_cache->metadata_written >
- stream->metadata_
cache_read
)
+ stream->metadata_
out
)
mask |= POLLIN;
}
mask |= POLLIN;
}
@@
-547,7
+547,7
@@
unsigned int lttng_metadata_ring_buffer_poll(struct file *filp,
}
static
}
static
-int lttng_metadata_ring_buffer_ioctl_get_subbuf(struct file *filp,
+int lttng_metadata_ring_buffer_ioctl_get_
next_
subbuf(struct file *filp,
unsigned int cmd, unsigned long arg)
{
struct lttng_metadata_stream *stream = filp->private_data;
unsigned int cmd, unsigned long arg)
{
struct lttng_metadata_stream *stream = filp->private_data;
@@
-564,6
+564,15
@@
int lttng_metadata_ring_buffer_ioctl_get_subbuf(struct file *filp,
return ret;
}
return ret;
}
+static
+void lttng_metadata_ring_buffer_ioctl_put_next_subbuf(struct file *filp,
+ unsigned int cmd, unsigned long arg)
+{
+ struct lttng_metadata_stream *stream = filp->private_data;
+
+ stream->metadata_out = stream->metadata_in;
+}
+
static
long lttng_metadata_ring_buffer_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg)
static
long lttng_metadata_ring_buffer_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg)
@@
-573,25
+582,46
@@
long lttng_metadata_ring_buffer_ioctl(struct file *filp,
struct lib_ring_buffer *buf = stream->priv;
switch (cmd) {
struct lib_ring_buffer *buf = stream->priv;
switch (cmd) {
- case RING_BUFFER_GET_SUBBUF:
case RING_BUFFER_GET_NEXT_SUBBUF:
{
case RING_BUFFER_GET_NEXT_SUBBUF:
{
- ret = lttng_metadata_ring_buffer_ioctl_get_subbuf(filp,
+ ret = lttng_metadata_ring_buffer_ioctl_get_
next_
subbuf(filp,
cmd, arg);
if (ret < 0)
goto err;
break;
}
cmd, arg);
if (ret < 0)
goto err;
break;
}
+ case RING_BUFFER_GET_SUBBUF:
+ {
+ /*
+ * Random access is not allowed for metadata channel.
+ */
+ return -ENOSYS;
+ }
default:
break;
}
default:
break;
}
+ /* PUT_SUBBUF is the one from lib ring buffer, unmodified. */
+
/* Performing lib ring buffer ioctl after our own. */
/* Performing lib ring buffer ioctl after our own. */
- return lib_ring_buffer_ioctl(filp, cmd, arg, buf);
+ ret = lib_ring_buffer_ioctl(filp, cmd, arg, buf);
+ if (ret < 0)
+ goto err;
+ switch (cmd) {
+ case RING_BUFFER_PUT_NEXT_SUBBUF:
+ {
+ lttng_metadata_ring_buffer_ioctl_put_next_subbuf(filp,
+ cmd, arg);
+ break;
+ }
+ default:
+ break;
+ }
err:
return ret;
}
err:
return ret;
}
+#ifdef CONFIG_COMPAT
static
long lttng_metadata_ring_buffer_compat_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg)
static
long lttng_metadata_ring_buffer_compat_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg)
@@
-601,24
+631,45
@@
long lttng_metadata_ring_buffer_compat_ioctl(struct file *filp,
struct lib_ring_buffer *buf = stream->priv;
switch (cmd) {
struct lib_ring_buffer *buf = stream->priv;
switch (cmd) {
- case RING_BUFFER_GET_SUBBUF:
case RING_BUFFER_GET_NEXT_SUBBUF:
{
case RING_BUFFER_GET_NEXT_SUBBUF:
{
- ret = lttng_metadata_ring_buffer_ioctl_get_subbuf(filp,
+ ret = lttng_metadata_ring_buffer_ioctl_get_
next_
subbuf(filp,
cmd, arg);
if (ret < 0)
goto err;
break;
}
cmd, arg);
if (ret < 0)
goto err;
break;
}
+ case RING_BUFFER_GET_SUBBUF:
+ {
+ /*
+ * Random access is not allowed for metadata channel.
+ */
+ return -ENOSYS;
+ }
default:
break;
}
default:
break;
}
+ /* PUT_SUBBUF is the one from lib ring buffer, unmodified. */
+
/* Performing lib ring buffer ioctl after our own. */
/* Performing lib ring buffer ioctl after our own. */
- return lib_ring_buffer_compat_ioctl(filp, cmd, arg, buf);
+ ret = lib_ring_buffer_compat_ioctl(filp, cmd, arg, buf);
+ if (ret < 0)
+ goto err;
+ switch (cmd) {
+ case RING_BUFFER_PUT_NEXT_SUBBUF:
+ {
+ lttng_metadata_ring_buffer_ioctl_put_next_subbuf(filp,
+ cmd, arg);
+ break;
+ }
+ default:
+ break;
+ }
err:
return ret;
}
err:
return ret;
}
+#endif
static
int lttng_metadata_ring_buffer_open(struct inode *inode, struct file *file)
static
int lttng_metadata_ring_buffer_open(struct inode *inode, struct file *file)
@@
-635,8
+686,11
@@
int lttng_metadata_ring_buffer_release(struct inode *inode, struct file *file)
{
struct lttng_metadata_stream *stream = file->private_data;
struct lib_ring_buffer *buf = stream->priv;
{
struct lttng_metadata_stream *stream = file->private_data;
struct lib_ring_buffer *buf = stream->priv;
+ struct channel *chan = buf->backend.chan;
+ struct lttng_channel *lttng_chan = channel_get_private(chan);
kref_put(&stream->metadata_cache->refcount, metadata_cache_destroy);
kref_put(&stream->metadata_cache->refcount, metadata_cache_destroy);
+ fput(lttng_chan->file);
return lib_ring_buffer_release(inode, file, buf);
}
return lib_ring_buffer_release(inode, file, buf);
}
@@
-768,6
+822,7
@@
int lttng_abi_open_metadata_stream(struct file *channel_file)
if (ret < 0)
goto fd_error;
if (ret < 0)
goto fd_error;
+ atomic_long_inc(&channel_file->f_count);
kref_get(&session->metadata_cache->refcount);
list_add(&metadata_stream->list,
&session->metadata_cache->metadata_stream);
kref_get(&session->metadata_cache->refcount);
list_add(&metadata_stream->list,
&session->metadata_cache->metadata_stream);
This page took
0.026655 seconds
and
4
git commands to generate.