tracing/filters: Always free pred on filter_add_subsystem_pred() failure

If filter_add_subsystem_pred() fails due to ENOSPC or ENOMEM,
the pred doesn't get freed, while as a side effect it does for
other errors. Make it so the caller always frees the pred for
any error.

Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Li Zefan <lizf@cn.fujitsu.com>
LKML-Reference: <1249746593.6453.32.camel@tropicana>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by Tom Zanussi and committed by Ingo Molnar 26528e77 96b2de31

+11 -5
+11 -5
kernel/trace/trace_events_filter.c
··· 624 624 return -ENOSPC; 625 625 } 626 626 627 - filter->preds[filter->n_preds] = pred; 628 - filter->n_preds++; 629 - 630 627 list_for_each_entry(call, &ftrace_events, list) { 631 628 632 629 if (!call->define_fields) ··· 640 643 } 641 644 replace_filter_string(call->filter, filter_string); 642 645 } 646 + 647 + filter->preds[filter->n_preds] = pred; 648 + filter->n_preds++; 643 649 out: 644 650 return err; 645 651 } ··· 1034 1034 if (call) { 1035 1035 err = filter_add_pred(ps, call, pred); 1036 1036 filter_free_pred(pred); 1037 - } else 1037 + } else { 1038 1038 err = filter_add_subsystem_pred(ps, system, 1039 1039 pred, filter_string); 1040 + if (err) 1041 + filter_free_pred(pred); 1042 + } 1040 1043 if (err) 1041 1044 return err; 1042 1045 ··· 1058 1055 if (call) { 1059 1056 err = filter_add_pred(ps, call, pred); 1060 1057 filter_free_pred(pred); 1061 - } else 1058 + } else { 1062 1059 err = filter_add_subsystem_pred(ps, system, pred, 1063 1060 filter_string); 1061 + if (err) 1062 + filter_free_pred(pred); 1063 + } 1064 1064 if (err) 1065 1065 return err; 1066 1066