Skip to content

Commit 0505de9

Browse files
committed
NFSD: Wrap async copy operations with trace points
Add an nfsd_copy_async_done to record the timestamp, the final status code, and the callback stateid of an async copy. Rename the nfsd_copy_do_async tracepoint to match that naming convention to make it easier to enable both of these with a single glob. Reviewed-by: Jeff Layton <[email protected]> Signed-off-by: Chuck Lever <[email protected]>
1 parent d3c430a commit 0505de9

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

fs/nfsd/nfs4proc.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1760,7 +1760,7 @@ static int nfsd4_do_async_copy(void *data)
17601760
{
17611761
struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
17621762

1763-
trace_nfsd_copy_do_async(copy);
1763+
trace_nfsd_copy_async(copy);
17641764
if (nfsd4_ssc_is_inter(copy)) {
17651765
struct file *filp;
17661766

@@ -1787,6 +1787,7 @@ static int nfsd4_do_async_copy(void *data)
17871787

17881788
do_callback:
17891789
set_bit(NFSD4_COPY_F_COMPLETED, &copy->cp_flags);
1790+
trace_nfsd_copy_async_done(copy);
17901791
nfsd4_send_cb_offload(copy);
17911792
cleanup_async_copy(copy);
17921793
return 0;

fs/nfsd/trace.h

+70-1
Original file line numberDiff line numberDiff line change
@@ -2203,7 +2203,7 @@ DEFINE_EVENT(nfsd_copy_class, nfsd_copy_##name, \
22032203

22042204
DEFINE_COPY_EVENT(inter);
22052205
DEFINE_COPY_EVENT(intra);
2206-
DEFINE_COPY_EVENT(do_async);
2206+
DEFINE_COPY_EVENT(async);
22072207

22082208
TRACE_EVENT(nfsd_copy_done,
22092209
TP_PROTO(
@@ -2229,6 +2229,75 @@ TRACE_EVENT(nfsd_copy_done,
22292229
)
22302230
);
22312231

2232+
TRACE_EVENT(nfsd_copy_async_done,
2233+
TP_PROTO(
2234+
const struct nfsd4_copy *copy
2235+
),
2236+
TP_ARGS(copy),
2237+
TP_STRUCT__entry(
2238+
__field(int, status)
2239+
__field(bool, intra)
2240+
__field(bool, async)
2241+
__field(u32, src_cl_boot)
2242+
__field(u32, src_cl_id)
2243+
__field(u32, src_so_id)
2244+
__field(u32, src_si_generation)
2245+
__field(u32, dst_cl_boot)
2246+
__field(u32, dst_cl_id)
2247+
__field(u32, dst_so_id)
2248+
__field(u32, dst_si_generation)
2249+
__field(u32, cb_cl_boot)
2250+
__field(u32, cb_cl_id)
2251+
__field(u32, cb_so_id)
2252+
__field(u32, cb_si_generation)
2253+
__field(u64, src_cp_pos)
2254+
__field(u64, dst_cp_pos)
2255+
__field(u64, cp_count)
2256+
__sockaddr(addr, sizeof(struct sockaddr_in6))
2257+
),
2258+
TP_fast_assign(
2259+
const stateid_t *src_stp = &copy->cp_src_stateid;
2260+
const stateid_t *dst_stp = &copy->cp_dst_stateid;
2261+
const stateid_t *cb_stp = &copy->cp_res.cb_stateid;
2262+
2263+
__entry->status = be32_to_cpu(copy->nfserr);
2264+
__entry->intra = test_bit(NFSD4_COPY_F_INTRA, &copy->cp_flags);
2265+
__entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, &copy->cp_flags);
2266+
__entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot;
2267+
__entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id;
2268+
__entry->src_so_id = src_stp->si_opaque.so_id;
2269+
__entry->src_si_generation = src_stp->si_generation;
2270+
__entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot;
2271+
__entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id;
2272+
__entry->dst_so_id = dst_stp->si_opaque.so_id;
2273+
__entry->dst_si_generation = dst_stp->si_generation;
2274+
__entry->cb_cl_boot = cb_stp->si_opaque.so_clid.cl_boot;
2275+
__entry->cb_cl_id = cb_stp->si_opaque.so_clid.cl_id;
2276+
__entry->cb_so_id = cb_stp->si_opaque.so_id;
2277+
__entry->cb_si_generation = cb_stp->si_generation;
2278+
__entry->src_cp_pos = copy->cp_src_pos;
2279+
__entry->dst_cp_pos = copy->cp_dst_pos;
2280+
__entry->cp_count = copy->cp_count;
2281+
__assign_sockaddr(addr, &copy->cp_clp->cl_addr,
2282+
sizeof(struct sockaddr_in6));
2283+
),
2284+
TP_printk("client=%pISpc status=%d intra=%d async=%d "
2285+
"src_client %08x:%08x src_stateid %08x:%08x "
2286+
"dst_client %08x:%08x dst_stateid %08x:%08x "
2287+
"cb_client %08x:%08x cb_stateid %08x:%08x "
2288+
"cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu",
2289+
__get_sockaddr(addr),
2290+
__entry->status, __entry->intra, __entry->async,
2291+
__entry->src_cl_boot, __entry->src_cl_id,
2292+
__entry->src_so_id, __entry->src_si_generation,
2293+
__entry->dst_cl_boot, __entry->dst_cl_id,
2294+
__entry->dst_so_id, __entry->dst_si_generation,
2295+
__entry->cb_cl_boot, __entry->cb_cl_id,
2296+
__entry->cb_so_id, __entry->cb_si_generation,
2297+
__entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count
2298+
)
2299+
);
2300+
22322301
#endif /* _NFSD_TRACE_H */
22332302

22342303
#undef TRACE_INCLUDE_PATH

0 commit comments

Comments
 (0)