aboutsummaryrefslogtreecommitdiffstats
path: root/include/trace
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2016-06-24 10:55:44 -0400
committerJ. Bruce Fields <bfields@redhat.com>2016-07-01 16:28:44 -0400
commitdb1bb44c4c7e8d49ed674dc59e5222d99c698088 (patch)
tree0c008eb896f5386ba8710605858a03b05e159022 /include/trace
parent6343a2120862f7023006c8091ad95c1f16a32077 (diff)
SUNRPC: Don't allocate a full sockaddr_storage for tracing
We're always tracing IPv4 or IPv6 addresses, so we can save a lot of space on the ringbuffer by allocating the correct sockaddr size. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Cc: stable@vger.kernel.org Fixes: 83a712e0afef "sunrpc: add some tracepoints around ..." Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include/trace')
-rw-r--r--include/trace/events/sunrpc.h47
1 files changed, 34 insertions, 13 deletions
diff --git a/include/trace/events/sunrpc.h b/include/trace/events/sunrpc.h
index 003dca933803..5664ca07c9c7 100644
--- a/include/trace/events/sunrpc.h
+++ b/include/trace/events/sunrpc.h
@@ -529,20 +529,27 @@ TRACE_EVENT(svc_xprt_do_enqueue,
529 529
530 TP_STRUCT__entry( 530 TP_STRUCT__entry(
531 __field(struct svc_xprt *, xprt) 531 __field(struct svc_xprt *, xprt)
532 __field_struct(struct sockaddr_storage, ss)
533 __field(int, pid) 532 __field(int, pid)
534 __field(unsigned long, flags) 533 __field(unsigned long, flags)
534 __dynamic_array(unsigned char, addr, xprt != NULL ?
535 xprt->xpt_remotelen : 0)
535 ), 536 ),
536 537
537 TP_fast_assign( 538 TP_fast_assign(
538 __entry->xprt = xprt; 539 __entry->xprt = xprt;
539 xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
540 __entry->pid = rqst? rqst->rq_task->pid : 0; 540 __entry->pid = rqst? rqst->rq_task->pid : 0;
541 __entry->flags = xprt ? xprt->xpt_flags : 0; 541 if (xprt) {
542 memcpy(__get_dynamic_array(addr),
543 &xprt->xpt_remote,
544 xprt->xpt_remotelen);
545 __entry->flags = xprt->xpt_flags;
546 } else
547 __entry->flags = 0;
542 ), 548 ),
543 549
544 TP_printk("xprt=0x%p addr=%pIScp pid=%d flags=%s", __entry->xprt, 550 TP_printk("xprt=0x%p addr=%pIScp pid=%d flags=%s", __entry->xprt,
545 (struct sockaddr *)&__entry->ss, 551 __get_dynamic_array_len(addr) != 0 ?
552 (struct sockaddr *)__get_dynamic_array(addr) : NULL,
546 __entry->pid, show_svc_xprt_flags(__entry->flags)) 553 __entry->pid, show_svc_xprt_flags(__entry->flags))
547); 554);
548 555
@@ -553,18 +560,25 @@ TRACE_EVENT(svc_xprt_dequeue,
553 560
554 TP_STRUCT__entry( 561 TP_STRUCT__entry(
555 __field(struct svc_xprt *, xprt) 562 __field(struct svc_xprt *, xprt)
556 __field_struct(struct sockaddr_storage, ss)
557 __field(unsigned long, flags) 563 __field(unsigned long, flags)
564 __dynamic_array(unsigned char, addr, xprt != NULL ?
565 xprt->xpt_remotelen : 0)
558 ), 566 ),
559 567
560 TP_fast_assign( 568 TP_fast_assign(
561 __entry->xprt = xprt, 569 __entry->xprt = xprt;
562 xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss)); 570 if (xprt) {
563 __entry->flags = xprt ? xprt->xpt_flags : 0; 571 memcpy(__get_dynamic_array(addr),
572 &xprt->xpt_remote,
573 xprt->xpt_remotelen);
574 __entry->flags = xprt->xpt_flags;
575 } else
576 __entry->flags = 0;
564 ), 577 ),
565 578
566 TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt, 579 TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt,
567 (struct sockaddr *)&__entry->ss, 580 __get_dynamic_array_len(addr) != 0 ?
581 (struct sockaddr *)__get_dynamic_array(addr) : NULL,
568 show_svc_xprt_flags(__entry->flags)) 582 show_svc_xprt_flags(__entry->flags))
569); 583);
570 584
@@ -592,19 +606,26 @@ TRACE_EVENT(svc_handle_xprt,
592 TP_STRUCT__entry( 606 TP_STRUCT__entry(
593 __field(struct svc_xprt *, xprt) 607 __field(struct svc_xprt *, xprt)
594 __field(int, len) 608 __field(int, len)
595 __field_struct(struct sockaddr_storage, ss)
596 __field(unsigned long, flags) 609 __field(unsigned long, flags)
610 __dynamic_array(unsigned char, addr, xprt != NULL ?
611 xprt->xpt_remotelen : 0)
597 ), 612 ),
598 613
599 TP_fast_assign( 614 TP_fast_assign(
600 __entry->xprt = xprt; 615 __entry->xprt = xprt;
601 xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
602 __entry->len = len; 616 __entry->len = len;
603 __entry->flags = xprt ? xprt->xpt_flags : 0; 617 if (xprt) {
618 memcpy(__get_dynamic_array(addr),
619 &xprt->xpt_remote,
620 xprt->xpt_remotelen);
621 __entry->flags = xprt->xpt_flags;
622 } else
623 __entry->flags = 0;
604 ), 624 ),
605 625
606 TP_printk("xprt=0x%p addr=%pIScp len=%d flags=%s", __entry->xprt, 626 TP_printk("xprt=0x%p addr=%pIScp len=%d flags=%s", __entry->xprt,
607 (struct sockaddr *)&__entry->ss, 627 __get_dynamic_array_len(addr) != 0 ?
628 (struct sockaddr *)__get_dynamic_array(addr) : NULL,
608 __entry->len, show_svc_xprt_flags(__entry->flags)) 629 __entry->len, show_svc_xprt_flags(__entry->flags))
609); 630);
610#endif /* _TRACE_SUNRPC_H */ 631#endif /* _TRACE_SUNRPC_H */