Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit caa3e106 authored by Chuck Lever's avatar Chuck Lever Committed by J. Bruce Fields
Browse files

sunrpc: Move trace_svc_xprt_dequeue()



Reduce the amount of noise generated by trace_svc_xprt_dequeue by
moving it to the end of svc_get_next_xprt. This generates exactly
one trace event when a ready xprt is found, rather than spurious
events when there is no work to do. The empty events contain no
information that can't be obtained simply by tracing function calls
to svc_xprt_dequeue.

A small additional benefit is simplification of the svc_xprt_event
trace class, which no longer has to handle the case when the @xprt
parameter is NULL.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 03edb90f
Loading
Loading
Loading
Loading
+5 −11
Original line number Original line Diff line number Diff line
@@ -634,24 +634,18 @@ DECLARE_EVENT_CLASS(svc_xprt_event,
	TP_STRUCT__entry(
	TP_STRUCT__entry(
		__field(struct svc_xprt *, xprt)
		__field(struct svc_xprt *, xprt)
		__field(unsigned long, flags)
		__field(unsigned long, flags)
		__dynamic_array(unsigned char, addr, xprt != NULL ?
		__dynamic_array(unsigned char, addr, xprt->xpt_remotelen)
			xprt->xpt_remotelen : 0)
	),
	),


	TP_fast_assign(
	TP_fast_assign(
		__entry->xprt = xprt;
		__entry->xprt = xprt;
		if (xprt) {
			memcpy(__get_dynamic_array(addr),
					&xprt->xpt_remote,
					xprt->xpt_remotelen);
		__entry->flags = xprt->xpt_flags;
		__entry->flags = xprt->xpt_flags;
		} else
		memcpy(__get_dynamic_array(addr),
			__entry->flags = 0;
		       &xprt->xpt_remote, xprt->xpt_remotelen);
	),
	),


	TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt,
	TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt,
		__get_dynamic_array_len(addr) != 0 ?
		(struct sockaddr *)__get_dynamic_array(addr),
			(struct sockaddr *)__get_dynamic_array(addr) : NULL,
		show_svc_xprt_flags(__entry->flags))
		show_svc_xprt_flags(__entry->flags))
);
);


+1 −4
Original line number Original line Diff line number Diff line
@@ -454,13 +454,9 @@ static struct svc_xprt *svc_xprt_dequeue(struct svc_pool *pool)
					struct svc_xprt, xpt_ready);
					struct svc_xprt, xpt_ready);
		list_del_init(&xprt->xpt_ready);
		list_del_init(&xprt->xpt_ready);
		svc_xprt_get(xprt);
		svc_xprt_get(xprt);

		dprintk("svc: transport %p dequeued, inuse=%d\n",
			xprt, kref_read(&xprt->xpt_ref));
	}
	}
	spin_unlock_bh(&pool->sp_lock);
	spin_unlock_bh(&pool->sp_lock);
out:
out:
	trace_svc_xprt_dequeue(xprt);
	return xprt;
	return xprt;
}
}


@@ -734,6 +730,7 @@ static struct svc_xprt *svc_get_next_xprt(struct svc_rqst *rqstp, long timeout)
		rqstp->rq_chandle.thread_wait = 5*HZ;
		rqstp->rq_chandle.thread_wait = 5*HZ;
	else
	else
		rqstp->rq_chandle.thread_wait = 1*HZ;
		rqstp->rq_chandle.thread_wait = 1*HZ;
	trace_svc_xprt_dequeue(rqstp->rq_xprt);
	return rqstp->rq_xprt;
	return rqstp->rq_xprt;
}
}