mirror of https://gitee.com/openkylin/linux.git
ftrace: Simplify ftrace_match_record() even more
Dan Carpenter sent a patch to remove a check in ftrace_match_record() because the logic of the code made the check redundant. I looked deeper into the code, and made the following logic table, with the three variables and the result of the original code. modname mod_matches exclude_mod result ------- ----------- ----------- ------ 0 0 0 return 0 0 0 1 func_match 0 1 * < cannot exist > 1 0 0 return 0 1 0 1 func_match 1 1 0 func_match 1 1 1 return 0 Notice that when mod_matches == exclude mod, the result is always to return 0, and when mod_matches != exclude_mod, then the result is to test the function. This means we only need test if mod_matches is equal to exclude_mod. Cc: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
parent
31805c9052
commit
77c0eddeee
|
@ -3631,22 +3631,20 @@ ftrace_match_record(struct dyn_ftrace *rec, struct ftrace_glob *func_g,
|
|||
/* blank module name to match all modules */
|
||||
if (!mod_g->len) {
|
||||
/* blank module globbing: modname xor exclude_mod */
|
||||
if ((!exclude_mod) != (!modname))
|
||||
if (!exclude_mod != !modname)
|
||||
goto func_match;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* not matching the module */
|
||||
if (!modname || !mod_matches) {
|
||||
if (exclude_mod)
|
||||
goto func_match;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (exclude_mod)
|
||||
/*
|
||||
* exclude_mod is set to trace everything but the given
|
||||
* module. If it is set and the module matches, then
|
||||
* return 0. If it is not set, and the module doesn't match
|
||||
* also return 0. Otherwise, check the function to see if
|
||||
* that matches.
|
||||
*/
|
||||
if (!mod_matches == !exclude_mod)
|
||||
return 0;
|
||||
|
||||
func_match:
|
||||
/* blank search means to match all funcs in the mod */
|
||||
if (!func_g->len)
|
||||
|
|
Loading…
Reference in New Issue