Commit de29cf7e authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Trace NFSv4 COMPOUND tags



The Linux NFSv4 client implementation does not use COMPOUND tags,
but the Solaris and MacOS implementations do, and so does pynfs.
Record these eye-catchers in the server's trace buffer to annotate
client requests while troubleshooting.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
parent 948755ef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2643,7 +2643,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp)

	rqstp->rq_lease_breaker = (void **)&cstate->clp;

	trace_nfsd_compound(rqstp, args->client_opcnt);
	trace_nfsd_compound(rqstp, args->tag, args->taglen, args->client_opcnt);
	while (!status && resp->opcnt < args->opcnt) {
		op = &args->ops[resp->opcnt++];

+14 −7
Original line number Diff line number Diff line
@@ -84,19 +84,26 @@ DEFINE_NFSD_XDR_ERR_EVENT(cant_encode);
		{ NFSD_MAY_64BIT_COOKIE,	"64BIT_COOKIE" })

TRACE_EVENT(nfsd_compound,
	TP_PROTO(const struct svc_rqst *rqst,
		 u32 args_opcnt),
	TP_ARGS(rqst, args_opcnt),
	TP_PROTO(
		const struct svc_rqst *rqst,
		const char *tag,
		u32 taglen,
		u32 opcnt
	),
	TP_ARGS(rqst, tag, taglen, opcnt),
	TP_STRUCT__entry(
		__field(u32, xid)
		__field(u32, args_opcnt)
		__field(u32, opcnt)
		__string_len(tag, tag, taglen)
	),
	TP_fast_assign(
		__entry->xid = be32_to_cpu(rqst->rq_xid);
		__entry->args_opcnt = args_opcnt;
		__entry->opcnt = opcnt;
		__assign_str_len(tag, tag, taglen);
	),
	TP_printk("xid=0x%08x opcnt=%u",
		__entry->xid, __entry->args_opcnt)
	TP_printk("xid=0x%08x opcnt=%u tag=%s",
		__entry->xid, __entry->opcnt, __get_str(tag)
	)
)

TRACE_EVENT(nfsd_compound_status,