Return-Path: Received: from mail-io0-f196.google.com ([209.85.223.196]:46942 "EHLO mail-io0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935067AbeCMPoC (ORCPT ); Tue, 13 Mar 2018 11:44:02 -0400 Received: by mail-io0-f196.google.com with SMTP id p78so605471iod.13 for ; Tue, 13 Mar 2018 08:44:02 -0700 (PDT) Subject: [PATCH 04/15] sunrpc: Move trace_svc_xprt_dequeue() From: Chuck Lever To: bfields@fieldses.org Cc: linux-nfs@vger.kernel.org Date: Tue, 13 Mar 2018 11:44:00 -0400 Message-ID: <20180313154400.21531.68347.stgit@klimt.1015granger.net> In-Reply-To: <20180313154053.21531.86316.stgit@klimt.1015granger.net> References: <20180313154053.21531.86316.stgit@klimt.1015granger.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Sender: linux-nfs-owner@vger.kernel.org List-ID: 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: Chuck Lever --- include/trace/events/sunrpc.h | 16 +++++----------- net/sunrpc/svc_xprt.c | 5 +---- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h index a231444..9bba307 100644 --- a/include/trace/events/sunrpc.h +++ b/include/trace/events/sunrpc.h @@ -634,24 +634,18 @@ TP_STRUCT__entry( __field(struct svc_xprt *, xprt) __field(unsigned long, flags) - __dynamic_array(unsigned char, addr, xprt != NULL ? - xprt->xpt_remotelen : 0) + __dynamic_array(unsigned char, addr, xprt->xpt_remotelen) ), TP_fast_assign( __entry->xprt = xprt; - if (xprt) { - memcpy(__get_dynamic_array(addr), - &xprt->xpt_remote, - xprt->xpt_remotelen); - __entry->flags = xprt->xpt_flags; - } else - __entry->flags = 0; + __entry->flags = xprt->xpt_flags; + memcpy(__get_dynamic_array(addr), + &xprt->xpt_remote, xprt->xpt_remotelen); ), TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt, - __get_dynamic_array_len(addr) != 0 ? - (struct sockaddr *)__get_dynamic_array(addr) : NULL, + (struct sockaddr *)__get_dynamic_array(addr), show_svc_xprt_flags(__entry->flags)) ); diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index 4e3b4c5..71f4718 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c @@ -454,13 +454,9 @@ static struct svc_xprt *svc_xprt_dequeue(struct svc_pool *pool) struct svc_xprt, xpt_ready); list_del_init(&xprt->xpt_ready); svc_xprt_get(xprt); - - dprintk("svc: transport %p dequeued, inuse=%d\n", - xprt, kref_read(&xprt->xpt_ref)); } spin_unlock_bh(&pool->sp_lock); out: - trace_svc_xprt_dequeue(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; else rqstp->rq_chandle.thread_wait = 1*HZ; + trace_svc_xprt_dequeue(rqstp->rq_xprt); return rqstp->rq_xprt; }