Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[cascardo/linux.git] / kernel / trace / trace_output.c
index c6977d5..b77b9a6 100644 (file)
@@ -25,15 +25,12 @@ enum print_line_t trace_print_bputs_msg_only(struct trace_iterator *iter)
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry = iter->ent;
        struct bputs_entry *field;
-       int ret;
 
        trace_assign_type(field, entry);
 
-       ret = trace_seq_puts(s, field->str);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_puts(s, field->str);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 enum print_line_t trace_print_bprintk_msg_only(struct trace_iterator *iter)
@@ -41,15 +38,12 @@ enum print_line_t trace_print_bprintk_msg_only(struct trace_iterator *iter)
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry = iter->ent;
        struct bprint_entry *field;
-       int ret;
 
        trace_assign_type(field, entry);
 
-       ret = trace_seq_bprintf(s, field->fmt, field->buf);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_bprintf(s, field->fmt, field->buf);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter)
@@ -57,15 +51,12 @@ enum print_line_t trace_print_printk_msg_only(struct trace_iterator *iter)
        struct trace_seq *s = &iter->seq;
        struct trace_entry *entry = iter->ent;
        struct print_entry *field;
-       int ret;
 
        trace_assign_type(field, entry);
 
-       ret = trace_seq_puts(s, field->buf);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_puts(s, field->buf);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 const char *
@@ -124,7 +115,7 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
 
        if (ret == (const char *)(trace_seq_buffer_ptr(p)))
                trace_seq_printf(p, "0x%lx", val);
-               
+
        trace_seq_putc(p, 0);
 
        return ret;
@@ -193,7 +184,6 @@ int ftrace_raw_output_prep(struct trace_iterator *iter,
        struct trace_seq *s = &iter->seq;
        struct trace_seq *p = &iter->tmp_seq;
        struct trace_entry *entry;
-       int ret;
 
        event = container_of(trace_event, struct ftrace_event_call, event);
        entry = iter->ent;
@@ -204,11 +194,9 @@ int ftrace_raw_output_prep(struct trace_iterator *iter,
        }
 
        trace_seq_init(p);
-       ret = trace_seq_printf(s, "%s: ", ftrace_event_name(event));
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_printf(s, "%s: ", ftrace_event_name(event));
 
-       return 0;
+       return trace_handle_return(s);
 }
 EXPORT_SYMBOL(ftrace_raw_output_prep);
 
@@ -216,18 +204,11 @@ static int ftrace_output_raw(struct trace_iterator *iter, char *name,
                             char *fmt, va_list ap)
 {
        struct trace_seq *s = &iter->seq;
-       int ret;
-
-       ret = trace_seq_printf(s, "%s: ", name);
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
-
-       ret = trace_seq_vprintf(s, fmt, ap);
 
-       if (!ret)
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_printf(s, "%s: ", name);
+       trace_seq_vprintf(s, fmt, ap);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 int ftrace_output_call(struct trace_iterator *iter, char *name, char *fmt, ...)
@@ -260,7 +241,7 @@ static inline const char *kretprobed(const char *name)
 }
 #endif /* CONFIG_KRETPROBES */
 
-static int
+static void
 seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)
 {
 #ifdef CONFIG_KALLSYMS
@@ -271,12 +252,11 @@ seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)
 
        name = kretprobed(str);
 
-       return trace_seq_printf(s, fmt, name);
+       trace_seq_printf(s, fmt, name);
 #endif
-       return 1;
 }
 
-static int
+static void
 seq_print_sym_offset(struct trace_seq *s, const char *fmt,
                     unsigned long address)
 {
@@ -287,9 +267,8 @@ seq_print_sym_offset(struct trace_seq *s, const char *fmt,
        sprint_symbol(str, address);
        name = kretprobed(str);
 
-       return trace_seq_printf(s, fmt, name);
+       trace_seq_printf(s, fmt, name);
 #endif
-       return 1;
 }
 
 #ifndef CONFIG_64BIT
@@ -320,14 +299,14 @@ int seq_print_user_ip(struct trace_seq *s, struct mm_struct *mm,
                if (file) {
                        ret = trace_seq_path(s, &file->f_path);
                        if (ret)
-                               ret = trace_seq_printf(s, "[+0x%lx]",
-                                                      ip - vmstart);
+                               trace_seq_printf(s, "[+0x%lx]",
+                                                ip - vmstart);
                }
                up_read(&mm->mmap_sem);
        }
        if (ret && ((sym_flags & TRACE_ITER_SYM_ADDR) || !file))
-               ret = trace_seq_printf(s, " <" IP_FMT ">", ip);
-       return ret;
+               trace_seq_printf(s, " <" IP_FMT ">", ip);
+       return !trace_seq_has_overflowed(s);
 }
 
 int
@@ -335,7 +314,6 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,
                      unsigned long sym_flags)
 {
        struct mm_struct *mm = NULL;
-       int ret = 1;
        unsigned int i;
 
        if (trace_flags & TRACE_ITER_SYM_USEROBJ) {
@@ -354,48 +332,45 @@ seq_print_userip_objs(const struct userstack_entry *entry, struct trace_seq *s,
        for (i = 0; i < FTRACE_STACK_ENTRIES; i++) {
                unsigned long ip = entry->caller[i];
 
-               if (ip == ULONG_MAX || !ret)
+               if (ip == ULONG_MAX || trace_seq_has_overflowed(s))
                        break;
-               if (ret)
-                       ret = trace_seq_puts(s, " => ");
+
+               trace_seq_puts(s, " => ");
+
                if (!ip) {
-                       if (ret)
-                               ret = trace_seq_puts(s, "??");
-                       if (ret)
-                               ret = trace_seq_putc(s, '\n');
+                       trace_seq_puts(s, "??");
+                       trace_seq_putc(s, '\n');
                        continue;
                }
-               if (!ret)
-                       break;
-               if (ret)
-                       ret = seq_print_user_ip(s, mm, ip, sym_flags);
-               ret = trace_seq_putc(s, '\n');
+
+               seq_print_user_ip(s, mm, ip, sym_flags);
+               trace_seq_putc(s, '\n');
        }
 
        if (mm)
                mmput(mm);
-       return ret;
+
+       return !trace_seq_has_overflowed(s);
 }
 
 int
 seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags)
 {
-       int ret;
-
-       if (!ip)
-               return trace_seq_putc(s, '0');
+       if (!ip) {
+               trace_seq_putc(s, '0');
+               goto out;
+       }
 
        if (sym_flags & TRACE_ITER_SYM_OFFSET)
-               ret = seq_print_sym_offset(s, "%s", ip);
+               seq_print_sym_offset(s, "%s", ip);
        else
-               ret = seq_print_sym_short(s, "%s", ip);
-
-       if (!ret)
-               return 0;
+               seq_print_sym_short(s, "%s", ip);
 
        if (sym_flags & TRACE_ITER_SYM_ADDR)
-               ret = trace_seq_printf(s, " <" IP_FMT ">", ip);
-       return ret;
+               trace_seq_printf(s, " <" IP_FMT ">", ip);
+
+ out:
+       return !trace_seq_has_overflowed(s);
 }
 
 /**
@@ -413,7 +388,6 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
        char irqs_off;
        int hardirq;
        int softirq;
-       int ret;
 
        hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
        softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
@@ -445,16 +419,15 @@ int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
                softirq ? 's' :
                '.';
 
-       if (!trace_seq_printf(s, "%c%c%c",
-                             irqs_off, need_resched, hardsoft_irq))
-               return 0;
+       trace_seq_printf(s, "%c%c%c",
+                        irqs_off, need_resched, hardsoft_irq);
 
        if (entry->preempt_count)
-               ret = trace_seq_printf(s, "%x", entry->preempt_count);
+               trace_seq_printf(s, "%x", entry->preempt_count);
        else
-               ret = trace_seq_putc(s, '.');
+               trace_seq_putc(s, '.');
 
-       return ret;
+       return !trace_seq_has_overflowed(s);
 }
 
 static int
@@ -464,14 +437,38 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu)
 
        trace_find_cmdline(entry->pid, comm);
 
-       if (!trace_seq_printf(s, "%8.8s-%-5d %3d",
-                             comm, entry->pid, cpu))
-               return 0;
+       trace_seq_printf(s, "%8.8s-%-5d %3d",
+                        comm, entry->pid, cpu);
 
        return trace_print_lat_fmt(s, entry);
 }
 
-static unsigned long preempt_mark_thresh_us = 100;
+#undef MARK
+#define MARK(v, s) {.val = v, .sym = s}
+/* trace overhead mark */
+static const struct trace_mark {
+       unsigned long long      val; /* unit: nsec */
+       char                    sym;
+} mark[] = {
+       MARK(1000000000ULL      , '$'), /* 1 sec */
+       MARK(1000000ULL         , '#'), /* 1000 usecs */
+       MARK(100000ULL          , '!'), /* 100 usecs */
+       MARK(10000ULL           , '+'), /* 10 usecs */
+};
+#undef MARK
+
+char trace_find_mark(unsigned long long d)
+{
+       int i;
+       int size = ARRAY_SIZE(mark);
+
+       for (i = 0; i < size; i++) {
+               if (d >= mark[i].val)
+                       break;
+       }
+
+       return (i == size) ? ' ' : mark[i].sym;
+}
 
 static int
 lat_print_timestamp(struct trace_iterator *iter, u64 next_ts)
@@ -493,24 +490,28 @@ lat_print_timestamp(struct trace_iterator *iter, u64 next_ts)
                unsigned long rel_usec = do_div(rel_ts, USEC_PER_MSEC);
                unsigned long rel_msec = (unsigned long)rel_ts;
 
-               return trace_seq_printf(
-                               s, "[%08llx] %ld.%03ldms (+%ld.%03ldms): ",
-                               ns2usecs(iter->ts),
-                               abs_msec, abs_usec,
-                               rel_msec, rel_usec);
+               trace_seq_printf(
+                       s, "[%08llx] %ld.%03ldms (+%ld.%03ldms): ",
+                       ns2usecs(iter->ts),
+                       abs_msec, abs_usec,
+                       rel_msec, rel_usec);
+
        } else if (verbose && !in_ns) {
-               return trace_seq_printf(
-                               s, "[%016llx] %lld (+%lld): ",
-                               iter->ts, abs_ts, rel_ts);
+               trace_seq_printf(
+                       s, "[%016llx] %lld (+%lld): ",
+                       iter->ts, abs_ts, rel_ts);
+
        } else if (!verbose && in_ns) {
-               return trace_seq_printf(
-                               s, " %4lldus%c: ",
-                               abs_ts,
-                               rel_ts > preempt_mark_thresh_us ? '!' :
-                                 rel_ts > 1 ? '+' : ' ');
+               trace_seq_printf(
+                       s, " %4lldus%c: ",
+                       abs_ts,
+                       trace_find_mark(rel_ts * NSEC_PER_USEC));
+
        } else { /* !verbose && !in_ns */
-               return trace_seq_printf(s, " %4lld: ", abs_ts);
+               trace_seq_printf(s, " %4lld: ", abs_ts);
        }
+
+       return !trace_seq_has_overflowed(s);
 }
 
 int trace_print_context(struct trace_iterator *iter)
@@ -520,34 +521,29 @@ int trace_print_context(struct trace_iterator *iter)
        unsigned long long t;
        unsigned long secs, usec_rem;
        char comm[TASK_COMM_LEN];
-       int ret;
 
        trace_find_cmdline(entry->pid, comm);
 
-       ret = trace_seq_printf(s, "%16s-%-5d [%03d] ",
+       trace_seq_printf(s, "%16s-%-5d [%03d] ",
                               comm, entry->pid, iter->cpu);
-       if (!ret)
-               return 0;
 
-       if (trace_flags & TRACE_ITER_IRQ_INFO) {
-               ret = trace_print_lat_fmt(s, entry);
-               if (!ret)
-                       return 0;
-       }
+       if (trace_flags & TRACE_ITER_IRQ_INFO)
+               trace_print_lat_fmt(s, entry);
 
        if (iter->iter_flags & TRACE_FILE_TIME_IN_NS) {
                t = ns2usecs(iter->ts);
                usec_rem = do_div(t, USEC_PER_SEC);
                secs = (unsigned long)t;
-               return trace_seq_printf(s, " %5lu.%06lu: ", secs, usec_rem);
+               trace_seq_printf(s, " %5lu.%06lu: ", secs, usec_rem);
        } else
-               return trace_seq_printf(s, " %12llu: ", iter->ts);
+               trace_seq_printf(s, " %12llu: ", iter->ts);
+
+       return !trace_seq_has_overflowed(s);
 }
 
 int trace_print_lat_context(struct trace_iterator *iter)
 {
        u64 next_ts;
-       int ret;
        /* trace_find_next_entry will reset ent_size */
        int ent_size = iter->ent_size;
        struct trace_seq *s = &iter->seq;
@@ -567,18 +563,17 @@ int trace_print_lat_context(struct trace_iterator *iter)
 
                trace_find_cmdline(entry->pid, comm);
 
-               ret = trace_seq_printf(
-                               s, "%16s %5d %3d %d %08x %08lx ",
-                               comm, entry->pid, iter->cpu, entry->flags,
-                               entry->preempt_count, iter->idx);
+               trace_seq_printf(
+                       s, "%16s %5d %3d %d %08x %08lx ",
+                       comm, entry->pid, iter->cpu, entry->flags,
+                       entry->preempt_count, iter->idx);
        } else {
-               ret = lat_print_generic(s, entry, iter->cpu);
+               lat_print_generic(s, entry, iter->cpu);
        }
 
-       if (ret)
-               ret = lat_print_timestamp(iter, next_ts);
+       lat_print_timestamp(iter, next_ts);
 
-       return ret;
+       return !trace_seq_has_overflowed(s);
 }
 
 static const char state_to_char[] = TASK_STATE_TO_CHAR_STR;
@@ -692,7 +687,7 @@ int register_ftrace_event(struct trace_event *event)
                                goto out;
 
                } else {
-                       
+
                        event->type = next_event_type++;
                        list = &ftrace_event_list;
                }
@@ -764,10 +759,9 @@ EXPORT_SYMBOL_GPL(unregister_ftrace_event);
 enum print_line_t trace_nop_print(struct trace_iterator *iter, int flags,
                                  struct trace_event *event)
 {
-       if (!trace_seq_printf(&iter->seq, "type: %d\n", iter->ent->type))
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_printf(&iter->seq, "type: %d\n", iter->ent->type);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(&iter->seq);
 }
 
 /* TRACE_FN */
@@ -779,24 +773,16 @@ static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       if (!seq_print_ip_sym(s, field->ip, flags))
-               goto partial;
+       seq_print_ip_sym(s, field->ip, flags);
 
        if ((flags & TRACE_ITER_PRINT_PARENT) && field->parent_ip) {
-               if (!trace_seq_puts(s, " <-"))
-                       goto partial;
-               if (!seq_print_ip_sym(s,
-                                     field->parent_ip,
-                                     flags))
-                       goto partial;
+               trace_seq_puts(s, " <-");
+               seq_print_ip_sym(s, field->parent_ip, flags);
        }
-       if (!trace_seq_putc(s, '\n'))
-               goto partial;
 
-       return TRACE_TYPE_HANDLED;
+       trace_seq_putc(s, '\n');
 
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static enum print_line_t trace_fn_raw(struct trace_iterator *iter, int flags,
@@ -806,12 +792,11 @@ static enum print_line_t trace_fn_raw(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       if (!trace_seq_printf(&iter->seq, "%lx %lx\n",
-                             field->ip,
-                             field->parent_ip))
-               return TRACE_TYPE_PARTIAL_LINE;
+       trace_seq_printf(&iter->seq, "%lx %lx\n",
+                        field->ip,
+                        field->parent_ip);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(&iter->seq);
 }
 
 static enum print_line_t trace_fn_hex(struct trace_iterator *iter, int flags,
@@ -822,10 +807,10 @@ static enum print_line_t trace_fn_hex(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       SEQ_PUT_HEX_FIELD_RET(s, field->ip);
-       SEQ_PUT_HEX_FIELD_RET(s, field->parent_ip);
+       SEQ_PUT_HEX_FIELD(s, field->ip);
+       SEQ_PUT_HEX_FIELD(s, field->parent_ip);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 static enum print_line_t trace_fn_bin(struct trace_iterator *iter, int flags,
@@ -836,10 +821,10 @@ static enum print_line_t trace_fn_bin(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       SEQ_PUT_FIELD_RET(s, field->ip);
-       SEQ_PUT_FIELD_RET(s, field->parent_ip);
+       SEQ_PUT_FIELD(s, field->ip);
+       SEQ_PUT_FIELD(s, field->parent_ip);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_fn_funcs = {
@@ -868,18 +853,17 @@ static enum print_line_t trace_ctxwake_print(struct trace_iterator *iter,
        T = task_state_char(field->next_state);
        S = task_state_char(field->prev_state);
        trace_find_cmdline(field->next_pid, comm);
-       if (!trace_seq_printf(&iter->seq,
-                             " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n",
-                             field->prev_pid,
-                             field->prev_prio,
-                             S, delim,
-                             field->next_cpu,
-                             field->next_pid,
-                             field->next_prio,
-                             T, comm))
-               return TRACE_TYPE_PARTIAL_LINE;
-
-       return TRACE_TYPE_HANDLED;
+       trace_seq_printf(&iter->seq,
+                        " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n",
+                        field->prev_pid,
+                        field->prev_prio,
+                        S, delim,
+                        field->next_cpu,
+                        field->next_pid,
+                        field->next_prio,
+                        T, comm);
+
+       return trace_handle_return(&iter->seq);
 }
 
 static enum print_line_t trace_ctx_print(struct trace_iterator *iter, int flags,
@@ -904,17 +888,16 @@ static int trace_ctxwake_raw(struct trace_iterator *iter, char S)
        if (!S)
                S = task_state_char(field->prev_state);
        T = task_state_char(field->next_state);
-       if (!trace_seq_printf(&iter->seq, "%d %d %c %d %d %d %c\n",
-                             field->prev_pid,
-                             field->prev_prio,
-                             S,
-                             field->next_cpu,
-                             field->next_pid,
-                             field->next_prio,
-                             T))
-               return TRACE_TYPE_PARTIAL_LINE;
-
-       return TRACE_TYPE_HANDLED;
+       trace_seq_printf(&iter->seq, "%d %d %c %d %d %d %c\n",
+                        field->prev_pid,
+                        field->prev_prio,
+                        S,
+                        field->next_cpu,
+                        field->next_pid,
+                        field->next_prio,
+                        T);
+
+       return trace_handle_return(&iter->seq);
 }
 
 static enum print_line_t trace_ctx_raw(struct trace_iterator *iter, int flags,
@@ -942,15 +925,15 @@ static int trace_ctxwake_hex(struct trace_iterator *iter, char S)
                S = task_state_char(field->prev_state);
        T = task_state_char(field->next_state);
 
-       SEQ_PUT_HEX_FIELD_RET(s, field->prev_pid);
-       SEQ_PUT_HEX_FIELD_RET(s, field->prev_prio);
-       SEQ_PUT_HEX_FIELD_RET(s, S);
-       SEQ_PUT_HEX_FIELD_RET(s, field->next_cpu);
-       SEQ_PUT_HEX_FIELD_RET(s, field->next_pid);
-       SEQ_PUT_HEX_FIELD_RET(s, field->next_prio);
-       SEQ_PUT_HEX_FIELD_RET(s, T);
+       SEQ_PUT_HEX_FIELD(s, field->prev_pid);
+       SEQ_PUT_HEX_FIELD(s, field->prev_prio);
+       SEQ_PUT_HEX_FIELD(s, S);
+       SEQ_PUT_HEX_FIELD(s, field->next_cpu);
+       SEQ_PUT_HEX_FIELD(s, field->next_pid);
+       SEQ_PUT_HEX_FIELD(s, field->next_prio);
+       SEQ_PUT_HEX_FIELD(s, T);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 static enum print_line_t trace_ctx_hex(struct trace_iterator *iter, int flags,
@@ -973,14 +956,15 @@ static enum print_line_t trace_ctxwake_bin(struct trace_iterator *iter,
 
        trace_assign_type(field, iter->ent);
 
-       SEQ_PUT_FIELD_RET(s, field->prev_pid);
-       SEQ_PUT_FIELD_RET(s, field->prev_prio);
-       SEQ_PUT_FIELD_RET(s, field->prev_state);
-       SEQ_PUT_FIELD_RET(s, field->next_pid);
-       SEQ_PUT_FIELD_RET(s, field->next_prio);
-       SEQ_PUT_FIELD_RET(s, field->next_state);
+       SEQ_PUT_FIELD(s, field->prev_pid);
+       SEQ_PUT_FIELD(s, field->prev_prio);
+       SEQ_PUT_FIELD(s, field->prev_state);
+       SEQ_PUT_FIELD(s, field->next_cpu);
+       SEQ_PUT_FIELD(s, field->next_pid);
+       SEQ_PUT_FIELD(s, field->next_prio);
+       SEQ_PUT_FIELD(s, field->next_state);
 
-       return TRACE_TYPE_HANDLED;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_ctx_funcs = {
@@ -1020,23 +1004,19 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter,
        trace_assign_type(field, iter->ent);
        end = (unsigned long *)((long)iter->ent + iter->ent_size);
 
-       if (!trace_seq_puts(s, "<stack trace>\n"))
-               goto partial;
+       trace_seq_puts(s, "<stack trace>\n");
 
        for (p = field->caller; p && *p != ULONG_MAX && p < end; p++) {
-               if (!trace_seq_puts(s, " => "))
-                       goto partial;
 
-               if (!seq_print_ip_sym(s, *p, flags))
-                       goto partial;
-               if (!trace_seq_putc(s, '\n'))
-                       goto partial;
-       }
+               if (trace_seq_has_overflowed(s))
+                       break;
 
-       return TRACE_TYPE_HANDLED;
+               trace_seq_puts(s, " => ");
+               seq_print_ip_sym(s, *p, flags);
+               trace_seq_putc(s, '\n');
+       }
 
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_stack_funcs = {
@@ -1057,16 +1037,10 @@ static enum print_line_t trace_user_stack_print(struct trace_iterator *iter,
 
        trace_assign_type(field, iter->ent);
 
-       if (!trace_seq_puts(s, "<user stack trace>\n"))
-               goto partial;
-
-       if (!seq_print_userip_objs(field, s, flags))
-               goto partial;
-
-       return TRACE_TYPE_HANDLED;
+       trace_seq_puts(s, "<user stack trace>\n");
+       seq_print_userip_objs(field, s, flags);
 
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_user_stack_funcs = {
@@ -1089,19 +1063,11 @@ trace_bputs_print(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, entry);
 
-       if (!seq_print_ip_sym(s, field->ip, flags))
-               goto partial;
+       seq_print_ip_sym(s, field->ip, flags);
+       trace_seq_puts(s, ": ");
+       trace_seq_puts(s, field->str);
 
-       if (!trace_seq_puts(s, ": "))
-               goto partial;
-
-       if (!trace_seq_puts(s, field->str))
-               goto partial;
-
-       return TRACE_TYPE_HANDLED;
-
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 
@@ -1114,16 +1080,10 @@ trace_bputs_raw(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       if (!trace_seq_printf(s, ": %lx : ", field->ip))
-               goto partial;
-
-       if (!trace_seq_puts(s, field->str))
-               goto partial;
+       trace_seq_printf(s, ": %lx : ", field->ip);
+       trace_seq_puts(s, field->str);
 
-       return TRACE_TYPE_HANDLED;
-
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_bputs_funcs = {
@@ -1147,19 +1107,11 @@ trace_bprint_print(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, entry);
 
-       if (!seq_print_ip_sym(s, field->ip, flags))
-               goto partial;
-
-       if (!trace_seq_puts(s, ": "))
-               goto partial;
-
-       if (!trace_seq_bprintf(s, field->fmt, field->buf))
-               goto partial;
+       seq_print_ip_sym(s, field->ip, flags);
+       trace_seq_puts(s, ": ");
+       trace_seq_bprintf(s, field->fmt, field->buf);
 
-       return TRACE_TYPE_HANDLED;
-
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 
@@ -1172,16 +1124,10 @@ trace_bprint_raw(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       if (!trace_seq_printf(s, ": %lx : ", field->ip))
-               goto partial;
-
-       if (!trace_seq_bprintf(s, field->fmt, field->buf))
-               goto partial;
+       trace_seq_printf(s, ": %lx : ", field->ip);
+       trace_seq_bprintf(s, field->fmt, field->buf);
 
-       return TRACE_TYPE_HANDLED;
-
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static struct trace_event_functions trace_bprint_funcs = {
@@ -1203,16 +1149,10 @@ static enum print_line_t trace_print_print(struct trace_iterator *iter,
 
        trace_assign_type(field, iter->ent);
 
-       if (!seq_print_ip_sym(s, field->ip, flags))
-               goto partial;
-
-       if (!trace_seq_printf(s, ": %s", field->buf))
-               goto partial;
+       seq_print_ip_sym(s, field->ip, flags);
+       trace_seq_printf(s, ": %s", field->buf);
 
-       return TRACE_TYPE_HANDLED;
-
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(s);
 }
 
 static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags,
@@ -1222,13 +1162,9 @@ static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       if (!trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf))
-               goto partial;
-
-       return TRACE_TYPE_HANDLED;
+       trace_seq_printf(&iter->seq, "# %lx %s", field->ip, field->buf);
 
- partial:
-       return TRACE_TYPE_PARTIAL_LINE;
+       return trace_handle_return(&iter->seq);
 }
 
 static struct trace_event_functions trace_print_funcs = {