Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xprtrdma: Refine trace_xprtrdma_fixup

Slightly reduce overhead and display more useful information.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>

authored by

Chuck Lever and committed by
Anna Schumaker
d4957f01 7b020f17

+15 -50
+13 -47
include/trace/events/rpcrdma.h
··· 1084 1084 TRACE_EVENT(xprtrdma_fixup, 1085 1085 TP_PROTO( 1086 1086 const struct rpc_rqst *rqst, 1087 - int len, 1088 - int hdrlen 1087 + unsigned long fixup 1089 1088 ), 1090 1089 1091 - TP_ARGS(rqst, len, hdrlen), 1090 + TP_ARGS(rqst, fixup), 1092 1091 1093 1092 TP_STRUCT__entry( 1094 1093 __field(unsigned int, task_id) 1095 1094 __field(unsigned int, client_id) 1096 - __field(const void *, base) 1097 - __field(int, len) 1098 - __field(int, hdrlen) 1095 + __field(unsigned long, fixup) 1096 + __field(size_t, headlen) 1097 + __field(unsigned int, pagelen) 1098 + __field(size_t, taillen) 1099 1099 ), 1100 1100 1101 1101 TP_fast_assign( 1102 1102 __entry->task_id = rqst->rq_task->tk_pid; 1103 1103 __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1104 - __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 1105 - __entry->len = len; 1106 - __entry->hdrlen = hdrlen; 1104 + __entry->fixup = fixup; 1105 + __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1106 + __entry->pagelen = rqst->rq_rcv_buf.page_len; 1107 + __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1107 1108 ), 1108 1109 1109 - TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 1110 - __entry->task_id, __entry->client_id, 1111 - __entry->base, __entry->len, __entry->hdrlen 1112 - ) 1113 - ); 1114 - 1115 - TRACE_EVENT(xprtrdma_fixup_pg, 1116 - TP_PROTO( 1117 - const struct rpc_rqst *rqst, 1118 - int pageno, 1119 - const void *pos, 1120 - int len, 1121 - int curlen 1122 - ), 1123 - 1124 - TP_ARGS(rqst, pageno, pos, len, curlen), 1125 - 1126 - TP_STRUCT__entry( 1127 - __field(unsigned int, task_id) 1128 - __field(unsigned int, client_id) 1129 - __field(const void *, pos) 1130 - __field(int, pageno) 1131 - __field(int, len) 1132 - __field(int, curlen) 1133 - ), 1134 - 1135 - TP_fast_assign( 1136 - __entry->task_id = rqst->rq_task->tk_pid; 1137 - __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1138 - __entry->pos = pos; 1139 - __entry->pageno = pageno; 1140 - __entry->len = len; 1141 - __entry->curlen = curlen; 1142 - ), 1143 - 1144 - TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 1145 - __entry->task_id, __entry->client_id, 1146 - __entry->pageno, __entry->pos, __entry->len, __entry->curlen 1110 + TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1111 + __entry->task_id, __entry->client_id, __entry->fixup, 1112 + __entry->headlen, __entry->pagelen, __entry->taillen 1147 1113 ) 1148 1114 ); 1149 1115
+2 -3
net/sunrpc/xprtrdma/rpc_rdma.c
··· 1086 1086 curlen = rqst->rq_rcv_buf.head[0].iov_len; 1087 1087 if (curlen > copy_len) 1088 1088 curlen = copy_len; 1089 - trace_xprtrdma_fixup(rqst, copy_len, curlen); 1090 1089 srcp += curlen; 1091 1090 copy_len -= curlen; 1092 1091 ··· 1105 1106 if (curlen > pagelist_len) 1106 1107 curlen = pagelist_len; 1107 1108 1108 - trace_xprtrdma_fixup_pg(rqst, i, srcp, 1109 - copy_len, curlen); 1110 1109 destp = kmap_atomic(ppages[i]); 1111 1110 memcpy(destp + page_base, srcp, curlen); 1112 1111 flush_dcache_page(ppages[i]); ··· 1136 1139 rqst->rq_private_buf.tail[0].iov_base = srcp; 1137 1140 } 1138 1141 1142 + if (fixup_copy_count) 1143 + trace_xprtrdma_fixup(rqst, fixup_copy_count); 1139 1144 return fixup_copy_count; 1140 1145 } 1141 1146