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