Skip to content

Commit 36d2f19

Browse files
trondmypdgregkh
authored andcommitted
SUNRPC: Fix tracepoint storage issues with svc_recv and svc_rqst_status
commit e9d4bf219c83d09579bc62512fea2ca10f025d93 upstream. There is no guarantee that either the request or the svc_xprt exist by the time we get round to printing the trace message. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent a694b1f commit 36d2f19

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

include/trace/events/sunrpc.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -455,20 +455,22 @@ TRACE_EVENT(svc_recv,
455455
TP_ARGS(rqst, status),
456456

457457
TP_STRUCT__entry(
458-
__field(struct sockaddr *, addr)
459458
__field(__be32, xid)
460459
__field(int, status)
461460
__field(unsigned long, flags)
461+
__dynamic_array(unsigned char, addr, rqst->rq_addrlen)
462462
),
463463

464464
TP_fast_assign(
465-
__entry->addr = (struct sockaddr *)&rqst->rq_addr;
466465
__entry->xid = status > 0 ? rqst->rq_xid : 0;
467466
__entry->status = status;
468467
__entry->flags = rqst->rq_flags;
468+
memcpy(__get_dynamic_array(addr),
469+
&rqst->rq_addr, rqst->rq_addrlen);
469470
),
470471

471-
TP_printk("addr=%pIScp xid=0x%x status=%d flags=%s", __entry->addr,
472+
TP_printk("addr=%pIScp xid=0x%x status=%d flags=%s",
473+
(struct sockaddr *)__get_dynamic_array(addr),
472474
be32_to_cpu(__entry->xid), __entry->status,
473475
show_rqstp_flags(__entry->flags))
474476
);
@@ -480,22 +482,23 @@ DECLARE_EVENT_CLASS(svc_rqst_status,
480482
TP_ARGS(rqst, status),
481483

482484
TP_STRUCT__entry(
483-
__field(struct sockaddr *, addr)
484485
__field(__be32, xid)
485-
__field(int, dropme)
486486
__field(int, status)
487487
__field(unsigned long, flags)
488+
__dynamic_array(unsigned char, addr, rqst->rq_addrlen)
488489
),
489490

490491
TP_fast_assign(
491-
__entry->addr = (struct sockaddr *)&rqst->rq_addr;
492492
__entry->xid = rqst->rq_xid;
493493
__entry->status = status;
494494
__entry->flags = rqst->rq_flags;
495+
memcpy(__get_dynamic_array(addr),
496+
&rqst->rq_addr, rqst->rq_addrlen);
495497
),
496498

497499
TP_printk("addr=%pIScp rq_xid=0x%x status=%d flags=%s",
498-
__entry->addr, be32_to_cpu(__entry->xid),
500+
(struct sockaddr *)__get_dynamic_array(addr),
501+
be32_to_cpu(__entry->xid),
499502
__entry->status, show_rqstp_flags(__entry->flags))
500503
);
501504

0 commit comments

Comments
 (0)