Commit f357dbca authored by David Howells's avatar David Howells

afs: Trace the sending of pages

Add a pair of tracepoints to log the sending of pages for an FS.StoreData
or FS.StoreData64 operation.

Tracepoint afs_send_pages notes each set of pages added to the operation.
There may be several of these per operation as we get up at most 8
contiguous pages in one go because the bvec we're using is on the stack.

Tracepoint afs_sent_pages notes the end of adding data from a whole run of
pages to the operation and the completion of the request phase.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent bdfd1105
...@@ -308,7 +308,6 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg) ...@@ -308,7 +308,6 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg)
do { do {
afs_load_bvec(call, msg, bv, first, last, offset); afs_load_bvec(call, msg, bv, first, last, offset);
offset = 0;
bytes = msg->msg_iter.count; bytes = msg->msg_iter.count;
nr = msg->msg_iter.nr_segs; nr = msg->msg_iter.nr_segs;
...@@ -318,6 +317,9 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg) ...@@ -318,6 +317,9 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg)
*/ */
if (first + nr - 1 >= last) if (first + nr - 1 >= last)
call->state = AFS_CALL_AWAIT_REPLY; call->state = AFS_CALL_AWAIT_REPLY;
trace_afs_send_pages(call, msg, first, last, offset);
offset = 0;
ret = rxrpc_kernel_send_data(afs_socket, call->rxcall, ret = rxrpc_kernel_send_data(afs_socket, call->rxcall,
msg, bytes); msg, bytes);
for (loop = 0; loop < nr; loop++) for (loop = 0; loop < nr; loop++)
...@@ -328,6 +330,7 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg) ...@@ -328,6 +330,7 @@ static int afs_send_pages(struct afs_call *call, struct msghdr *msg)
first += nr; first += nr;
} while (first <= last); } while (first <= last);
trace_afs_sent_pages(call, first, last, ret);
return ret; return ret;
} }
......
...@@ -310,6 +310,64 @@ TRACE_EVENT(afs_call_done, ...@@ -310,6 +310,64 @@ TRACE_EVENT(afs_call_done,
__entry->rx_call) __entry->rx_call)
); );
TRACE_EVENT(afs_send_pages,
TP_PROTO(struct afs_call *call, struct msghdr *msg,
pgoff_t first, pgoff_t last, unsigned int offset),
TP_ARGS(call, msg, first, last, offset),
TP_STRUCT__entry(
__field(struct afs_call *, call )
__field(pgoff_t, first )
__field(pgoff_t, last )
__field(unsigned int, nr )
__field(unsigned int, bytes )
__field(unsigned int, offset )
__field(unsigned int, flags )
),
TP_fast_assign(
__entry->call = call;
__entry->first = first;
__entry->last = last;
__entry->nr = msg->msg_iter.nr_segs;
__entry->bytes = msg->msg_iter.count;
__entry->offset = offset;
__entry->flags = msg->msg_flags;
),
TP_printk(" c=%p %lx-%lx-%lx b=%x o=%x f=%x",
__entry->call,
__entry->first, __entry->first + __entry->nr - 1, __entry->last,
__entry->bytes, __entry->offset,
__entry->flags)
);
TRACE_EVENT(afs_sent_pages,
TP_PROTO(struct afs_call *call, pgoff_t first, pgoff_t last, int ret),
TP_ARGS(call, first, last, ret),
TP_STRUCT__entry(
__field(struct afs_call *, call )
__field(pgoff_t, first )
__field(pgoff_t, last )
__field(int, ret )
),
TP_fast_assign(
__entry->call = call;
__entry->first = first;
__entry->last = last;
__entry->ret = ret;
),
TP_printk(" c=%p %lx-%lx r=%d",
__entry->call,
__entry->first, __entry->last,
__entry->ret)
);
#endif /* _TRACE_AFS_H */ #endif /* _TRACE_AFS_H */
/* This part must be outside protection */ /* This part must be outside protection */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment