Commit 77c0edde authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware)
Browse files

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: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 31805c90
Loading
Loading
Loading
Loading
+9 −11
Original line number Original line Diff line number Diff line
@@ -3631,22 +3631,20 @@ ftrace_match_record(struct dyn_ftrace *rec, struct ftrace_glob *func_g,
		/* blank module name to match all modules */
		/* blank module name to match all modules */
		if (!mod_g->len) {
		if (!mod_g->len) {
			/* blank module globbing: modname xor exclude_mod */
			/* blank module globbing: modname xor exclude_mod */
			if ((!exclude_mod) != (!modname))
			if (!exclude_mod != !modname)
				goto func_match;
				goto func_match;
			return 0;
			return 0;
		}
		}


		/* not matching the module */
		/*
		if (!modname || !mod_matches) {
		 * exclude_mod is set to trace everything but the given
			if (exclude_mod)
		 * module. If it is set and the module matches, then
				goto func_match;
		 * return 0. If it is not set, and the module doesn't match
			else
		 * also return 0. Otherwise, check the function to see if
				return 0;
		 * that matches.
		}
		 */

		if (!mod_matches == !exclude_mod)
		if (exclude_mod)
			return 0;
			return 0;

func_match:
func_match:
		/* blank search means to match all funcs in the mod */
		/* blank search means to match all funcs in the mod */
		if (!func_g->len)
		if (!func_g->len)