Fix: don't perform extra flush on metadata channel
[lttng-modules.git] / lib / ringbuffer / ring_buffer_vfs.c
index dae73de398c5ea38dba90f0bd384d5f21f327d30..71991ebb29554ba9b2df713a73750d6e79acc843 100644 (file)
@@ -28,6 +28,7 @@
 #include "../../wrapper/ringbuffer/frontend.h"
 #include "../../wrapper/ringbuffer/vfs.h"
 #include "../../wrapper/poll.h"
+#include "../../lttng-tracer.h"
 
 static int put_ulong(unsigned long val, unsigned long arg)
 {
@@ -190,6 +191,15 @@ long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd,
 
        switch (cmd) {
        case RING_BUFFER_SNAPSHOT:
+               /*
+                * First, ensure we perform a "final" flush onto the
+                * stream.  This will ensure we create a packet of
+                * padding if we encounter an empty packet. This ensures
+                * the time-stamps right before the snapshot is used as
+                * end of packet timestamp.
+                */
+               if (!buf->quiescent)
+                       lib_ring_buffer_switch_remote_empty(buf);
                return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
                                            &buf->prod_snapshot);
        case RING_BUFFER_SNAPSHOT_GET_CONSUMED:
@@ -319,6 +329,15 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
 
        switch (cmd) {
        case RING_BUFFER_COMPAT_SNAPSHOT:
+               /*
+                * First, ensure we perform a "final" flush onto the
+                * stream.  This will ensure we create a packet of
+                * padding if we encounter an empty packet. This ensures
+                * the time-stamps right before the snapshot is used as
+                * end of packet timestamp.
+                */
+               if (!buf->quiescent)
+                       lib_ring_buffer_switch_remote_empty(buf);
                return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
                                                &buf->prod_snapshot);
        case RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED:
@@ -448,3 +467,7 @@ EXPORT_SYMBOL_GPL(lib_ring_buffer_file_operations);
 MODULE_LICENSE("GPL and additional rights");
 MODULE_AUTHOR("Mathieu Desnoyers");
 MODULE_DESCRIPTION("Ring Buffer Library VFS");
+MODULE_VERSION(__stringify(LTTNG_MODULES_MAJOR_VERSION) "."
+       __stringify(LTTNG_MODULES_MINOR_VERSION) "."
+       __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION)
+       LTTNG_MODULES_EXTRAVERSION);
This page took 0.02472 seconds and 4 git commands to generate.