forked from luck/tmp_suning_uos_patched
SUNRPC: Capture completion of all RPC tasks
RPC tasks on the backchannel never invoke xprt_complete_rqst(), so there is no way to report their tk_status at completion. Also, any RPC task that exits via rpc_exit_task() before it is replied to will also disappear without a trace. Introduce a trace point that is symmetrical with rpc_task_begin that captures the termination status of each RPC task. Sample trace output for callback requests initiated on the server: kworker/u8:12-448 [003] 127.025240: rpc_task_end: task:50@3 flags=ASYNC|DYNAMIC|SOFT|SOFTCONN|SENT runstate=RUNNING|ACTIVE status=0 action=rpc_exit_task kworker/u8:12-448 [002] 127.567310: rpc_task_end: task:51@3 flags=ASYNC|DYNAMIC|SOFT|SOFTCONN|SENT runstate=RUNNING|ACTIVE status=0 action=rpc_exit_task kworker/u8:12-448 [001] 130.506817: rpc_task_end: task:52@3 flags=ASYNC|DYNAMIC|SOFT|SOFTCONN|SENT runstate=RUNNING|ACTIVE status=0 action=rpc_exit_task Odd, though, that I never see trace_rpc_task_complete, either in the forward or backchannel. Should it be removed? Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
e8d70b321e
commit
a264abad51
|
@ -165,6 +165,7 @@ DECLARE_EVENT_CLASS(rpc_task_running,
|
|||
DEFINE_RPC_RUNNING_EVENT(begin);
|
||||
DEFINE_RPC_RUNNING_EVENT(run_action);
|
||||
DEFINE_RPC_RUNNING_EVENT(complete);
|
||||
DEFINE_RPC_RUNNING_EVENT(end);
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
|
||||
|
|
|
@ -824,6 +824,7 @@ rpc_reset_task_statistics(struct rpc_task *task)
|
|||
*/
|
||||
void rpc_exit_task(struct rpc_task *task)
|
||||
{
|
||||
trace_rpc_task_end(task, task->tk_action);
|
||||
task->tk_action = NULL;
|
||||
if (task->tk_ops->rpc_count_stats)
|
||||
task->tk_ops->rpc_count_stats(task, task->tk_calldata);
|
||||
|
|
Loading…
Reference in New Issue
Block a user