Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 133468
b: refs/heads/master
c: 9898abb
h: refs/heads/master
v: v3
  • Loading branch information
Greg Banks authored and Greg Kroah-Hartman committed Mar 24, 2009
1 parent 9d5c8bb commit e8b0bc4
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 86151fdf38b3795f292b39defbff39d2684b9c8c
refs/heads/master: 9898abb3d23311fa227a7f46bf4e40fd2954057f
20 changes: 14 additions & 6 deletions trunk/Documentation/dynamic-debug-howto.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ via:

nullarbor:~ # cat <debugfs>/dynamic_debug/control
# filename:lineno [module]function flags format
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:323 [svcxprt_rdma]svc_rdma_cleanup - "SVCRDMA\040Module\040Removed,\040deregister\040RPC\040RDMA\040transport\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:341 [svcxprt_rdma]svc_rdma_init - "\011max_inline\040\040\040\040\040\040\040:\040%d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:340 [svcxprt_rdma]svc_rdma_init - "\011sq_depth\040\040\040\040\040\040\040\040\040:\040%d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:338 [svcxprt_rdma]svc_rdma_init - "\011max_requests\040\040\040\040\040:\040%d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:323 [svcxprt_rdma]svc_rdma_cleanup - "SVCRDMA Module Removed, deregister RPC RDMA transport\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:341 [svcxprt_rdma]svc_rdma_init - "\011max_inline : %d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:340 [svcxprt_rdma]svc_rdma_init - "\011sq_depth : %d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:338 [svcxprt_rdma]svc_rdma_init - "\011max_requests : %d\012"
...


Expand All @@ -72,7 +72,7 @@ you can view all the debug statement callsites with any non-default flags:

nullarbor:~ # awk '$3 != "-"' <debugfs>/dynamic_debug/control
# filename:lineno [module]function flags format
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c:1603 [sunrpc]svc_send p "svc_process:\040st_sendto\040returned\040%d\012"
/usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c:1603 [sunrpc]svc_send p "svc_process: st_sendto returned %d\012"


Command Language Reference
Expand Down Expand Up @@ -166,11 +166,15 @@ format
entire format, only some part. Whitespace and other
special characters can be escaped using C octal character
escape \ooo notation, e.g. the space character is \040.
Alternatively, the string can be enclosed in double quote
characters (") or single quote characters (').
Examples:

format svcrdma: // many of the NFS/RDMA server dprintks
format readahead // some dprintks in the readahead cache
format nfsd:\040SETATTR // how to match a format with whitespace
format nfsd:\040SETATTR // one way to match a format with whitespace
format "nfsd: SETATTR" // a neater way to match a format with whitespace
format 'nfsd: SETATTR' // yet another way to match a format with whitespace

line
The given line number or range of line numbers is compared
Expand Down Expand Up @@ -230,3 +234,7 @@ nullarbor:~ # echo -n 'func svc_process +p' >
// disable all 12 messages in the function svc_process()
nullarbor:~ # echo -n 'func svc_process -p' >
<debugfs>/dynamic_debug/control

// enable messages for NFS calls READ, READLINK, READDIR and READDIR+.
nullarbor:~ # echo -n 'format "nfsd: READ" +p' >
<debugfs>/dynamic_debug/control
53 changes: 33 additions & 20 deletions trunk/lib/dynamic_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,33 +195,46 @@ static void ddebug_change(const struct ddebug_query *query,
printk(KERN_INFO "ddebug: no matches for query\n");
}

/*
* Wrapper around strsep() to collapse the multiple empty tokens
* that it returns when fed sequences of separator characters.
* Now, if we had strtok_r()...
*/
static inline char *nearly_strtok_r(char **p, const char *sep)
{
char *r;

while ((r = strsep(p, sep)) != NULL && *r == '\0')
;
return r;
}

/*
* Split the buffer `buf' into space-separated words.
* Return the number of such words or <0 on error.
* Handles simple " and ' quoting, i.e. without nested,
* embedded or escaped \". Return the number of words
* or <0 on error.
*/
static int ddebug_tokenize(char *buf, char *words[], int maxwords)
{
int nwords = 0;

while (nwords < maxwords &&
(words[nwords] = nearly_strtok_r(&buf, " \t\r\n")) != NULL)
nwords++;
if (buf)
return -EINVAL; /* ran out of words[] before bytes */
while (*buf) {
char *end;

/* Skip leading whitespace */
while (*buf && isspace(*buf))
buf++;
if (!*buf)
break; /* oh, it was trailing whitespace */

/* Run `end' over a word, either whitespace separated or quoted */
if (*buf == '"' || *buf == '\'') {
int quote = *buf++;
for (end = buf ; *end && *end != quote ; end++)
;
if (!*end)
return -EINVAL; /* unclosed quote */
} else {
for (end = buf ; *end && !isspace(*end) ; end++)
;
BUG_ON(end == buf);
}
/* Here `buf' is the start of the word, `end' is one past the end */

if (nwords == maxwords)
return -EINVAL; /* ran out of words[] before bytes */
if (*end)
*end++ = '\0'; /* terminate the word */
words[nwords++] = buf;
buf = end;
}

if (verbose) {
int i;
Expand Down

0 comments on commit e8b0bc4

Please sign in to comment.