* [PATCH 0/6] Initial set of 2.6.27 patches, take 3
@ 2008-05-21 18:15 Chuck Lever
2008-05-21 18:15 ` [PATCH 1/6] NFS: Update help text for CONFIG_NFS_FS Chuck Lever
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:15 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
Hi Trond-
Resending the first batch of 2.6.27 patches, with additional fixes.
Using the RPC procedure name in debugging messages should no longer add a
risk of a segmentation fault.
I've also done a third re-implementation of the tk_action function name
patch. I finally managed to find an interface that will perform the symbol
table lookup, and can be called from a module or from built-in code.
Oddly this API has been around for a while; I'm not sure how I missed it
originally. But it should implement the nice function-name-rather-than-
memory-address feature without a wonky table, and without requiring any
additional changes when adding a new FSM state function. It will display
the function name if the lookup succeeds; otherwise it will display a hex
memory address. It works for any arbitrary pointer stored in the
tk_action field.
I've thought of a couple of other ways rpc_show_tasks() could be improved.
First, it could display the IP address of the server handling each request;
and it should have a different column layout for systems with 64-bit
addresses. All for another day, I suppose.
---
Chuck Lever (6):
SUNRPC: Display some debugging information as text rather than numbers
SUNRPC: Refactor rpc_show_tasks
SUNRPC: Don't display the rpc_show_tasks header if there are no tasks
SUNRPC: Rename "call_" functions that are no longer FSM states
SUNRPC: Add a function to display the name of an RPC procedure
NFS: Update help text for CONFIG_NFS_FS
fs/Kconfig | 115 ++++++++++++++++++++++++-------------------------
net/sunrpc/clnt.c | 124 ++++++++++++++++++++++++++++++-----------------------
2 files changed, 128 insertions(+), 111 deletions(-)
--
Signature
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/6] NFS: Update help text for CONFIG_NFS_FS
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
@ 2008-05-21 18:15 ` Chuck Lever
2008-05-21 18:15 ` [PATCH 2/6] SUNRPC: Add a function to display the name of an RPC procedure Chuck Lever
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:15 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
Clean up: refresh the help text for Kconfig items related to the NFS
client. Remove obsolete URLs, and make the language consistent among
the options.
Also move the ROOT_NFS config option next to the options related to the
NFS client.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/Kconfig | 115 ++++++++++++++++++++++++++++++------------------------------
1 files changed, 57 insertions(+), 58 deletions(-)
diff --git a/fs/Kconfig b/fs/Kconfig
index cf12c40..07a61f5 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -1544,10 +1544,6 @@ config UFS_FS
The recently released UFS2 variant (used in FreeBSD 5.x) is
READ-ONLY supported.
- If you only intend to mount files from some other Unix over the
- network using NFS, you don't need the UFS file system support (but
- you need NFS file system support obviously).
-
Note that this option is generally not needed for floppies, since a
good portable way to transport files and directories between unixes
(and even other operating systems) is given by the tar program ("man
@@ -1587,6 +1583,7 @@ menuconfig NETWORK_FILESYSTEMS
Say Y here to get to see options for network filesystems and
filesystem-related networking code, such as NFS daemon and
RPCSEC security modules.
+
This option alone does not add any kernel code.
If you say N, all options in this submenu will be skipped and
@@ -1595,76 +1592,92 @@ menuconfig NETWORK_FILESYSTEMS
if NETWORK_FILESYSTEMS
config NFS_FS
- tristate "NFS file system support"
+ tristate "NFS client support"
depends on INET
select LOCKD
select SUNRPC
select NFS_ACL_SUPPORT if NFS_V3_ACL
help
- If you are connected to some other (usually local) Unix computer
- (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing
- on that computer (the NFS server) using the Network File Sharing
- protocol, say Y. "Mounting files" means that the client can access
- the files with usual UNIX commands as if they were sitting on the
- client's hard disk. For this to work, the server must run the
- programs nfsd and mountd (but does not need to have NFS file system
- support enabled in its kernel). NFS is explained in the Network
- Administrator's Guide, available from
- <http://www.tldp.org/docs.html#guide>, on its man page: "man
- nfs", and in the NFS-HOWTO.
-
- A superior but less widely used alternative to NFS is provided by
- the Coda file system; see "Coda file system support" below.
+ Choose Y here if you want to access files residing on other
+ computers using Sun's Network File System protocol. To compile
+ this file system support as a module, choose M here: the module
+ will be called nfs.
- If you say Y here, you should have said Y to TCP/IP networking also.
- This option would enlarge your kernel by about 27 KB.
+ To mount file systems exported by NFS servers, you also need to
+ install the user space mount.nfs command which can be found in
+ the Linux nfs-utils package, available from http://linux-nfs.org/.
+ Information about using the mount command is available in the
+ mount(8) man page. More detail about the Linux NFS client
+ implementation is available via the nfs(5) man page.
- To compile this file system support as a module, choose M here: the
- module will be called nfs.
+ Below you can choose which versions of the NFS protocol are
+ available in the kernel to mount NFS servers. Support for NFS
+ version 2 (RFC 1094) is always available when NFS_FS is selected.
- If you are configuring a diskless machine which will mount its root
- file system over NFS at boot time, say Y here and to "Kernel
- level IP autoconfiguration" above and to "Root file system on NFS"
- below. You cannot compile this driver as a module in this case.
- There are two packages designed for booting diskless machines over
- the net: netboot, available from
- <http://ftp1.sourceforge.net/netboot/>, and Etherboot,
- available from <http://ftp1.sourceforge.net/etherboot/>.
+ To configure a system which mounts its root file system via NFS
+ at boot time, say Y here, select "Kernel level IP
+ autoconfiguration" in the NETWORK menu, and select "Root file
+ system on NFS" below. You cannot compile this file system as a
+ module in this case.
- If you don't know what all this is about, say N.
+ If unsure, say N.
config NFS_V3
- bool "Provide NFSv3 client support"
+ bool "NFS client support for NFS version 3"
depends on NFS_FS
help
- Say Y here if you want your NFS client to be able to speak version
- 3 of the NFS protocol.
+ This option enables support for version 3 of the NFS protocol
+ (RFC 1813) in the kernel's NFS client.
If unsure, say Y.
config NFS_V3_ACL
- bool "Provide client support for the NFSv3 ACL protocol extension"
+ bool "NFS client support for the NFSv3 ACL protocol extension"
depends on NFS_V3
help
- Implement the NFSv3 ACL protocol extension for manipulating POSIX
- Access Control Lists. The server should also be compiled with
- the NFSv3 ACL protocol extension; see the CONFIG_NFSD_V3_ACL option.
+ Some NFS servers support an auxiliary NFSv3 ACL protocol that
+ Sun added to Solaris but never became an official part of the
+ NFS version 3 protocol. This protocol extension allows
+ applications on NFS clients to manipulate POSIX Access Control
+ Lists on files residing on NFS servers. NFS servers enforce
+ ACLs on local files whether this protocol is available or not.
+
+ Choose Y here if your NFS server supports the Solaris NFSv3 ACL
+ protocol extension and you want your NFS client to allow
+ applications to access and modify ACLs on files on the server.
+
+ Most NFS servers don't support the Solaris NFSv3 ACL protocol
+ extension. You can choose N here or specify the "noacl" mount
+ option to prevent your NFS client from trying to use the NFSv3
+ ACL protocol.
If unsure, say N.
config NFS_V4
- bool "Provide NFSv4 client support (EXPERIMENTAL)"
+ bool "NFS client support for NFS version 4 (EXPERIMENTAL)"
depends on NFS_FS && EXPERIMENTAL
select RPCSEC_GSS_KRB5
help
- Say Y here if you want your NFS client to be able to speak the newer
- version 4 of the NFS protocol.
+ This option enables support for version 4 of the NFS protocol
+ (RFC 3530) in the kernel's NFS client.
- Note: Requires auxiliary userspace daemons which may be found on
- http://www.citi.umich.edu/projects/nfsv4/
+ To mount NFS servers using NFSv4, you also need to install user
+ space programs which can be found in the Linux nfs-utils package,
+ available from http://linux-nfs.org/.
If unsure, say N.
+config ROOT_NFS
+ bool "Root file system on NFS"
+ depends on NFS_FS=y && IP_PNP
+ help
+ If you want your system to mount its root file system via NFS,
+ choose Y here. This is common practice for managing systems
+ without local permanent storage. For details, read
+ <file:Documentation/filesystems/nfsroot.txt>.
+
+ Most people say N here.
+
config NFSD
tristate "NFS server support"
depends on INET
@@ -1746,20 +1759,6 @@ config NFSD_V4
If unsure, say N.
-config ROOT_NFS
- bool "Root file system on NFS"
- depends on NFS_FS=y && IP_PNP
- help
- If you want your Linux box to mount its whole root file system (the
- one containing the directory /) from some other computer over the
- net via NFS (presumably because your box doesn't have a hard disk),
- say Y. Read <file:Documentation/filesystems/nfsroot.txt> for
- details. It is likely that in this case, you also want to say Y to
- "Kernel level IP autoconfiguration" so that your box can discover
- its network address at boot time.
-
- Most people say N here.
-
config LOCKD
tristate
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/6] SUNRPC: Add a function to display the name of an RPC procedure
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
2008-05-21 18:15 ` [PATCH 1/6] NFS: Update help text for CONFIG_NFS_FS Chuck Lever
@ 2008-05-21 18:15 ` Chuck Lever
2008-05-21 18:15 ` [PATCH 3/6] SUNRPC: Rename "call_" functions that are no longer FSM states Chuck Lever
` (4 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:15 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
Improve debugging messages in call_start() and call_verify() by having
them show the RPC procedure name instead of the procedure number.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 23 +++++++++++++++++++----
1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 8945307..b20638b 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -690,6 +690,21 @@ rpc_restart_call(struct rpc_task *task)
}
EXPORT_SYMBOL_GPL(rpc_restart_call);
+#ifdef RPC_DEBUG
+static const char *rpc_proc_name(const struct rpc_task *task)
+{
+ const struct rpc_procinfo *proc = task->tk_msg.rpc_proc;
+
+ if (proc) {
+ if (proc->p_name)
+ return proc->p_name;
+ else
+ return "NULL";
+ } else
+ return "no proc";
+}
+#endif
+
/*
* 0. Initial state
*
@@ -701,9 +716,9 @@ call_start(struct rpc_task *task)
{
struct rpc_clnt *clnt = task->tk_client;
- dprintk("RPC: %5u call_start %s%d proc %d (%s)\n", task->tk_pid,
+ dprintk("RPC: %5u call_start %s%d proc %s (%s)\n", task->tk_pid,
clnt->cl_protname, clnt->cl_vers,
- task->tk_msg.rpc_proc->p_proc,
+ rpc_proc_name(task),
(RPC_IS_ASYNC(task) ? "async" : "sync"));
/* Increment call count */
@@ -1431,10 +1446,10 @@ call_verify(struct rpc_task *task)
error = -EPROTONOSUPPORT;
goto out_err;
case RPC_PROC_UNAVAIL:
- dprintk("RPC: %5u %s: proc %p unsupported by program %u, "
+ dprintk("RPC: %5u %s: proc %s unsupported by program %u, "
"version %u on server %s\n",
task->tk_pid, __func__,
- task->tk_msg.rpc_proc,
+ rpc_proc_name(task),
task->tk_client->cl_prog,
task->tk_client->cl_vers,
task->tk_client->cl_server);
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/6] SUNRPC: Rename "call_" functions that are no longer FSM states
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
2008-05-21 18:15 ` [PATCH 1/6] NFS: Update help text for CONFIG_NFS_FS Chuck Lever
2008-05-21 18:15 ` [PATCH 2/6] SUNRPC: Add a function to display the name of an RPC procedure Chuck Lever
@ 2008-05-21 18:15 ` Chuck Lever
2008-05-21 18:16 ` [PATCH 4/6] SUNRPC: Don't display the rpc_show_tasks header if there are no tasks Chuck Lever
` (3 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:15 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
The RPC client uses a finite state machine to move RPC tasks through each
step of an RPC request. Each state is contained in a function in
net/sunrpc/clnt.c, and named call_foo.
Some of the functions named call_foo have changed over the past few years and
are no longer states in the FSM. These include: call_encode, call_header,
and call_verify. As a clean up, rename the functions that have changed.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 35 ++++++++++++++---------------------
1 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index b20638b..619e4ea 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -58,7 +58,6 @@ static void call_start(struct rpc_task *task);
static void call_reserve(struct rpc_task *task);
static void call_reserveresult(struct rpc_task *task);
static void call_allocate(struct rpc_task *task);
-static void call_encode(struct rpc_task *task);
static void call_decode(struct rpc_task *task);
static void call_bind(struct rpc_task *task);
static void call_bind_status(struct rpc_task *task);
@@ -70,9 +69,9 @@ static void call_refreshresult(struct rpc_task *task);
static void call_timeout(struct rpc_task *task);
static void call_connect(struct rpc_task *task);
static void call_connect_status(struct rpc_task *task);
-static __be32 * call_header(struct rpc_task *task);
-static __be32 * call_verify(struct rpc_task *task);
+static __be32 *rpc_encode_header(struct rpc_task *task);
+static __be32 *rpc_verify_header(struct rpc_task *task);
static int rpc_ping(struct rpc_clnt *clnt, int flags);
static void rpc_register_client(struct rpc_clnt *clnt)
@@ -876,7 +875,7 @@ rpc_xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
* 3. Encode arguments of an RPC call
*/
static void
-call_encode(struct rpc_task *task)
+rpc_xdr_encode(struct rpc_task *task)
{
struct rpc_rqst *req = task->tk_rqstp;
kxdrproc_t encode;
@@ -891,13 +890,14 @@ call_encode(struct rpc_task *task)
(char *)req->rq_buffer + req->rq_callsize,
req->rq_rcvsize);
- /* Encode header and provided arguments */
- encode = task->tk_msg.rpc_proc->p_encode;
- if (!(p = call_header(task))) {
- printk(KERN_INFO "RPC: call_header failed, exit EIO\n");
+ p = rpc_encode_header(task);
+ if (p == NULL) {
+ printk(KERN_INFO "RPC: couldn't encode RPC header, exit EIO\n");
rpc_exit(task, -EIO);
return;
}
+
+ encode = task->tk_msg.rpc_proc->p_encode;
if (encode == NULL)
return;
@@ -1061,7 +1061,7 @@ call_transmit(struct rpc_task *task)
/* Encode here so that rpcsec_gss can use correct sequence number. */
if (rpc_task_need_encode(task)) {
BUG_ON(task->tk_rqstp->rq_bytes_sent != 0);
- call_encode(task);
+ rpc_xdr_encode(task);
/* Did the encode result in an error condition? */
if (task->tk_status != 0)
return;
@@ -1239,8 +1239,7 @@ call_decode(struct rpc_task *task)
goto out_retry;
}
- /* Verify the RPC header */
- p = call_verify(task);
+ p = rpc_verify_header(task);
if (IS_ERR(p)) {
if (p == ERR_PTR(-EAGAIN))
goto out_retry;
@@ -1258,7 +1257,7 @@ call_decode(struct rpc_task *task)
return;
out_retry:
task->tk_status = 0;
- /* Note: call_verify() may have freed the RPC slot */
+ /* Note: rpc_verify_header() may have freed the RPC slot */
if (task->tk_rqstp == req) {
req->rq_received = req->rq_rcv_buf.len = 0;
if (task->tk_client->cl_discrtry)
@@ -1305,11 +1304,8 @@ call_refreshresult(struct rpc_task *task)
return;
}
-/*
- * Call header serialization
- */
static __be32 *
-call_header(struct rpc_task *task)
+rpc_encode_header(struct rpc_task *task)
{
struct rpc_clnt *clnt = task->tk_client;
struct rpc_rqst *req = task->tk_rqstp;
@@ -1329,11 +1325,8 @@ call_header(struct rpc_task *task)
return p;
}
-/*
- * Reply header verification
- */
static __be32 *
-call_verify(struct rpc_task *task)
+rpc_verify_header(struct rpc_task *task)
{
struct kvec *iov = &task->tk_rqstp->rq_rcv_buf.head[0];
int len = task->tk_rqstp->rq_rcv_buf.len >> 2;
@@ -1407,7 +1400,7 @@ call_verify(struct rpc_task *task)
task->tk_action = call_bind;
goto out_retry;
case RPC_AUTH_TOOWEAK:
- printk(KERN_NOTICE "call_verify: server %s requires stronger "
+ printk(KERN_NOTICE "RPC: server %s requires stronger "
"authentication.\n", task->tk_client->cl_server);
break;
default:
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/6] SUNRPC: Don't display the rpc_show_tasks header if there are no tasks
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
` (2 preceding siblings ...)
2008-05-21 18:15 ` [PATCH 3/6] SUNRPC: Rename "call_" functions that are no longer FSM states Chuck Lever
@ 2008-05-21 18:16 ` Chuck Lever
2008-05-21 18:16 ` [PATCH 5/6] SUNRPC: Refactor rpc_show_tasks Chuck Lever
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:16 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
Clean up: don't display the rpc_show_tasks column header unless there is at
least one task to display. As far as I can tell, it is safe to let the
list_for_each_entry macro decide that each list is empty.
scripts/checkpatch.pl also wants a KERN_FOO at the start of any newly added
printk() calls, so this and subsequent patches will also add KERN_INFO.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 19 ++++++++++++-------
1 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 619e4ea..e763725 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1525,24 +1525,30 @@ struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred, int
EXPORT_SYMBOL_GPL(rpc_call_null);
#ifdef RPC_DEBUG
+static void rpc_show_header(void)
+{
+ printk(KERN_INFO "-pid- proc flgs status -client- -prog- --rqstp- "
+ "-timeout -rpcwait -action- ---ops--\n");
+}
+
void rpc_show_tasks(void)
{
struct rpc_clnt *clnt;
struct rpc_task *t;
+ int header = 0;
spin_lock(&rpc_client_lock);
- if (list_empty(&all_clients))
- goto out;
- printk("-pid- proc flgs status -client- -prog- --rqstp- -timeout "
- "-rpcwait -action- ---ops--\n");
list_for_each_entry(clnt, &all_clients, cl_clients) {
- if (list_empty(&clnt->cl_tasks))
- continue;
spin_lock(&clnt->cl_lock);
list_for_each_entry(t, &clnt->cl_tasks, tk_task) {
const char *rpc_waitq = "none";
int proc;
+ if (!header) {
+ rpc_show_header();
+ header++;
+ }
+
if (t->tk_msg.rpc_proc)
proc = t->tk_msg.rpc_proc->p_proc;
else
@@ -1562,7 +1568,6 @@ void rpc_show_tasks(void)
}
spin_unlock(&clnt->cl_lock);
}
-out:
spin_unlock(&rpc_client_lock);
}
#endif
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/6] SUNRPC: Refactor rpc_show_tasks
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
` (3 preceding siblings ...)
2008-05-21 18:16 ` [PATCH 4/6] SUNRPC: Don't display the rpc_show_tasks header if there are no tasks Chuck Lever
@ 2008-05-21 18:16 ` Chuck Lever
2008-05-21 18:16 ` [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers Chuck Lever
2008-05-21 19:15 ` [PATCH 0/6] Initial set of 2.6.27 patches, take 3 J. Bruce Fields
6 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:16 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
Clean up: move the logic that displays each task to its own function.
This removes indentation and makes future changes easier.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 46 ++++++++++++++++++++++++----------------------
1 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index e763725..68b08d4 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1531,40 +1531,42 @@ static void rpc_show_header(void)
"-timeout -rpcwait -action- ---ops--\n");
}
+static void rpc_show_task(const struct rpc_clnt *clnt,
+ const struct rpc_task *task)
+{
+ const char *rpc_waitq = "none";
+ int proc = -1;
+
+ if (task->tk_msg.rpc_proc)
+ proc = task->tk_msg.rpc_proc->p_proc;
+
+ if (RPC_IS_QUEUED(task))
+ rpc_waitq = rpc_qname(task->tk_waitqueue);
+
+ printk(KERN_INFO "%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p\n",
+ task->tk_pid, proc,
+ task->tk_flags, task->tk_status,
+ clnt, clnt->cl_prog,
+ task->tk_rqstp, task->tk_timeout,
+ rpc_waitq,
+ task->tk_action, task->tk_ops);
+}
+
void rpc_show_tasks(void)
{
struct rpc_clnt *clnt;
- struct rpc_task *t;
+ struct rpc_task *task;
int header = 0;
spin_lock(&rpc_client_lock);
list_for_each_entry(clnt, &all_clients, cl_clients) {
spin_lock(&clnt->cl_lock);
- list_for_each_entry(t, &clnt->cl_tasks, tk_task) {
- const char *rpc_waitq = "none";
- int proc;
-
+ list_for_each_entry(task, &clnt->cl_tasks, tk_task) {
if (!header) {
rpc_show_header();
header++;
}
-
- if (t->tk_msg.rpc_proc)
- proc = t->tk_msg.rpc_proc->p_proc;
- else
- proc = -1;
-
- if (RPC_IS_QUEUED(t))
- rpc_waitq = rpc_qname(t->tk_waitqueue);
-
- printk("%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p\n",
- t->tk_pid, proc,
- t->tk_flags, t->tk_status,
- t->tk_client,
- (t->tk_client ? t->tk_client->cl_prog : 0),
- t->tk_rqstp, t->tk_timeout,
- rpc_waitq,
- t->tk_action, t->tk_ops);
+ rpc_show_task(clnt, task);
}
spin_unlock(&clnt->cl_lock);
}
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
` (4 preceding siblings ...)
2008-05-21 18:16 ` [PATCH 5/6] SUNRPC: Refactor rpc_show_tasks Chuck Lever
@ 2008-05-21 18:16 ` Chuck Lever
2008-05-21 19:50 ` J. Bruce Fields
2008-05-21 19:15 ` [PATCH 0/6] Initial set of 2.6.27 patches, take 3 J. Bruce Fields
6 siblings, 1 reply; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 18:16 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
In rpc_show_tasks(), display the program name, version number, procedure
name and tk_action as human-readable variable-length text fields rather
than columnar numbers.
Doing the symbol lookup here helps in cases where we have actual
debugging output from a kernel log, but don't have access to the kernel
image or RPC module that generated the output.
Sample output:
-pid- flgs status -client- --rqstp- -timeout ---ops--
5608 0001 -11 eeb42690 f6d93710 0 f8fa1764 nfsv3 WRITE a:call_transmit_status q:none
5609 0001 -11 eeb42690 f6d937e0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5610 0001 -11 eeb42690 f6d93230 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5611 0001 -11 eeb42690 f6d93300 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5612 0001 -11 eeb42690 f6d93090 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5613 0001 -11 eeb42690 f6d933d0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5614 0001 -11 eeb42690 f6d93cc0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5615 0001 -11 eeb42690 f6d93a50 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5616 0001 -11 eeb42690 f6d93640 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5617 0001 -11 eeb42690 f6d93b20 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5618 0001 -11 eeb42690 f6d93160 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 68b08d4..878752c 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -25,6 +25,7 @@
#include <linux/module.h>
#include <linux/types.h>
+#include <linux/kallsyms.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
@@ -1527,29 +1528,31 @@ EXPORT_SYMBOL_GPL(rpc_call_null);
#ifdef RPC_DEBUG
static void rpc_show_header(void)
{
- printk(KERN_INFO "-pid- proc flgs status -client- -prog- --rqstp- "
- "-timeout -rpcwait -action- ---ops--\n");
+ printk(KERN_INFO "-pid- flgs status -client- --rqstp- "
+ "-timeout ---ops--\n");
}
static void rpc_show_task(const struct rpc_clnt *clnt,
const struct rpc_task *task)
{
const char *rpc_waitq = "none";
- int proc = -1;
-
- if (task->tk_msg.rpc_proc)
- proc = task->tk_msg.rpc_proc->p_proc;
+ char *p, action[KSYM_SYMBOL_LEN];
if (RPC_IS_QUEUED(task))
rpc_waitq = rpc_qname(task->tk_waitqueue);
- printk(KERN_INFO "%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p\n",
- task->tk_pid, proc,
- task->tk_flags, task->tk_status,
- clnt, clnt->cl_prog,
- task->tk_rqstp, task->tk_timeout,
- rpc_waitq,
- task->tk_action, task->tk_ops);
+ /* map tk_action pointer to a function name; then trim off
+ * the "+0x0 [sunrpc]" */
+ sprint_symbol(action, (unsigned long)task->tk_action);
+ p = strchr(action, '+');
+ if (p)
+ *p = '\0';
+
+ printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s\n",
+ task->tk_pid, task->tk_flags, task->tk_status,
+ clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
+ clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
+ action, queue);
}
void rpc_show_tasks(void)
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 0/6] Initial set of 2.6.27 patches, take 3
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
` (5 preceding siblings ...)
2008-05-21 18:16 ` [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers Chuck Lever
@ 2008-05-21 19:15 ` J. Bruce Fields
6 siblings, 0 replies; 14+ messages in thread
From: J. Bruce Fields @ 2008-05-21 19:15 UTC (permalink / raw)
To: Chuck Lever; +Cc: trond.myklebust, linux-nfs
On Wed, May 21, 2008 at 02:15:33PM -0400, Chuck Lever wrote:
> Hi Trond-
>
> Resending the first batch of 2.6.27 patches, with additional fixes.
>
> Using the RPC procedure name in debugging messages should no longer add a
> risk of a segmentation fault.
>
> I've also done a third re-implementation of the tk_action function name
> patch. I finally managed to find an interface that will perform the symbol
> table lookup, and can be called from a module or from built-in code.
>
> Oddly this API has been around for a while; I'm not sure how I missed it
> originally. But it should implement the nice function-name-rather-than-
> memory-address feature without a wonky table, and without requiring any
> additional changes when adding a new FSM state function. It will display
> the function name if the lookup succeeds; otherwise it will display a hex
> memory address. It works for any arbitrary pointer stored in the
> tk_action field.
Neat-o.--b.
>
> I've thought of a couple of other ways rpc_show_tasks() could be improved.
> First, it could display the IP address of the server handling each request;
> and it should have a different column layout for systems with 64-bit
> addresses. All for another day, I suppose.
>
> ---
>
> Chuck Lever (6):
> SUNRPC: Display some debugging information as text rather than numbers
> SUNRPC: Refactor rpc_show_tasks
> SUNRPC: Don't display the rpc_show_tasks header if there are no tasks
> SUNRPC: Rename "call_" functions that are no longer FSM states
> SUNRPC: Add a function to display the name of an RPC procedure
> NFS: Update help text for CONFIG_NFS_FS
>
>
> fs/Kconfig | 115 ++++++++++++++++++++++++-------------------------
> net/sunrpc/clnt.c | 124 ++++++++++++++++++++++++++++++-----------------------
> 2 files changed, 128 insertions(+), 111 deletions(-)
>
> --
> Signature
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 18:16 ` [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers Chuck Lever
@ 2008-05-21 19:50 ` J. Bruce Fields
2008-05-21 20:37 ` Chuck Lever
0 siblings, 1 reply; 14+ messages in thread
From: J. Bruce Fields @ 2008-05-21 19:50 UTC (permalink / raw)
To: Chuck Lever; +Cc: trond.myklebust, linux-nfs
On Wed, May 21, 2008 at 02:16:20PM -0400, Chuck Lever wrote:
> In rpc_show_tasks(), display the program name, version number, proced=
ure
> name and tk_action as human-readable variable-length text fields rath=
er
> than columnar numbers.
>=20
> Doing the symbol lookup here helps in cases where we have actual
> debugging output from a kernel log, but don't have access to the kern=
el
> image or RPC module that generated the output.
>=20
> Sample output:
>=20
> -pid- flgs status -client- --rqstp- -timeout ---ops--
> 5608 0001 -11 eeb42690 f6d93710 0 f8fa1764 nfsv3 WRITE a:=
call_transmit_status q:none
> 5609 0001 -11 eeb42690 f6d937e0 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5610 0001 -11 eeb42690 f6d93230 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5611 0001 -11 eeb42690 f6d93300 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5612 0001 -11 eeb42690 f6d93090 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5613 0001 -11 eeb42690 f6d933d0 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5614 0001 -11 eeb42690 f6d93cc0 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5615 0001 -11 eeb42690 f6d93a50 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5616 0001 -11 eeb42690 f6d93640 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5617 0001 -11 eeb42690 f6d93b20 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
> 5618 0001 -11 eeb42690 f6d93160 0 f8fa1764 nfsv3 WRITE a:=
call_status q:xprt_sending
>=20
> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> ---
>=20
> net/sunrpc/clnt.c | 29 ++++++++++++++++-------------
> 1 files changed, 16 insertions(+), 13 deletions(-)
>=20
>=20
> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
> index 68b08d4..878752c 100644
> --- a/net/sunrpc/clnt.c
> +++ b/net/sunrpc/clnt.c
> @@ -25,6 +25,7 @@
> =20
> #include <linux/module.h>
> #include <linux/types.h>
> +#include <linux/kallsyms.h>
> #include <linux/mm.h>
> #include <linux/slab.h>
> #include <linux/smp_lock.h>
> @@ -1527,29 +1528,31 @@ EXPORT_SYMBOL_GPL(rpc_call_null);
> #ifdef RPC_DEBUG
> static void rpc_show_header(void)
> {
> - printk(KERN_INFO "-pid- proc flgs status -client- -prog- --rqstp- "
> - "-timeout -rpcwait -action- ---ops--\n");
> + printk(KERN_INFO "-pid- flgs status -client- --rqstp- "
> + "-timeout ---ops--\n");
> }
> =20
> static void rpc_show_task(const struct rpc_clnt *clnt,
> const struct rpc_task *task)
> {
> const char *rpc_waitq =3D "none";
> - int proc =3D -1;
> -
> - if (task->tk_msg.rpc_proc)
> - proc =3D task->tk_msg.rpc_proc->p_proc;
> + char *p, action[KSYM_SYMBOL_LEN];
> =20
> if (RPC_IS_QUEUED(task))
> rpc_waitq =3D rpc_qname(task->tk_waitqueue);
> =20
> - printk(KERN_INFO "%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p\n"=
,
> - task->tk_pid, proc,
> - task->tk_flags, task->tk_status,
> - clnt, clnt->cl_prog,
> - task->tk_rqstp, task->tk_timeout,
> - rpc_waitq,
> - task->tk_action, task->tk_ops);
> + /* map tk_action pointer to a function name; then trim off
> + * the "+0x0 [sunrpc]" */
> + sprint_symbol(action, (unsigned long)task->tk_action);
> + p =3D strchr(action, '+');
> + if (p)
> + *p =3D '\0';
> +
> + printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s\=
n",
> + task->tk_pid, task->tk_flags, task->tk_status,
> + clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
> + clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
> + action, queue);
"net/sunrpc/clnt.c: In function =E2=80=98rpc_show_task=E2=80=99:
net/sunrpc/clnt.c:1555: error: =E2=80=98queue=E2=80=99 undeclared (fir=
st use in this function)
net/sunrpc/clnt.c:1555: error: (Each undeclared identifier is reported=
only once
net/sunrpc/clnt.c:1555: error: for each function it appears in.)"
Is that last "queue" supposed to be "rpc_waitq"???
--b.
> }
> =20
> void rpc_show_tasks(void)
>=20
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" =
in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 19:50 ` J. Bruce Fields
@ 2008-05-21 20:37 ` Chuck Lever
2008-05-21 20:40 ` Trond Myklebust
2008-05-21 20:42 ` J. Bruce Fields
0 siblings, 2 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 20:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: trond.myklebust, linux-nfs
On May 21, 2008, at 3:50 PM, J. Bruce Fields wrote:
> On Wed, May 21, 2008 at 02:16:20PM -0400, Chuck Lever wrote:
>> In rpc_show_tasks(), display the program name, version number, =20
>> procedure
>> name and tk_action as human-readable variable-length text fields =20
>> rather
>> than columnar numbers.
>>
>> Doing the symbol lookup here helps in cases where we have actual
>> debugging output from a kernel log, but don't have access to the =20
>> kernel
>> image or RPC module that generated the output.
>>
>> Sample output:
>>
>> -pid- flgs status -client- --rqstp- -timeout ---ops--
>> 5608 0001 -11 eeb42690 f6d93710 0 f8fa1764 nfsv3 WRITE =20
>> a:call_transmit_status q:none
>> 5609 0001 -11 eeb42690 f6d937e0 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5610 0001 -11 eeb42690 f6d93230 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5611 0001 -11 eeb42690 f6d93300 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5612 0001 -11 eeb42690 f6d93090 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5613 0001 -11 eeb42690 f6d933d0 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5614 0001 -11 eeb42690 f6d93cc0 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5615 0001 -11 eeb42690 f6d93a50 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5616 0001 -11 eeb42690 f6d93640 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5617 0001 -11 eeb42690 f6d93b20 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>> 5618 0001 -11 eeb42690 f6d93160 0 f8fa1764 nfsv3 WRITE =20
>> a:call_status q:xprt_sending
>>
>> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
>> ---
>>
>> net/sunrpc/clnt.c | 29 ++++++++++++++++-------------
>> 1 files changed, 16 insertions(+), 13 deletions(-)
>>
>>
>> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
>> index 68b08d4..878752c 100644
>> --- a/net/sunrpc/clnt.c
>> +++ b/net/sunrpc/clnt.c
>> @@ -25,6 +25,7 @@
>>
>> #include <linux/module.h>
>> #include <linux/types.h>
>> +#include <linux/kallsyms.h>
>> #include <linux/mm.h>
>> #include <linux/slab.h>
>> #include <linux/smp_lock.h>
>> @@ -1527,29 +1528,31 @@ EXPORT_SYMBOL_GPL(rpc_call_null);
>> #ifdef RPC_DEBUG
>> static void rpc_show_header(void)
>> {
>> - printk(KERN_INFO "-pid- proc flgs status -client- -prog- --rqstp- =
"
>> - "-timeout -rpcwait -action- ---ops--\n");
>> + printk(KERN_INFO "-pid- flgs status -client- --rqstp- "
>> + "-timeout ---ops--\n");
>> }
>>
>> static void rpc_show_task(const struct rpc_clnt *clnt,
>> const struct rpc_task *task)
>> {
>> const char *rpc_waitq =3D "none";
>> - int proc =3D -1;
>> -
>> - if (task->tk_msg.rpc_proc)
>> - proc =3D task->tk_msg.rpc_proc->p_proc;
>> + char *p, action[KSYM_SYMBOL_LEN];
>>
>> if (RPC_IS_QUEUED(task))
>> rpc_waitq =3D rpc_qname(task->tk_waitqueue);
>>
>> - printk(KERN_INFO "%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p=20
>> \n",
>> - task->tk_pid, proc,
>> - task->tk_flags, task->tk_status,
>> - clnt, clnt->cl_prog,
>> - task->tk_rqstp, task->tk_timeout,
>> - rpc_waitq,
>> - task->tk_action, task->tk_ops);
>> + /* map tk_action pointer to a function name; then trim off
>> + * the "+0x0 [sunrpc]" */
>> + sprint_symbol(action, (unsigned long)task->tk_action);
>> + p =3D strchr(action, '+');
>> + if (p)
>> + *p =3D '\0';
>> +
>> + printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s=
=20
>> \n",
>> + task->tk_pid, task->tk_flags, task->tk_status,
>> + clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
>> + clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
>> + action, queue);
>
> "net/sunrpc/clnt.c: In function =91rpc_show_task=92:
> net/sunrpc/clnt.c:1555: error: =91queue=92 undeclared (first use in t=
his =20
> function)
> net/sunrpc/clnt.c:1555: error: (Each undeclared identifier is =20
> reported only once
> net/sunrpc/clnt.c:1555: error: for each function it appears in.)"
>
> Is that last "queue" supposed to be "rpc_waitq"???
Yes... I fixed that already... was that in the version I sent out this =
=20
afternoon?
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 20:37 ` Chuck Lever
@ 2008-05-21 20:40 ` Trond Myklebust
2008-05-21 20:42 ` J. Bruce Fields
1 sibling, 0 replies; 14+ messages in thread
From: Trond Myklebust @ 2008-05-21 20:40 UTC (permalink / raw)
To: Chuck Lever; +Cc: J. Bruce Fields, linux-nfs
On Wed, 2008-05-21 at 16:37 -0400, Chuck Lever wrote:
> >> + task->tk_pid, task->tk_flags, task->tk_status,
> >> + clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
> >> + clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
> >> + action, queue);
> >
> > "net/sunrpc/clnt.c: In function =E2=80=98rpc_show_task=E2=80=99:
> > net/sunrpc/clnt.c:1555: error: =E2=80=98queue=E2=80=99 undeclared (=
first use in this =20
> > function)
> > net/sunrpc/clnt.c:1555: error: (Each undeclared identifier is =20
> > reported only once
> > net/sunrpc/clnt.c:1555: error: for each function it appears in.)"
> >
> > Is that last "queue" supposed to be "rpc_waitq"???
>=20
> Yes... I fixed that already... was that in the version I sent out thi=
s =20
> afternoon?
Yep. Shall I fix it up, or do you want to resend?
--=20
Trond Myklebust
Linux NFS client maintainer
NetApp
Trond.Myklebust@netapp.com
www.netapp.com
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 20:37 ` Chuck Lever
2008-05-21 20:40 ` Trond Myklebust
@ 2008-05-21 20:42 ` J. Bruce Fields
2008-05-21 20:57 ` Chuck Lever
1 sibling, 1 reply; 14+ messages in thread
From: J. Bruce Fields @ 2008-05-21 20:42 UTC (permalink / raw)
To: Chuck Lever; +Cc: trond.myklebust, linux-nfs
On Wed, May 21, 2008 at 04:37:23PM -0400, Chuck Lever wrote:
>
> On May 21, 2008, at 3:50 PM, J. Bruce Fields wrote:
>
>> On Wed, May 21, 2008 at 02:16:20PM -0400, Chuck Lever wrote:
=2E..
>>> + printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%=
s=20
>>> \n",
>>> + task->tk_pid, task->tk_flags, task->tk_status,
>>> + clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
>>> + clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
>>> + action, queue);
>>
>> "net/sunrpc/clnt.c: In function =E2=80=98rpc_show_task=E2=80=99:
>> net/sunrpc/clnt.c:1555: error: =E2=80=98queue=E2=80=99 undeclared (f=
irst use in this =20
>> function)
>> net/sunrpc/clnt.c:1555: error: (Each undeclared identifier is report=
ed=20
>> only once
>> net/sunrpc/clnt.c:1555: error: for each function it appears in.)"
>>
>> Is that last "queue" supposed to be "rpc_waitq"???
>
> Yes... I fixed that already... was that in the version I sent out thi=
s =20
> afternoon?
Yup. See the attribution above, or the "In-Reply-To" header, or
http://marc.info/?l=3Dlinux-nfs&m=3D121139389532042&w=3D2.
--b.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
2008-05-21 20:42 ` J. Bruce Fields
@ 2008-05-21 20:57 ` Chuck Lever
0 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 20:57 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: trond.myklebust, linux-nfs
On May 21, 2008, at 4:42 PM, J. Bruce Fields wrote:
> On Wed, May 21, 2008 at 04:37:23PM -0400, Chuck Lever wrote:
>>
>> On May 21, 2008, at 3:50 PM, J. Bruce Fields wrote:
>>
>>> On Wed, May 21, 2008 at 02:16:20PM -0400, Chuck Lever wrote:
> ...
>>>> + printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:=
=20
>>>> %s
>>>> \n",
>>>> + task->tk_pid, task->tk_flags, task->tk_status,
>>>> + clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
>>>> + clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
>>>> + action, queue);
>>>
>>> "net/sunrpc/clnt.c: In function =91rpc_show_task=92:
>>> net/sunrpc/clnt.c:1555: error: =91queue=92 undeclared (first use in=
this
>>> function)
>>> net/sunrpc/clnt.c:1555: error: (Each undeclared identifier is =20
>>> reported
>>> only once
>>> net/sunrpc/clnt.c:1555: error: for each function it appears in.)"
>>>
>>> Is that last "queue" supposed to be "rpc_waitq"???
>>
>> Yes... I fixed that already... was that in the version I sent out =20
>> this
>> afternoon?
>
> Yup. See the attribution above, or the "In-Reply-To" header, or
> http://marc.info/?l=3Dlinux-nfs&m=3D121139389532042&w=3D2.
That's exceedingly odd. I mailed these out *after* I had build-tested =
=20
and run against ying2 this afternoon.
I will send another set.
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers
[not found] ` <20080521210411.6468.68771.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
@ 2008-05-21 21:09 ` Chuck Lever
0 siblings, 0 replies; 14+ messages in thread
From: Chuck Lever @ 2008-05-21 21:09 UTC (permalink / raw)
To: trond.myklebust; +Cc: linux-nfs
In rpc_show_tasks(), display the program name, version number, procedure
name and tk_action as human-readable variable-length text fields rather
than columnar numbers.
Doing the symbol lookup here helps in cases where we have actual
debugging output from a kernel log, but don't have access to the kernel
image or RPC module that generated the output.
Sample output:
-pid- flgs status -client- --rqstp- -timeout ---ops--
5608 0001 -11 eeb42690 f6d93710 0 f8fa1764 nfsv3 WRITE a:call_transmit_status q:none
5609 0001 -11 eeb42690 f6d937e0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5610 0001 -11 eeb42690 f6d93230 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5611 0001 -11 eeb42690 f6d93300 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5612 0001 -11 eeb42690 f6d93090 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5613 0001 -11 eeb42690 f6d933d0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5614 0001 -11 eeb42690 f6d93cc0 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5615 0001 -11 eeb42690 f6d93a50 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5616 0001 -11 eeb42690 f6d93640 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5617 0001 -11 eeb42690 f6d93b20 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
5618 0001 -11 eeb42690 f6d93160 0 f8fa1764 nfsv3 WRITE a:call_status q:xprt_sending
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
net/sunrpc/clnt.c | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 68b08d4..77b56f1 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -25,6 +25,7 @@
#include <linux/module.h>
#include <linux/types.h>
+#include <linux/kallsyms.h>
#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
@@ -1527,29 +1528,31 @@ EXPORT_SYMBOL_GPL(rpc_call_null);
#ifdef RPC_DEBUG
static void rpc_show_header(void)
{
- printk(KERN_INFO "-pid- proc flgs status -client- -prog- --rqstp- "
- "-timeout -rpcwait -action- ---ops--\n");
+ printk(KERN_INFO "-pid- flgs status -client- --rqstp- "
+ "-timeout ---ops--\n");
}
static void rpc_show_task(const struct rpc_clnt *clnt,
const struct rpc_task *task)
{
const char *rpc_waitq = "none";
- int proc = -1;
-
- if (task->tk_msg.rpc_proc)
- proc = task->tk_msg.rpc_proc->p_proc;
+ char *p, action[KSYM_SYMBOL_LEN];
if (RPC_IS_QUEUED(task))
rpc_waitq = rpc_qname(task->tk_waitqueue);
- printk(KERN_INFO "%5u %04d %04x %6d %8p %6d %8p %8ld %8s %8p %8p\n",
- task->tk_pid, proc,
- task->tk_flags, task->tk_status,
- clnt, clnt->cl_prog,
- task->tk_rqstp, task->tk_timeout,
- rpc_waitq,
- task->tk_action, task->tk_ops);
+ /* map tk_action pointer to a function name; then trim off
+ * the "+0x0 [sunrpc]" */
+ sprint_symbol(action, (unsigned long)task->tk_action);
+ p = strchr(action, '+');
+ if (p)
+ *p = '\0';
+
+ printk(KERN_INFO "%5u %04x %6d %8p %8p %8ld %8p %sv%u %s a:%s q:%s\n",
+ task->tk_pid, task->tk_flags, task->tk_status,
+ clnt, task->tk_rqstp, task->tk_timeout, task->tk_ops,
+ clnt->cl_protname, clnt->cl_vers, rpc_proc_name(task),
+ action, rpc_waitq);
}
void rpc_show_tasks(void)
^ permalink raw reply related [flat|nested] 14+ messages in thread
end of thread, other threads:[~2008-05-21 21:10 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-21 18:15 [PATCH 0/6] Initial set of 2.6.27 patches, take 3 Chuck Lever
2008-05-21 18:15 ` [PATCH 1/6] NFS: Update help text for CONFIG_NFS_FS Chuck Lever
2008-05-21 18:15 ` [PATCH 2/6] SUNRPC: Add a function to display the name of an RPC procedure Chuck Lever
2008-05-21 18:15 ` [PATCH 3/6] SUNRPC: Rename "call_" functions that are no longer FSM states Chuck Lever
2008-05-21 18:16 ` [PATCH 4/6] SUNRPC: Don't display the rpc_show_tasks header if there are no tasks Chuck Lever
2008-05-21 18:16 ` [PATCH 5/6] SUNRPC: Refactor rpc_show_tasks Chuck Lever
2008-05-21 18:16 ` [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers Chuck Lever
2008-05-21 19:50 ` J. Bruce Fields
2008-05-21 20:37 ` Chuck Lever
2008-05-21 20:40 ` Trond Myklebust
2008-05-21 20:42 ` J. Bruce Fields
2008-05-21 20:57 ` Chuck Lever
2008-05-21 19:15 ` [PATCH 0/6] Initial set of 2.6.27 patches, take 3 J. Bruce Fields
-- strict thread matches above, loose matches on Subject: below --
2008-05-21 21:08 [PATCH 0/6] Initial set of 2.6.27 patches, take 4 Chuck Lever
[not found] ` <20080521210411.6468.68771.stgit-ewv44WTpT0t9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2008-05-21 21:09 ` [PATCH 6/6] SUNRPC: Display some debugging information as text rather than numbers Chuck Lever
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.