diff options
| -rw-r--r-- | Documentation/dynamic-debug-howto.txt | 7 | ||||
| -rw-r--r-- | lib/dynamic_debug.c | 18 | 
2 files changed, 19 insertions, 6 deletions
diff --git a/Documentation/dynamic-debug-howto.txt b/Documentation/dynamic-debug-howto.txt index f959909d715..378b5d1bf43 100644 --- a/Documentation/dynamic-debug-howto.txt +++ b/Documentation/dynamic-debug-howto.txt @@ -144,11 +144,12 @@ func      func svc_tcp_accept  file -    The given string is compared against either the full -    pathname or the basename of the source file of each -    callsite.  Examples: +    The given string is compared against either the full pathname, the +    src-root relative pathname, or the basename of the source file of +    each callsite.  Examples:      file svcsock.c +    file kernel/freezer.c      file /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c  module diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index d8773dcd83c..a5508a12b83 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -69,6 +69,17 @@ static inline const char *basename(const char *path)  	return tail ? tail+1 : path;  } +/* Return the path relative to source root */ +static inline const char *trim_prefix(const char *path) +{ +	int skip = strlen(__FILE__) - strlen("lib/dynamic_debug.c"); + +	if (strncmp(path, __FILE__, skip)) +		skip = 0; /* prefix mismatch, don't skip */ + +	return path + skip; +} +  static struct { unsigned flag:8; char opt_char; } opt_array[] = {  	{ _DPRINTK_FLAGS_PRINT, 'p' },  	{ _DPRINTK_FLAGS_INCL_MODNAME, 'm' }, @@ -125,7 +136,8 @@ static void ddebug_change(const struct ddebug_query *query,  			/* match against the source filename */  			if (query->filename &&  			    strcmp(query->filename, dp->filename) && -			    strcmp(query->filename, basename(dp->filename))) +			    strcmp(query->filename, basename(dp->filename)) && +			    strcmp(query->filename, trim_prefix(dp->filename)))  				continue;  			/* match against the function */ @@ -154,7 +166,7 @@ static void ddebug_change(const struct ddebug_query *query,  			dp->flags = newflags;  			if (verbose)  				pr_info("changed %s:%d [%s]%s =%s\n", -					dp->filename, dp->lineno, +					trim_prefix(dp->filename), dp->lineno,  					dt->mod_name, dp->function,  					ddebug_describe_flags(dp, flagbuf,  							sizeof(flagbuf))); @@ -714,7 +726,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p)  	}  	seq_printf(m, "%s:%u [%s]%s =%s \"", -		dp->filename, dp->lineno, +		trim_prefix(dp->filename), dp->lineno,  		iter->table->mod_name, dp->function,  		ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf)));  	seq_escape(m, dp->format, "\t\r\n\"");  |