return size;
 }
 
+static int tracing_buffers_flush(struct file *file, fl_owner_t id)
+{
+       struct ftrace_buffer_info *info = file->private_data;
+       struct trace_iterator *iter = &info->iter;
+
+       iter->wait_index++;
+       /* Make sure the waiters see the new wait_index */
+       smp_wmb();
+
+       ring_buffer_wake_waiters(iter->array_buffer->buffer, iter->cpu_file);
+
+       return 0;
+}
+
 static int tracing_buffers_release(struct inode *inode, struct file *file)
 {
        struct ftrace_buffer_info *info = file->private_data;
 
        __trace_array_put(iter->tr);
 
-       iter->wait_index++;
-       /* Make sure the waiters see the new wait_index */
-       smp_wmb();
-
-       ring_buffer_wake_waiters(iter->array_buffer->buffer, iter->cpu_file);
-
        if (info->spare)
                ring_buffer_free_read_page(iter->array_buffer->buffer,
                                           info->spare_cpu, info->spare);
        .read           = tracing_buffers_read,
        .poll           = tracing_buffers_poll,
        .release        = tracing_buffers_release,
+       .flush          = tracing_buffers_flush,
        .splice_read    = tracing_buffers_splice_read,
        .unlocked_ioctl = tracing_buffers_ioctl,
        .llseek         = no_llseek,