]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
sunrpc: Move trace_svc_xprt_dequeue()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 27 Mar 2018 14:50:07 +0000 (10:50 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 3 Apr 2018 19:08:10 +0000 (15:08 -0400)
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 <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
include/trace/events/sunrpc.h
net/sunrpc/svc_xprt.c

index a23144471b6b28f24385ba41c28f97eca5be1a3d..9bba3070f873ff65a31336ad021c006edbf67ea8 100644 (file)
@@ -634,24 +634,18 @@ DECLARE_EVENT_CLASS(svc_xprt_event,
        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))
 );
 
index 4e3b4c596bae5ce4f8e65b05c2e0feeb5c17da56..71f47187b4ecd1d6ab6264fcf54edca36278c024 100644 (file)
@@ -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;
 }