return length;
 }
 
-static u64 rb_time_delta(struct ring_buffer_event *event)
-{
-       switch (event->type_len) {
-       case RINGBUF_TYPE_PADDING:
-               return 0;
-
-       case RINGBUF_TYPE_TIME_EXTEND:
-               return rb_event_time_stamp(event);
-
-       case RINGBUF_TYPE_TIME_STAMP:
-               return 0;
-
-       case RINGBUF_TYPE_DATA:
-               return event->time_delta;
-       default:
-               return 0;
-       }
-}
-
 static inline bool
 rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
                  struct ring_buffer_event *event)
        unsigned long new_index, old_index;
        struct buffer_page *bpage;
        unsigned long addr;
-       u64 write_stamp;
-       u64 delta;
 
        new_index = rb_event_index(event);
        old_index = new_index + rb_event_ts_length(event);
 
        bpage = READ_ONCE(cpu_buffer->tail_page);
 
-       delta = rb_time_delta(event);
-
-       if (!rb_time_read(&cpu_buffer->write_stamp, &write_stamp))
-               return false;
-
-       /* Make sure the write stamp is read before testing the location */
-       barrier();
-
+       /*
+        * Make sure the tail_page is still the same and
+        * the next write location is the end of this event
+        */
        if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) {
                unsigned long write_mask =
                        local_read(&bpage->write) & ~RB_WRITE_MASK;
                 * to make sure that the next event adds an absolute
                 * value and does not rely on the saved write stamp, which
                 * is now going to be bogus.
+                *
+                * By setting the before_stamp to zero, the next event
+                * is not going to use the write_stamp and will instead
+                * create an absolute timestamp. This means there's no
+                * reason to update the wirte_stamp!
                 */
                rb_time_set(&cpu_buffer->before_stamp, 0);
 
-               /* Something came in, can't discard */
-               if (!rb_time_cmpxchg(&cpu_buffer->write_stamp,
-                                      write_stamp, write_stamp - delta))
-                       return false;
-
                /*
                 * If an event were to come in now, it would see that the
                 * write_stamp and the before_stamp are different, and assume
                 * that this event just added itself before updating
                 * the write stamp. The interrupting event will fix the
-                * write stamp for us, and use the before stamp as its delta.
+                * write stamp for us, and use an absolute timestamp.
                 */
 
                /*
                return;
 
        /*
-        * If this interrupted another event, 
+        * If this interrupted another event,
         */
        if (atomic_inc_return(this_cpu_ptr(&checking)) != 1)
                goto out;