Commit 8626664c authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Replace dprintks in nfsd4_cb_sequence_done()



Improve observability of backchannel session operation.

Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Reviewed-by: default avatarBenjamin Coddington <bcodding@redhat.com>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent f52f1975
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -1165,6 +1165,8 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback
	if (!cb->cb_holds_slot)
		goto need_restart;

	/* This is the operation status code for CB_SEQUENCE */
	trace_nfsd_cb_seq_status(task, cb);
	switch (cb->cb_seq_status) {
	case 0:
		/*
@@ -1210,13 +1212,10 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback
		break;
	default:
		nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status);
		dprintk("%s: unprocessed error %d\n", __func__,
			cb->cb_seq_status);
	}

	nfsd41_cb_release_slot(cb);
	dprintk("%s: freed slot, new seqid=%d\n", __func__,
		clp->cl_cb_session->se_cb_seq_nr);

	trace_nfsd_cb_free_slot(task, cb);

	if (RPC_SIGNALLED(task))
		goto need_restart;
+82 −0
Original line number Diff line number Diff line
@@ -9,8 +9,10 @@
#define _NFSD_TRACE_H

#include <linux/tracepoint.h>
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/xprt.h>
#include <trace/misc/nfs.h>
#include <trace/misc/sunrpc.h>

#include "export.h"
#include "nfsfh.h"
@@ -1440,6 +1442,86 @@ TRACE_EVENT(nfsd_cb_setup_err,
		__entry->error)
);

TRACE_EVENT(nfsd_cb_seq_status,
	TP_PROTO(
		const struct rpc_task *task,
		const struct nfsd4_callback *cb
	),
	TP_ARGS(task, cb),
	TP_STRUCT__entry(
		__field(unsigned int, task_id)
		__field(unsigned int, client_id)
		__field(u32, cl_boot)
		__field(u32, cl_id)
		__field(u32, seqno)
		__field(u32, reserved)
		__field(int, tk_status)
		__field(int, seq_status)
	),
	TP_fast_assign(
		const struct nfs4_client *clp = cb->cb_clp;
		const struct nfsd4_session *session = clp->cl_cb_session;
		const struct nfsd4_sessionid *sid =
			(struct nfsd4_sessionid *)&session->se_sessionid;

		__entry->task_id = task->tk_pid;
		__entry->client_id = task->tk_client ?
				     task->tk_client->cl_clid : -1;
		__entry->cl_boot = sid->clientid.cl_boot;
		__entry->cl_id = sid->clientid.cl_id;
		__entry->seqno = sid->sequence;
		__entry->reserved = sid->reserved;
		__entry->tk_status = task->tk_status;
		__entry->seq_status = cb->cb_seq_status;
	),
	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
		" sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d\n",
		__entry->task_id, __entry->client_id,
		__entry->cl_boot, __entry->cl_id,
		__entry->seqno, __entry->reserved,
		__entry->tk_status, __entry->seq_status
	)
);

TRACE_EVENT(nfsd_cb_free_slot,
	TP_PROTO(
		const struct rpc_task *task,
		const struct nfsd4_callback *cb
	),
	TP_ARGS(task, cb),
	TP_STRUCT__entry(
		__field(unsigned int, task_id)
		__field(unsigned int, client_id)
		__field(u32, cl_boot)
		__field(u32, cl_id)
		__field(u32, seqno)
		__field(u32, reserved)
		__field(u32, slot_seqno)
	),
	TP_fast_assign(
		const struct nfs4_client *clp = cb->cb_clp;
		const struct nfsd4_session *session = clp->cl_cb_session;
		const struct nfsd4_sessionid *sid =
			(struct nfsd4_sessionid *)&session->se_sessionid;

		__entry->task_id = task->tk_pid;
		__entry->client_id = task->tk_client ?
				     task->tk_client->cl_clid : -1;
		__entry->cl_boot = sid->clientid.cl_boot;
		__entry->cl_id = sid->clientid.cl_id;
		__entry->seqno = sid->sequence;
		__entry->reserved = sid->reserved;
		__entry->slot_seqno = session->se_cb_seq_nr;
	),
	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
		" sessionid=%08x:%08x:%08x:%08x new slot seqno=%u\n",
		__entry->task_id, __entry->client_id,
		__entry->cl_boot, __entry->cl_id,
		__entry->seqno, __entry->reserved,
		__entry->slot_seqno
	)
);

TRACE_EVENT_CONDITION(nfsd_cb_recall,
	TP_PROTO(
		const struct nfs4_stid *stid