diff options
| author | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-06-24 10:55:44 -0400 |
|---|---|---|
| committer | J. Bruce Fields <bfields@redhat.com> | 2016-07-01 16:28:44 -0400 |
| commit | db1bb44c4c7e8d49ed674dc59e5222d99c698088 (patch) | |
| tree | 0c008eb896f5386ba8710605858a03b05e159022 /include/trace | |
| parent | 6343a2120862f7023006c8091ad95c1f16a32077 (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.h | 47 |
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 */ |
