Commit d4957f01 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

xprtrdma: Refine trace_xprtrdma_fixup



Slightly reduce overhead and display more useful information.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 7b020f17
Loading
Loading
Loading
Loading
+13 −47
Original line number Original line Diff line number Diff line
@@ -1084,66 +1084,32 @@ DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
TRACE_EVENT(xprtrdma_fixup,
TRACE_EVENT(xprtrdma_fixup,
	TP_PROTO(
	TP_PROTO(
		const struct rpc_rqst *rqst,
		const struct rpc_rqst *rqst,
		int len,
		unsigned long fixup
		int hdrlen
	),
	),


	TP_ARGS(rqst, len, hdrlen),
	TP_ARGS(rqst, fixup),


	TP_STRUCT__entry(
	TP_STRUCT__entry(
		__field(unsigned int, task_id)
		__field(unsigned int, task_id)
		__field(unsigned int, client_id)
		__field(unsigned int, client_id)
		__field(const void *, base)
		__field(unsigned long, fixup)
		__field(int, len)
		__field(size_t, headlen)
		__field(int, hdrlen)
		__field(unsigned int, pagelen)
	),
		__field(size_t, taillen)

	TP_fast_assign(
		__entry->task_id = rqst->rq_task->tk_pid;
		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
		__entry->base = rqst->rq_rcv_buf.head[0].iov_base;
		__entry->len = len;
		__entry->hdrlen = hdrlen;
	),

	TP_printk("task:%u@%u base=%p len=%d hdrlen=%d",
		__entry->task_id, __entry->client_id,
		__entry->base, __entry->len, __entry->hdrlen
	)
);

TRACE_EVENT(xprtrdma_fixup_pg,
	TP_PROTO(
		const struct rpc_rqst *rqst,
		int pageno,
		const void *pos,
		int len,
		int curlen
	),

	TP_ARGS(rqst, pageno, pos, len, curlen),

	TP_STRUCT__entry(
		__field(unsigned int, task_id)
		__field(unsigned int, client_id)
		__field(const void *, pos)
		__field(int, pageno)
		__field(int, len)
		__field(int, curlen)
	),
	),


	TP_fast_assign(
	TP_fast_assign(
		__entry->task_id = rqst->rq_task->tk_pid;
		__entry->task_id = rqst->rq_task->tk_pid;
		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
		__entry->pos = pos;
		__entry->fixup = fixup;
		__entry->pageno = pageno;
		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
		__entry->len = len;
		__entry->pagelen = rqst->rq_rcv_buf.page_len;
		__entry->curlen = curlen;
		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
	),
	),


	TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d",
	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
		__entry->task_id, __entry->client_id,
		__entry->task_id, __entry->client_id, __entry->fixup,
		__entry->pageno, __entry->pos, __entry->len, __entry->curlen
		__entry->headlen, __entry->pagelen, __entry->taillen
	)
	)
);
);


+2 −3
Original line number Original line Diff line number Diff line
@@ -1086,7 +1086,6 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
	curlen = rqst->rq_rcv_buf.head[0].iov_len;
	curlen = rqst->rq_rcv_buf.head[0].iov_len;
	if (curlen > copy_len)
	if (curlen > copy_len)
		curlen = copy_len;
		curlen = copy_len;
	trace_xprtrdma_fixup(rqst, copy_len, curlen);
	srcp += curlen;
	srcp += curlen;
	copy_len -= curlen;
	copy_len -= curlen;


@@ -1106,8 +1105,6 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
			if (curlen > pagelist_len)
			if (curlen > pagelist_len)
				curlen = pagelist_len;
				curlen = pagelist_len;


			trace_xprtrdma_fixup_pg(rqst, i, srcp,
						copy_len, curlen);
			destp = kmap_atomic(ppages[i]);
			destp = kmap_atomic(ppages[i]);
			memcpy(destp + page_base, srcp, curlen);
			memcpy(destp + page_base, srcp, curlen);
			flush_dcache_page(ppages[i]);
			flush_dcache_page(ppages[i]);
@@ -1139,6 +1136,8 @@ rpcrdma_inline_fixup(struct rpc_rqst *rqst, char *srcp, int copy_len, int pad)
		rqst->rq_private_buf.tail[0].iov_base = srcp;
		rqst->rq_private_buf.tail[0].iov_base = srcp;
	}
	}


	if (fixup_copy_count)
		trace_xprtrdma_fixup(rqst, fixup_copy_count);
	return fixup_copy_count;
	return fixup_copy_count;
}
}