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

NFSv4.1: add tracepoint to trunked nfs4_exchange_id calls

Add a tracepoint to track when the client sends EXCHANGE_ID to test
a new transport for session trunking.

nfs4_detect_session_trunking() tests for trunking and returns
EINVAL if trunking can't be done, add EINVAL mapping to
show_nfs4_status() in tracepoints.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>

authored by

Olga Kornievskaia and committed by
Trond Myklebust
7e5ae43b fd5860ab

+35 -2
+4 -2
fs/nfs/nfs4proc.c
··· 8970 8970 return; 8971 8971 8972 8972 status = task->tk_status; 8973 - if (status == 0) 8973 + if (status == 0) { 8974 8974 status = nfs4_detect_session_trunking(adata->clp, 8975 8975 task->tk_msg.rpc_resp, xprt); 8976 - 8976 + trace_nfs4_trunked_exchange_id(adata->clp, 8977 + xprt->address_strings[RPC_DISPLAY_ADDR], status); 8978 + } 8977 8979 if (status == 0) 8978 8980 rpc_clnt_xprt_switch_add_xprt(clnt, xprt); 8979 8981 else if (status != -NFS4ERR_DELAY && rpc_clnt_xprt_switch_has_addr(clnt,
+30
fs/nfs/nfs4trace.h
··· 77 77 DEFINE_NFS4_CLIENTID_EVENT(nfs4_sequence); 78 78 DEFINE_NFS4_CLIENTID_EVENT(nfs4_reclaim_complete); 79 79 80 + TRACE_EVENT(nfs4_trunked_exchange_id, 81 + TP_PROTO( 82 + const struct nfs_client *clp, 83 + const char *addr, 84 + int error 85 + ), 86 + 87 + TP_ARGS(clp, addr, error), 88 + 89 + TP_STRUCT__entry( 90 + __string(main_addr, clp->cl_hostname) 91 + __string(trunk_addr, addr) 92 + __field(unsigned long, error) 93 + ), 94 + 95 + TP_fast_assign( 96 + __entry->error = error < 0 ? -error : 0; 97 + __assign_str(main_addr, clp->cl_hostname); 98 + __assign_str(trunk_addr, addr); 99 + ), 100 + 101 + TP_printk( 102 + "error=%ld (%s) main_addr=%s trunk_addr=%s", 103 + -__entry->error, 104 + show_nfs4_status(__entry->error), 105 + __get_str(main_addr), 106 + __get_str(trunk_addr) 107 + ) 108 + ); 109 + 80 110 TRACE_EVENT(nfs4_sequence_done, 81 111 TP_PROTO( 82 112 const struct nfs4_session *session,
+1
include/trace/misc/nfs.h
··· 239 239 { EHOSTDOWN, "EHOSTDOWN" }, \ 240 240 { EPIPE, "EPIPE" }, \ 241 241 { EPFNOSUPPORT, "EPFNOSUPPORT" }, \ 242 + { EINVAL, "EINVAL" }, \ 242 243 { EPROTONOSUPPORT, "EPROTONOSUPPORT" }, \ 243 244 { NFS4ERR_ACCESS, "ACCESS" }, \ 244 245 { NFS4ERR_ATTRNOTSUPP, "ATTRNOTSUPP" }, \