unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
        struct trace_event *event;
        struct trace_entry *entry = iter->ent;
-       int ret;
 
        test_cpu_buff_start(iter);
 
        event = ftrace_find_event(entry->type);
 
        if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
-               ret = trace_print_lat_context(iter);
-               if (ret)
-                       return ret;
+               if (!trace_print_lat_context(iter))
+                       goto partial;
        }
 
-       if (event && event->latency_trace) {
-               ret = event->latency_trace(iter, sym_flags);
-               if (ret)
-                       return ret;
-               return TRACE_TYPE_HANDLED;
-       }
+       if (event && event->latency_trace)
+               return event->latency_trace(iter, sym_flags);
+
+       if (!trace_seq_printf(s, "Unknown type %d\n", entry->type))
+               goto partial;
 
-       trace_seq_printf(s, "Unknown type %d\n", entry->type);
        return TRACE_TYPE_HANDLED;
+partial:
+       return TRACE_TYPE_PARTIAL_LINE;
 }
 
 static enum print_line_t print_trace_fmt(struct trace_iterator *iter)
        unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
        struct trace_entry *entry;
        struct trace_event *event;
-       int ret;
 
        entry = iter->ent;
 
        event = ftrace_find_event(entry->type);
 
        if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
-               ret = trace_print_context(iter);
-               if (ret)
-                       return ret;
+               if (!trace_print_context(iter))
+                       goto partial;
        }
 
-       if (event && event->trace) {
-               ret = event->trace(iter, sym_flags);
-               if (ret)
-                       return ret;
-               return TRACE_TYPE_HANDLED;
-       }
-       ret = trace_seq_printf(s, "Unknown type %d\n", entry->type);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       if (event && event->trace)
+               return event->trace(iter, sym_flags);
+
+       if (!trace_seq_printf(s, "Unknown type %d\n", entry->type))
+               goto partial;
 
        return TRACE_TYPE_HANDLED;
+partial:
+       return TRACE_TYPE_PARTIAL_LINE;
 }
 
 static enum print_line_t print_raw_fmt(struct trace_iterator *iter)
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry;
        struct trace_event *event;
-       int ret;
 
        entry = iter->ent;
 
        if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
-               ret = trace_seq_printf(s, "%d %d %llu ",
-                       entry->pid, iter->cpu, iter->ts);
-               if (!ret)
-                       return TRACE_TYPE_PARTIAL_LINE;
+               if (!trace_seq_printf(s, "%d %d %llu ",
+                                     entry->pid, iter->cpu, iter->ts))
+                       goto partial;
        }
 
        event = ftrace_find_event(entry->type);
-       if (event && event->raw) {
-               ret = event->raw(iter, 0);
-               if (ret)
-                       return ret;
-               return TRACE_TYPE_HANDLED;
-       }
-       ret = trace_seq_printf(s, "%d ?\n", entry->type);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       if (event && event->raw)
+               return event->raw(iter, 0);
+
+       if (!trace_seq_printf(s, "%d ?\n", entry->type))
+               goto partial;
 
        return TRACE_TYPE_HANDLED;
+partial:
+       return TRACE_TYPE_PARTIAL_LINE;
 }
 
 static enum print_line_t print_hex_fmt(struct trace_iterator *iter)
        }
 
        event = ftrace_find_event(entry->type);
-       if (event && event->hex)
-               event->hex(iter, 0);
+       if (event && event->hex) {
+               int ret = event->hex(iter, 0);
+               if (ret != TRACE_TYPE_HANDLED)
+                       return ret;
+       }
 
        SEQ_PUT_FIELD_RET(s, newline);
 
 
        event = ftrace_find_event(entry->type);
        if (event && event->binary)
-               event->binary(iter, 0);
+               return event->binary(iter, 0);
 
        return TRACE_TYPE_HANDLED;
 }
 
        return ret;
 }
 
-static void
+static int
 lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
 {
        int hardirq, softirq;
        char *comm;
 
        comm = trace_find_cmdline(entry->pid);
-
-       trace_seq_printf(s, "%8.8s-%-5d ", comm, entry->pid);
-       trace_seq_printf(s, "%3d", cpu);
-       trace_seq_printf(s, "%c%c",
-                       (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
-                        (entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ? 'X' : '.',
-                       ((entry->flags & TRACE_FLAG_NEED_RESCHED) ? 'N' : '.'));
-
        hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
        softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
-       if (hardirq && softirq) {
-               trace_seq_putc(s, 'H');
-       } else {
-               if (hardirq) {
-                       trace_seq_putc(s, 'h');
-               } else {
-                       if (softirq)
-                               trace_seq_putc(s, 's');
-                       else
-                               trace_seq_putc(s, '.');
-               }
-       }
+
+       if (!trace_seq_printf(s, "%8.8s-%-5d %3d%c%c%c",
+                             comm, entry->pid, cpu,
+                             (entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
+                               (entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
+                                 'X' : '.',
+                             (entry->flags & TRACE_FLAG_NEED_RESCHED) ?
+                               'N' : '.',
+                             (hardirq && softirq) ? 'H' :
+                               hardirq ? 'h' : softirq ? 's' : '.'))
+               return 0;
 
        if (entry->preempt_count)
-               trace_seq_printf(s, "%x", entry->preempt_count);
-       else
-               trace_seq_puts(s, ".");
+               return trace_seq_printf(s, "%x", entry->preempt_count);
+       return trace_seq_puts(s, ".");
 }
 
 static unsigned long preempt_mark_thresh = 100;
 
-static void
+static int
 lat_print_timestamp(struct trace_seq *s, u64 abs_usecs,
                    unsigned long rel_usecs)
 {
-       trace_seq_printf(s, " %4lldus", abs_usecs);
-       if (rel_usecs > preempt_mark_thresh)
-               trace_seq_puts(s, "!: ");
-       else if (rel_usecs > 1)
-               trace_seq_puts(s, "+: ");
-       else
-               trace_seq_puts(s, " : ");
+       return trace_seq_printf(s, " %4lldus%c: ", abs_usecs,
+                               rel_usecs > preempt_mark_thresh ? '!' :
+                                 rel_usecs > 1 ? '+' : ' ');
 }
 
 int trace_print_context(struct trace_iterator *iter)
        unsigned long usec_rem = do_div(t, USEC_PER_SEC);
        unsigned long secs = (unsigned long)t;
 
-       if (!trace_seq_printf(s, "%16s-%-5d ", comm, entry->pid))
-               goto partial;
-       if (!trace_seq_printf(s, "[%03d] ", entry->cpu))
-               goto partial;
-       if (!trace_seq_printf(s, "%5lu.%06lu: ", secs, usec_rem))
-               goto partial;
-
-       return 0;
-
-partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_seq_printf(s, "%16s-%-5d [%03d] %5lu.%06lu: ",
+                               comm, entry->pid, entry->cpu, secs, usec_rem);
 }
 
 int trace_print_lat_context(struct trace_iterator *iter)
 {
        u64 next_ts;
+       int ret;
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry = iter->ent,
                           *next_entry = trace_find_next_entry(iter, NULL,
 
        if (verbose) {
                char *comm = trace_find_cmdline(entry->pid);
-               trace_seq_printf(s, "%16s %5d %3d %d %08x %08lx [%08lx]"
-                                " %ld.%03ldms (+%ld.%03ldms): ",
-                                comm,
-                                entry->pid, entry->cpu, entry->flags,
-                                entry->preempt_count, iter->idx,
-                                ns2usecs(iter->ts),
-                                abs_usecs/1000,
-                                abs_usecs % 1000, rel_usecs/1000,
-                                rel_usecs % 1000);
+               ret = trace_seq_printf(s, "%16s %5d %3d %d %08x %08lx [%08lx]"
+                                      " %ld.%03ldms (+%ld.%03ldms): ", comm,
+                                      entry->pid, entry->cpu, entry->flags,
+                                      entry->preempt_count, iter->idx,
+                                      ns2usecs(iter->ts),
+                                      abs_usecs / USEC_PER_MSEC,
+                                      abs_usecs % USEC_PER_MSEC,
+                                      rel_usecs / USEC_PER_MSEC,
+                                      rel_usecs % USEC_PER_MSEC);
        } else {
-               lat_print_generic(s, entry, entry->cpu);
-               lat_print_timestamp(s, abs_usecs, rel_usecs);
+               ret = lat_print_generic(s, entry, entry->cpu);
+               if (ret)
+                       ret = lat_print_timestamp(s, abs_usecs, rel_usecs);
        }
 
-       return 0;
+       return ret;
 }
 
 static const char state_to_char[] = TASK_STATE_TO_CHAR_STR;
 
 int trace_nop_print(struct trace_iterator *iter, int flags)
 {
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 /* TRACE_FN */
        if (!trace_seq_puts(s, ")\n"))
                goto partial;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;
        if (!trace_seq_printf(s, "\n"))
                goto partial;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;
                              field->parent_ip))
                return TRACE_TYPE_PARTIAL_LINE;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_fn_hex(struct trace_iterator *iter, int flags)
        SEQ_PUT_HEX_FIELD_RET(s, field->ip);
        SEQ_PUT_HEX_FIELD_RET(s, field->parent_ip);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_fn_bin(struct trace_iterator *iter, int flags)
        SEQ_PUT_FIELD_RET(s, field->ip);
        SEQ_PUT_FIELD_RET(s, field->parent_ip);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static struct trace_event trace_fn_event = {
                              T, comm))
                return TRACE_TYPE_PARTIAL_LINE;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_ctx_print(struct trace_iterator *iter, int flags)
                              T))
                return TRACE_TYPE_PARTIAL_LINE;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_ctx_raw(struct trace_iterator *iter, int flags)
        SEQ_PUT_HEX_FIELD_RET(s, field->next_prio);
        SEQ_PUT_HEX_FIELD_RET(s, T);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_ctx_hex(struct trace_iterator *iter, int flags)
        SEQ_PUT_FIELD_RET(s, field->next_prio);
        SEQ_PUT_FIELD_RET(s, field->next_state);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static struct trace_event trace_ctx_event = {
                              field->arg3))
                return TRACE_TYPE_PARTIAL_LINE;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_special_hex(struct trace_iterator *iter, int flags)
        SEQ_PUT_HEX_FIELD_RET(s, field->arg2);
        SEQ_PUT_HEX_FIELD_RET(s, field->arg3);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static int trace_special_bin(struct trace_iterator *iter, int flags)
        SEQ_PUT_FIELD_RET(s, field->arg2);
        SEQ_PUT_FIELD_RET(s, field->arg3);
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 }
 
 static struct trace_event trace_special_event = {
                        goto partial;
        }
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;
        if (!trace_seq_putc(s, '\n'))
                goto partial;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;
        if (!trace_seq_printf(s, ": %s", field->buf))
                goto partial;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;
        if (!trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf))
                goto partial;
 
-       return 0;
+       return TRACE_TYPE_HANDLED;
 
  partial:
        return TRACE_TYPE_PARTIAL_LINE;