projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: allow get/put subbuf in loop for metadata stream
[lttng-modules.git]
/
lttng-abi.c
diff --git
a/lttng-abi.c
b/lttng-abi.c
index 45d78d9750c3473b71b3aa9469ada486e78767e0..ba8362b167a3fd9a42612bc5c2631fedd4cb0bee 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,21
+582,41
@@
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;
}
@@
-602,21
+631,41
@@
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;
}
This page took
0.026233 seconds
and
4
git commands to generate.