1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2c6d01c6fSTrond Myklebust /* 3c6d01c6fSTrond Myklebust * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 4c6d01c6fSTrond Myklebust */ 5c6d01c6fSTrond Myklebust #undef TRACE_SYSTEM 6c6d01c6fSTrond Myklebust #define TRACE_SYSTEM nfs4 7c6d01c6fSTrond Myklebust 8c6d01c6fSTrond Myklebust #if !defined(_TRACE_NFS4_H) || defined(TRACE_HEADER_MULTI_READ) 9c6d01c6fSTrond Myklebust #define _TRACE_NFS4_H 10c6d01c6fSTrond Myklebust 11c6d01c6fSTrond Myklebust #include <linux/tracepoint.h> 12b4776a34SChuck Lever #include <trace/events/sunrpc_base.h> 13c6d01c6fSTrond Myklebust 149d2d48bbSChuck Lever #include <trace/events/fs.h> 158791545eSChuck Lever #include <trace/events/nfs.h> 16c6d01c6fSTrond Myklebust 17b5f875a9STrond Myklebust #define show_nfs_fattr_flags(valid) \ 18b5f875a9STrond Myklebust __print_flags((unsigned long)valid, "|", \ 19b5f875a9STrond Myklebust { NFS_ATTR_FATTR_TYPE, "TYPE" }, \ 20b5f875a9STrond Myklebust { NFS_ATTR_FATTR_MODE, "MODE" }, \ 21b5f875a9STrond Myklebust { NFS_ATTR_FATTR_NLINK, "NLINK" }, \ 22b5f875a9STrond Myklebust { NFS_ATTR_FATTR_OWNER, "OWNER" }, \ 23b5f875a9STrond Myklebust { NFS_ATTR_FATTR_GROUP, "GROUP" }, \ 24b5f875a9STrond Myklebust { NFS_ATTR_FATTR_RDEV, "RDEV" }, \ 25b5f875a9STrond Myklebust { NFS_ATTR_FATTR_SIZE, "SIZE" }, \ 26b5f875a9STrond Myklebust { NFS_ATTR_FATTR_FSID, "FSID" }, \ 27b5f875a9STrond Myklebust { NFS_ATTR_FATTR_FILEID, "FILEID" }, \ 28b5f875a9STrond Myklebust { NFS_ATTR_FATTR_ATIME, "ATIME" }, \ 29b5f875a9STrond Myklebust { NFS_ATTR_FATTR_MTIME, "MTIME" }, \ 30b5f875a9STrond Myklebust { NFS_ATTR_FATTR_CTIME, "CTIME" }, \ 31b5f875a9STrond Myklebust { NFS_ATTR_FATTR_CHANGE, "CHANGE" }, \ 32b5f875a9STrond Myklebust { NFS_ATTR_FATTR_OWNER_NAME, "OWNER_NAME" }, \ 33b5f875a9STrond Myklebust { NFS_ATTR_FATTR_GROUP_NAME, "GROUP_NAME" }) 34b5f875a9STrond Myklebust 35c6d01c6fSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_clientid_event, 36c6d01c6fSTrond Myklebust TP_PROTO( 37c6d01c6fSTrond Myklebust const struct nfs_client *clp, 38c6d01c6fSTrond Myklebust int error 39c6d01c6fSTrond Myklebust ), 40c6d01c6fSTrond Myklebust 41c6d01c6fSTrond Myklebust TP_ARGS(clp, error), 42c6d01c6fSTrond Myklebust 43c6d01c6fSTrond Myklebust TP_STRUCT__entry( 443944369dSAnna Schumaker __string(dstaddr, clp->cl_hostname) 4596650e2eSChuck Lever __field(unsigned long, error) 46c6d01c6fSTrond Myklebust ), 47c6d01c6fSTrond Myklebust 48c6d01c6fSTrond Myklebust TP_fast_assign( 49118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 503944369dSAnna Schumaker __assign_str(dstaddr, clp->cl_hostname); 51c6d01c6fSTrond Myklebust ), 52c6d01c6fSTrond Myklebust 53c6d01c6fSTrond Myklebust TP_printk( 5496650e2eSChuck Lever "error=%ld (%s) dstaddr=%s", 5596650e2eSChuck Lever -__entry->error, 568791545eSChuck Lever show_nfs4_status(__entry->error), 57c6d01c6fSTrond Myklebust __get_str(dstaddr) 58c6d01c6fSTrond Myklebust ) 59c6d01c6fSTrond Myklebust ); 60c6d01c6fSTrond Myklebust #define DEFINE_NFS4_CLIENTID_EVENT(name) \ 61c6d01c6fSTrond Myklebust DEFINE_EVENT(nfs4_clientid_event, name, \ 62c6d01c6fSTrond Myklebust TP_PROTO( \ 63c6d01c6fSTrond Myklebust const struct nfs_client *clp, \ 64c6d01c6fSTrond Myklebust int error \ 65c6d01c6fSTrond Myklebust ), \ 66c6d01c6fSTrond Myklebust TP_ARGS(clp, error)) 67c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid); 68c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid_confirm); 69c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew); 70c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew_async); 71c6d01c6fSTrond Myklebust #ifdef CONFIG_NFS_V4_1 72c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_exchange_id); 73c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_create_session); 74c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_session); 75c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_clientid); 76c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_bind_conn_to_session); 77c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_sequence); 78c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_reclaim_complete); 792f92ae34STrond Myklebust 802f92ae34STrond Myklebust TRACE_EVENT(nfs4_sequence_done, 812f92ae34STrond Myklebust TP_PROTO( 822f92ae34STrond Myklebust const struct nfs4_session *session, 832f92ae34STrond Myklebust const struct nfs4_sequence_res *res 842f92ae34STrond Myklebust ), 852f92ae34STrond Myklebust TP_ARGS(session, res), 862f92ae34STrond Myklebust 872f92ae34STrond Myklebust TP_STRUCT__entry( 882f92ae34STrond Myklebust __field(unsigned int, session) 892f92ae34STrond Myklebust __field(unsigned int, slot_nr) 902f92ae34STrond Myklebust __field(unsigned int, seq_nr) 912f92ae34STrond Myklebust __field(unsigned int, highest_slotid) 922f92ae34STrond Myklebust __field(unsigned int, target_highest_slotid) 938791545eSChuck Lever __field(unsigned long, status_flags) 9496650e2eSChuck Lever __field(unsigned long, error) 952f92ae34STrond Myklebust ), 962f92ae34STrond Myklebust 972f92ae34STrond Myklebust TP_fast_assign( 982f92ae34STrond Myklebust const struct nfs4_slot *sr_slot = res->sr_slot; 992f92ae34STrond Myklebust __entry->session = nfs_session_id_hash(&session->sess_id); 1002f92ae34STrond Myklebust __entry->slot_nr = sr_slot->slot_nr; 1012f92ae34STrond Myklebust __entry->seq_nr = sr_slot->seq_nr; 1022f92ae34STrond Myklebust __entry->highest_slotid = res->sr_highest_slotid; 1032f92ae34STrond Myklebust __entry->target_highest_slotid = 1042f92ae34STrond Myklebust res->sr_target_highest_slotid; 10552618df9SAndrew Elble __entry->status_flags = res->sr_status_flags; 106118b6292STrond Myklebust __entry->error = res->sr_status < 0 ? 107118b6292STrond Myklebust -res->sr_status : 0; 1082f92ae34STrond Myklebust ), 1092f92ae34STrond Myklebust TP_printk( 11096650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 1112f92ae34STrond Myklebust "highest_slotid=%u target_highest_slotid=%u " 1128791545eSChuck Lever "status_flags=0x%lx (%s)", 11396650e2eSChuck Lever -__entry->error, 1148791545eSChuck Lever show_nfs4_status(__entry->error), 1152f92ae34STrond Myklebust __entry->session, 1162f92ae34STrond Myklebust __entry->slot_nr, 1172f92ae34STrond Myklebust __entry->seq_nr, 1182f92ae34STrond Myklebust __entry->highest_slotid, 1192f92ae34STrond Myklebust __entry->target_highest_slotid, 1202f92ae34STrond Myklebust __entry->status_flags, 1218791545eSChuck Lever show_nfs4_seq4_status(__entry->status_flags) 1222f92ae34STrond Myklebust ) 1232f92ae34STrond Myklebust ); 1242f92ae34STrond Myklebust 1252f92ae34STrond Myklebust struct cb_sequenceargs; 1262f92ae34STrond Myklebust struct cb_sequenceres; 1272f92ae34STrond Myklebust 1282f92ae34STrond Myklebust TRACE_EVENT(nfs4_cb_sequence, 1292f92ae34STrond Myklebust TP_PROTO( 1302f92ae34STrond Myklebust const struct cb_sequenceargs *args, 1312f92ae34STrond Myklebust const struct cb_sequenceres *res, 1322f92ae34STrond Myklebust __be32 status 1332f92ae34STrond Myklebust ), 1342f92ae34STrond Myklebust TP_ARGS(args, res, status), 1352f92ae34STrond Myklebust 1362f92ae34STrond Myklebust TP_STRUCT__entry( 1372f92ae34STrond Myklebust __field(unsigned int, session) 1382f92ae34STrond Myklebust __field(unsigned int, slot_nr) 1392f92ae34STrond Myklebust __field(unsigned int, seq_nr) 1402f92ae34STrond Myklebust __field(unsigned int, highest_slotid) 1412f92ae34STrond Myklebust __field(unsigned int, cachethis) 14296650e2eSChuck Lever __field(unsigned long, error) 1432f92ae34STrond Myklebust ), 1442f92ae34STrond Myklebust 1452f92ae34STrond Myklebust TP_fast_assign( 1462f92ae34STrond Myklebust __entry->session = nfs_session_id_hash(&args->csa_sessionid); 1472f92ae34STrond Myklebust __entry->slot_nr = args->csa_slotid; 1482f92ae34STrond Myklebust __entry->seq_nr = args->csa_sequenceid; 1492f92ae34STrond Myklebust __entry->highest_slotid = args->csa_highestslotid; 1502f92ae34STrond Myklebust __entry->cachethis = args->csa_cachethis; 15196650e2eSChuck Lever __entry->error = be32_to_cpu(status); 1522f92ae34STrond Myklebust ), 1532f92ae34STrond Myklebust 1542f92ae34STrond Myklebust TP_printk( 15596650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 1562f92ae34STrond Myklebust "highest_slotid=%u", 15796650e2eSChuck Lever -__entry->error, 1588791545eSChuck Lever show_nfs4_status(__entry->error), 1592f92ae34STrond Myklebust __entry->session, 1602f92ae34STrond Myklebust __entry->slot_nr, 1612f92ae34STrond Myklebust __entry->seq_nr, 1622f92ae34STrond Myklebust __entry->highest_slotid 1632f92ae34STrond Myklebust ) 1642f92ae34STrond Myklebust ); 165c5833f0dSChuck Lever 166c5833f0dSChuck Lever TRACE_EVENT(nfs4_cb_seqid_err, 167c5833f0dSChuck Lever TP_PROTO( 168c5833f0dSChuck Lever const struct cb_sequenceargs *args, 169c5833f0dSChuck Lever __be32 status 170c5833f0dSChuck Lever ), 171c5833f0dSChuck Lever TP_ARGS(args, status), 172c5833f0dSChuck Lever 173c5833f0dSChuck Lever TP_STRUCT__entry( 174c5833f0dSChuck Lever __field(unsigned int, session) 175c5833f0dSChuck Lever __field(unsigned int, slot_nr) 176c5833f0dSChuck Lever __field(unsigned int, seq_nr) 177c5833f0dSChuck Lever __field(unsigned int, highest_slotid) 178c5833f0dSChuck Lever __field(unsigned int, cachethis) 17996650e2eSChuck Lever __field(unsigned long, error) 180c5833f0dSChuck Lever ), 181c5833f0dSChuck Lever 182c5833f0dSChuck Lever TP_fast_assign( 183c5833f0dSChuck Lever __entry->session = nfs_session_id_hash(&args->csa_sessionid); 184c5833f0dSChuck Lever __entry->slot_nr = args->csa_slotid; 185c5833f0dSChuck Lever __entry->seq_nr = args->csa_sequenceid; 186c5833f0dSChuck Lever __entry->highest_slotid = args->csa_highestslotid; 187c5833f0dSChuck Lever __entry->cachethis = args->csa_cachethis; 18896650e2eSChuck Lever __entry->error = be32_to_cpu(status); 189c5833f0dSChuck Lever ), 190c5833f0dSChuck Lever 191c5833f0dSChuck Lever TP_printk( 19296650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 193c5833f0dSChuck Lever "highest_slotid=%u", 19496650e2eSChuck Lever -__entry->error, 1958791545eSChuck Lever show_nfs4_status(__entry->error), 196c5833f0dSChuck Lever __entry->session, 197c5833f0dSChuck Lever __entry->slot_nr, 198c5833f0dSChuck Lever __entry->seq_nr, 199c5833f0dSChuck Lever __entry->highest_slotid 200c5833f0dSChuck Lever ) 201c5833f0dSChuck Lever ); 202c5833f0dSChuck Lever 203c6d01c6fSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 204c6d01c6fSTrond Myklebust 205ad05cc0fSAnna Schumaker TRACE_EVENT(nfs4_setup_sequence, 206ad05cc0fSAnna Schumaker TP_PROTO( 207ad05cc0fSAnna Schumaker const struct nfs4_session *session, 208ad05cc0fSAnna Schumaker const struct nfs4_sequence_args *args 209ad05cc0fSAnna Schumaker ), 210ad05cc0fSAnna Schumaker TP_ARGS(session, args), 211ad05cc0fSAnna Schumaker 212ad05cc0fSAnna Schumaker TP_STRUCT__entry( 213ad05cc0fSAnna Schumaker __field(unsigned int, session) 214ad05cc0fSAnna Schumaker __field(unsigned int, slot_nr) 215ad05cc0fSAnna Schumaker __field(unsigned int, seq_nr) 216ad05cc0fSAnna Schumaker __field(unsigned int, highest_used_slotid) 217ad05cc0fSAnna Schumaker ), 218ad05cc0fSAnna Schumaker 219ad05cc0fSAnna Schumaker TP_fast_assign( 220ad05cc0fSAnna Schumaker const struct nfs4_slot *sa_slot = args->sa_slot; 221ad05cc0fSAnna Schumaker __entry->session = session ? nfs_session_id_hash(&session->sess_id) : 0; 222ad05cc0fSAnna Schumaker __entry->slot_nr = sa_slot->slot_nr; 223ad05cc0fSAnna Schumaker __entry->seq_nr = sa_slot->seq_nr; 224ad05cc0fSAnna Schumaker __entry->highest_used_slotid = 225ad05cc0fSAnna Schumaker sa_slot->table->highest_used_slotid; 226ad05cc0fSAnna Schumaker ), 227ad05cc0fSAnna Schumaker TP_printk( 228ad05cc0fSAnna Schumaker "session=0x%08x slot_nr=%u seq_nr=%u " 229ad05cc0fSAnna Schumaker "highest_used_slotid=%u", 230ad05cc0fSAnna Schumaker __entry->session, 231ad05cc0fSAnna Schumaker __entry->slot_nr, 232ad05cc0fSAnna Schumaker __entry->seq_nr, 233ad05cc0fSAnna Schumaker __entry->highest_used_slotid 234ad05cc0fSAnna Schumaker ) 235ad05cc0fSAnna Schumaker ); 236ad05cc0fSAnna Schumaker 237511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MANAGER_RUNNING); 238511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_CHECK_LEASE); 239511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_EXPIRED); 240511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_REBOOT); 241511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_NOGRACE); 242511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGRETURN); 243511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SESSION_RESET); 244511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_CONFIRM); 245511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SERVER_SCOPE_MISMATCH); 246511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_PURGE_STATE); 247511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_BIND_CONN_TO_SESSION); 248511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MOVED); 249511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_MOVED); 250511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGATION_EXPIRED); 251511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RUN_MANAGER); 252b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_RUNNING); 253b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_READ); 254b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_RW); 255511ba52eSChuck Lever 256511ba52eSChuck Lever #define show_nfs4_clp_state(state) \ 257511ba52eSChuck Lever __print_flags(state, "|", \ 258511ba52eSChuck Lever { NFS4CLNT_MANAGER_RUNNING, "MANAGER_RUNNING" }, \ 259511ba52eSChuck Lever { NFS4CLNT_CHECK_LEASE, "CHECK_LEASE" }, \ 260511ba52eSChuck Lever { NFS4CLNT_LEASE_EXPIRED, "LEASE_EXPIRED" }, \ 261511ba52eSChuck Lever { NFS4CLNT_RECLAIM_REBOOT, "RECLAIM_REBOOT" }, \ 262511ba52eSChuck Lever { NFS4CLNT_RECLAIM_NOGRACE, "RECLAIM_NOGRACE" }, \ 263511ba52eSChuck Lever { NFS4CLNT_DELEGRETURN, "DELEGRETURN" }, \ 264511ba52eSChuck Lever { NFS4CLNT_SESSION_RESET, "SESSION_RESET" }, \ 265511ba52eSChuck Lever { NFS4CLNT_LEASE_CONFIRM, "LEASE_CONFIRM" }, \ 266511ba52eSChuck Lever { NFS4CLNT_SERVER_SCOPE_MISMATCH, \ 267511ba52eSChuck Lever "SERVER_SCOPE_MISMATCH" }, \ 268511ba52eSChuck Lever { NFS4CLNT_PURGE_STATE, "PURGE_STATE" }, \ 269511ba52eSChuck Lever { NFS4CLNT_BIND_CONN_TO_SESSION, \ 270511ba52eSChuck Lever "BIND_CONN_TO_SESSION" }, \ 271511ba52eSChuck Lever { NFS4CLNT_MOVED, "MOVED" }, \ 272511ba52eSChuck Lever { NFS4CLNT_LEASE_MOVED, "LEASE_MOVED" }, \ 273511ba52eSChuck Lever { NFS4CLNT_DELEGATION_EXPIRED, "DELEGATION_EXPIRED" }, \ 274511ba52eSChuck Lever { NFS4CLNT_RUN_MANAGER, "RUN_MANAGER" }, \ 275b5fdf841STrond Myklebust { NFS4CLNT_RECALL_RUNNING, "RECALL_RUNNING" }, \ 276b5fdf841STrond Myklebust { NFS4CLNT_RECALL_ANY_LAYOUT_READ, "RECALL_ANY_LAYOUT_READ" }, \ 277b5fdf841STrond Myklebust { NFS4CLNT_RECALL_ANY_LAYOUT_RW, "RECALL_ANY_LAYOUT_RW" }) 278511ba52eSChuck Lever 279511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr, 280511ba52eSChuck Lever TP_PROTO( 281511ba52eSChuck Lever const struct nfs_client *clp 282511ba52eSChuck Lever ), 283511ba52eSChuck Lever 284511ba52eSChuck Lever TP_ARGS(clp), 285511ba52eSChuck Lever 286511ba52eSChuck Lever TP_STRUCT__entry( 287511ba52eSChuck Lever __field(unsigned long, state) 288511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 289511ba52eSChuck Lever ), 290511ba52eSChuck Lever 291511ba52eSChuck Lever TP_fast_assign( 292511ba52eSChuck Lever __entry->state = clp->cl_state; 29378c14b38SJoe Perches __assign_str(hostname, clp->cl_hostname); 294511ba52eSChuck Lever ), 295511ba52eSChuck Lever 296511ba52eSChuck Lever TP_printk( 297511ba52eSChuck Lever "hostname=%s clp state=%s", __get_str(hostname), 298511ba52eSChuck Lever show_nfs4_clp_state(__entry->state) 299511ba52eSChuck Lever ) 300511ba52eSChuck Lever ) 301511ba52eSChuck Lever 302511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr_failed, 303511ba52eSChuck Lever TP_PROTO( 304511ba52eSChuck Lever const struct nfs_client *clp, 305511ba52eSChuck Lever const char *section, 306511ba52eSChuck Lever int status 307511ba52eSChuck Lever ), 308511ba52eSChuck Lever 309511ba52eSChuck Lever TP_ARGS(clp, section, status), 310511ba52eSChuck Lever 311511ba52eSChuck Lever TP_STRUCT__entry( 312511ba52eSChuck Lever __field(unsigned long, error) 313511ba52eSChuck Lever __field(unsigned long, state) 314511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 315511ba52eSChuck Lever __string(section, section) 316511ba52eSChuck Lever ), 317511ba52eSChuck Lever 318511ba52eSChuck Lever TP_fast_assign( 319118b6292STrond Myklebust __entry->error = status < 0 ? -status : 0; 320511ba52eSChuck Lever __entry->state = clp->cl_state; 321511ba52eSChuck Lever __assign_str(hostname, clp->cl_hostname); 322511ba52eSChuck Lever __assign_str(section, section); 323511ba52eSChuck Lever ), 324511ba52eSChuck Lever 325511ba52eSChuck Lever TP_printk( 326511ba52eSChuck Lever "hostname=%s clp state=%s error=%ld (%s) section=%s", 327511ba52eSChuck Lever __get_str(hostname), 328511ba52eSChuck Lever show_nfs4_clp_state(__entry->state), -__entry->error, 3298791545eSChuck Lever show_nfs4_status(__entry->error), __get_str(section) 330511ba52eSChuck Lever 331511ba52eSChuck Lever ) 332511ba52eSChuck Lever ) 333511ba52eSChuck Lever 334da934ae0STrond Myklebust TRACE_EVENT(nfs4_xdr_bad_operation, 335da934ae0STrond Myklebust TP_PROTO( 336da934ae0STrond Myklebust const struct xdr_stream *xdr, 337da934ae0STrond Myklebust u32 op, 338da934ae0STrond Myklebust u32 expected 339da934ae0STrond Myklebust ), 340da934ae0STrond Myklebust 341da934ae0STrond Myklebust TP_ARGS(xdr, op, expected), 342da934ae0STrond Myklebust 343da934ae0STrond Myklebust TP_STRUCT__entry( 344da934ae0STrond Myklebust __field(unsigned int, task_id) 345da934ae0STrond Myklebust __field(unsigned int, client_id) 346da934ae0STrond Myklebust __field(u32, xid) 347da934ae0STrond Myklebust __field(u32, op) 348da934ae0STrond Myklebust __field(u32, expected) 349da934ae0STrond Myklebust ), 350da934ae0STrond Myklebust 351da934ae0STrond Myklebust TP_fast_assign( 352da934ae0STrond Myklebust const struct rpc_rqst *rqstp = xdr->rqst; 353da934ae0STrond Myklebust const struct rpc_task *task = rqstp->rq_task; 354da934ae0STrond Myklebust 355da934ae0STrond Myklebust __entry->task_id = task->tk_pid; 356da934ae0STrond Myklebust __entry->client_id = task->tk_client->cl_clid; 357da934ae0STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 358da934ae0STrond Myklebust __entry->op = op; 359da934ae0STrond Myklebust __entry->expected = expected; 360da934ae0STrond Myklebust ), 361da934ae0STrond Myklebust 362b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 363b4776a34SChuck Lever " xid=0x%08x operation=%u, expected=%u", 364da934ae0STrond Myklebust __entry->task_id, __entry->client_id, __entry->xid, 365da934ae0STrond Myklebust __entry->op, __entry->expected 366da934ae0STrond Myklebust ) 367da934ae0STrond Myklebust ); 368da934ae0STrond Myklebust 3693d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs4_xdr_event, 370f23f6584SChuck Lever TP_PROTO( 37162a92ba9SChuck Lever const struct xdr_stream *xdr, 372f23f6584SChuck Lever u32 op, 373118b6292STrond Myklebust u32 error 374f23f6584SChuck Lever ), 375f23f6584SChuck Lever 37662a92ba9SChuck Lever TP_ARGS(xdr, op, error), 377f23f6584SChuck Lever 378f23f6584SChuck Lever TP_STRUCT__entry( 37962a92ba9SChuck Lever __field(unsigned int, task_id) 38062a92ba9SChuck Lever __field(unsigned int, client_id) 38162a92ba9SChuck Lever __field(u32, xid) 382f23f6584SChuck Lever __field(u32, op) 38396650e2eSChuck Lever __field(unsigned long, error) 384f23f6584SChuck Lever ), 385f23f6584SChuck Lever 386f23f6584SChuck Lever TP_fast_assign( 38762a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 38862a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 38962a92ba9SChuck Lever 39062a92ba9SChuck Lever __entry->task_id = task->tk_pid; 39162a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 39262a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 393f23f6584SChuck Lever __entry->op = op; 39496650e2eSChuck Lever __entry->error = error; 395f23f6584SChuck Lever ), 396f23f6584SChuck Lever 397b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 398b4776a34SChuck Lever " xid=0x%08x error=%ld (%s) operation=%u", 39962a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 4008791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 40196650e2eSChuck Lever __entry->op 402f23f6584SChuck Lever ) 403f23f6584SChuck Lever ); 4043d66bae1STrond Myklebust #define DEFINE_NFS4_XDR_EVENT(name) \ 4053d66bae1STrond Myklebust DEFINE_EVENT(nfs4_xdr_event, name, \ 4063d66bae1STrond Myklebust TP_PROTO( \ 4073d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 4083d66bae1STrond Myklebust u32 op, \ 4093d66bae1STrond Myklebust u32 error \ 4103d66bae1STrond Myklebust ), \ 4113d66bae1STrond Myklebust TP_ARGS(xdr, op, error)) 4123d66bae1STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_status); 413eb3d58c6STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_bad_filehandle); 414f23f6584SChuck Lever 4152bb50aabSChuck Lever DECLARE_EVENT_CLASS(nfs4_cb_error_class, 4162bb50aabSChuck Lever TP_PROTO( 4172bb50aabSChuck Lever __be32 xid, 4182bb50aabSChuck Lever u32 cb_ident 4192bb50aabSChuck Lever ), 4202bb50aabSChuck Lever 4212bb50aabSChuck Lever TP_ARGS(xid, cb_ident), 4222bb50aabSChuck Lever 4232bb50aabSChuck Lever TP_STRUCT__entry( 4242bb50aabSChuck Lever __field(u32, xid) 4252bb50aabSChuck Lever __field(u32, cbident) 4262bb50aabSChuck Lever ), 4272bb50aabSChuck Lever 4282bb50aabSChuck Lever TP_fast_assign( 4292bb50aabSChuck Lever __entry->xid = be32_to_cpu(xid); 4302bb50aabSChuck Lever __entry->cbident = cb_ident; 4312bb50aabSChuck Lever ), 4322bb50aabSChuck Lever 4332bb50aabSChuck Lever TP_printk( 4342bb50aabSChuck Lever "xid=0x%08x cb_ident=0x%08x", 4352bb50aabSChuck Lever __entry->xid, __entry->cbident 4362bb50aabSChuck Lever ) 4372bb50aabSChuck Lever ); 4382bb50aabSChuck Lever 4392bb50aabSChuck Lever #define DEFINE_CB_ERROR_EVENT(name) \ 4402bb50aabSChuck Lever DEFINE_EVENT(nfs4_cb_error_class, nfs_cb_##name, \ 4412bb50aabSChuck Lever TP_PROTO( \ 4422bb50aabSChuck Lever __be32 xid, \ 4432bb50aabSChuck Lever u32 cb_ident \ 4442bb50aabSChuck Lever ), \ 4452bb50aabSChuck Lever TP_ARGS(xid, cb_ident)) 4462bb50aabSChuck Lever 4472bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(no_clp); 4482bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(badprinc); 4492bb50aabSChuck Lever 45042113a75STrond Myklebust DECLARE_EVENT_CLASS(nfs4_open_event, 45142113a75STrond Myklebust TP_PROTO( 45242113a75STrond Myklebust const struct nfs_open_context *ctx, 45342113a75STrond Myklebust int flags, 45442113a75STrond Myklebust int error 45542113a75STrond Myklebust ), 45642113a75STrond Myklebust 45742113a75STrond Myklebust TP_ARGS(ctx, flags, error), 45842113a75STrond Myklebust 45942113a75STrond Myklebust TP_STRUCT__entry( 46096650e2eSChuck Lever __field(unsigned long, error) 4619d2d48bbSChuck Lever __field(unsigned long, flags) 4629d2d48bbSChuck Lever __field(unsigned long, fmode) 46342113a75STrond Myklebust __field(dev_t, dev) 46442113a75STrond Myklebust __field(u32, fhandle) 46542113a75STrond Myklebust __field(u64, fileid) 46642113a75STrond Myklebust __field(u64, dir) 46742113a75STrond Myklebust __string(name, ctx->dentry->d_name.name) 46848c9579aSOlga Kornievskaia __field(int, stateid_seq) 46948c9579aSOlga Kornievskaia __field(u32, stateid_hash) 47048c9579aSOlga Kornievskaia __field(int, openstateid_seq) 47148c9579aSOlga Kornievskaia __field(u32, openstateid_hash) 47242113a75STrond Myklebust ), 47342113a75STrond Myklebust 47442113a75STrond Myklebust TP_fast_assign( 47542113a75STrond Myklebust const struct nfs4_state *state = ctx->state; 47642113a75STrond Myklebust const struct inode *inode = NULL; 47742113a75STrond Myklebust 47896650e2eSChuck Lever __entry->error = -error; 47942113a75STrond Myklebust __entry->flags = flags; 4809d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 48142113a75STrond Myklebust __entry->dev = ctx->dentry->d_sb->s_dev; 48248c9579aSOlga Kornievskaia if (!IS_ERR_OR_NULL(state)) { 48342113a75STrond Myklebust inode = state->inode; 48448c9579aSOlga Kornievskaia __entry->stateid_seq = 48548c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 48648c9579aSOlga Kornievskaia __entry->stateid_hash = 48748c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 48848c9579aSOlga Kornievskaia __entry->openstateid_seq = 48948c9579aSOlga Kornievskaia be32_to_cpu(state->open_stateid.seqid); 49048c9579aSOlga Kornievskaia __entry->openstateid_hash = 49148c9579aSOlga Kornievskaia nfs_stateid_hash(&state->open_stateid); 49248c9579aSOlga Kornievskaia } else { 49348c9579aSOlga Kornievskaia __entry->stateid_seq = 0; 49448c9579aSOlga Kornievskaia __entry->stateid_hash = 0; 49548c9579aSOlga Kornievskaia __entry->openstateid_seq = 0; 49648c9579aSOlga Kornievskaia __entry->openstateid_hash = 0; 49748c9579aSOlga Kornievskaia } 49842113a75STrond Myklebust if (inode != NULL) { 49942113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 50042113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 50142113a75STrond Myklebust } else { 50242113a75STrond Myklebust __entry->fileid = 0; 50342113a75STrond Myklebust __entry->fhandle = 0; 50442113a75STrond Myklebust } 5052b0143b5SDavid Howells __entry->dir = NFS_FILEID(d_inode(ctx->dentry->d_parent)); 50642113a75STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 50742113a75STrond Myklebust ), 50842113a75STrond Myklebust 50942113a75STrond Myklebust TP_printk( 5109d2d48bbSChuck Lever "error=%ld (%s) flags=%lu (%s) fmode=%s " 51142113a75STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 51248c9579aSOlga Kornievskaia "name=%02x:%02x:%llu/%s stateid=%d:0x%08x " 51348c9579aSOlga Kornievskaia "openstateid=%d:0x%08x", 51496650e2eSChuck Lever -__entry->error, 5158791545eSChuck Lever show_nfs4_status(__entry->error), 51642113a75STrond Myklebust __entry->flags, 5179d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5189d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 51942113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 52042113a75STrond Myklebust (unsigned long long)__entry->fileid, 52142113a75STrond Myklebust __entry->fhandle, 52242113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 52342113a75STrond Myklebust (unsigned long long)__entry->dir, 52448c9579aSOlga Kornievskaia __get_str(name), 52548c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 52648c9579aSOlga Kornievskaia __entry->openstateid_seq, __entry->openstateid_hash 52742113a75STrond Myklebust ) 52842113a75STrond Myklebust ); 52942113a75STrond Myklebust 53042113a75STrond Myklebust #define DEFINE_NFS4_OPEN_EVENT(name) \ 53142113a75STrond Myklebust DEFINE_EVENT(nfs4_open_event, name, \ 53242113a75STrond Myklebust TP_PROTO( \ 53342113a75STrond Myklebust const struct nfs_open_context *ctx, \ 53442113a75STrond Myklebust int flags, \ 53542113a75STrond Myklebust int error \ 53642113a75STrond Myklebust ), \ 53742113a75STrond Myklebust TP_ARGS(ctx, flags, error)) 53842113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_reclaim); 53942113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_expired); 54042113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_file); 54142113a75STrond Myklebust 5429759b0fbSOlga Kornievskaia TRACE_EVENT(nfs4_cached_open, 5439759b0fbSOlga Kornievskaia TP_PROTO( 5449759b0fbSOlga Kornievskaia const struct nfs4_state *state 5459759b0fbSOlga Kornievskaia ), 5469759b0fbSOlga Kornievskaia TP_ARGS(state), 5479759b0fbSOlga Kornievskaia TP_STRUCT__entry( 5489759b0fbSOlga Kornievskaia __field(dev_t, dev) 5499759b0fbSOlga Kornievskaia __field(u32, fhandle) 5509759b0fbSOlga Kornievskaia __field(u64, fileid) 5519759b0fbSOlga Kornievskaia __field(unsigned int, fmode) 5529759b0fbSOlga Kornievskaia __field(int, stateid_seq) 5539759b0fbSOlga Kornievskaia __field(u32, stateid_hash) 5549759b0fbSOlga Kornievskaia ), 5559759b0fbSOlga Kornievskaia 5569759b0fbSOlga Kornievskaia TP_fast_assign( 5579759b0fbSOlga Kornievskaia const struct inode *inode = state->inode; 5589759b0fbSOlga Kornievskaia 5599759b0fbSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 5609759b0fbSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 5619759b0fbSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 5629759b0fbSOlga Kornievskaia __entry->fmode = (__force unsigned int)state->state; 5639759b0fbSOlga Kornievskaia __entry->stateid_seq = 5649759b0fbSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 5659759b0fbSOlga Kornievskaia __entry->stateid_hash = 5669759b0fbSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 5679759b0fbSOlga Kornievskaia ), 5689759b0fbSOlga Kornievskaia 5699759b0fbSOlga Kornievskaia TP_printk( 5709759b0fbSOlga Kornievskaia "fmode=%s fileid=%02x:%02x:%llu " 5719759b0fbSOlga Kornievskaia "fhandle=0x%08x stateid=%d:0x%08x", 5729d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 5739759b0fbSOlga Kornievskaia "closed", 5749759b0fbSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 5759759b0fbSOlga Kornievskaia (unsigned long long)__entry->fileid, 5769759b0fbSOlga Kornievskaia __entry->fhandle, 5779759b0fbSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 5789759b0fbSOlga Kornievskaia ) 5799759b0fbSOlga Kornievskaia ); 5809759b0fbSOlga Kornievskaia 58142113a75STrond Myklebust TRACE_EVENT(nfs4_close, 58242113a75STrond Myklebust TP_PROTO( 58342113a75STrond Myklebust const struct nfs4_state *state, 58442113a75STrond Myklebust const struct nfs_closeargs *args, 58542113a75STrond Myklebust const struct nfs_closeres *res, 58642113a75STrond Myklebust int error 58742113a75STrond Myklebust ), 58842113a75STrond Myklebust 58942113a75STrond Myklebust TP_ARGS(state, args, res, error), 59042113a75STrond Myklebust 59142113a75STrond Myklebust TP_STRUCT__entry( 59242113a75STrond Myklebust __field(dev_t, dev) 59342113a75STrond Myklebust __field(u32, fhandle) 59442113a75STrond Myklebust __field(u64, fileid) 59542113a75STrond Myklebust __field(unsigned int, fmode) 59696650e2eSChuck Lever __field(unsigned long, error) 59748c9579aSOlga Kornievskaia __field(int, stateid_seq) 59848c9579aSOlga Kornievskaia __field(u32, stateid_hash) 59942113a75STrond Myklebust ), 60042113a75STrond Myklebust 60142113a75STrond Myklebust TP_fast_assign( 60242113a75STrond Myklebust const struct inode *inode = state->inode; 60342113a75STrond Myklebust 60442113a75STrond Myklebust __entry->dev = inode->i_sb->s_dev; 60542113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 60642113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 60742113a75STrond Myklebust __entry->fmode = (__force unsigned int)state->state; 608118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 60948c9579aSOlga Kornievskaia __entry->stateid_seq = 61048c9579aSOlga Kornievskaia be32_to_cpu(args->stateid.seqid); 61148c9579aSOlga Kornievskaia __entry->stateid_hash = 61248c9579aSOlga Kornievskaia nfs_stateid_hash(&args->stateid); 61342113a75STrond Myklebust ), 61442113a75STrond Myklebust 61542113a75STrond Myklebust TP_printk( 61696650e2eSChuck Lever "error=%ld (%s) fmode=%s fileid=%02x:%02x:%llu " 61748c9579aSOlga Kornievskaia "fhandle=0x%08x openstateid=%d:0x%08x", 61896650e2eSChuck Lever -__entry->error, 6198791545eSChuck Lever show_nfs4_status(__entry->error), 6209d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 62142113a75STrond Myklebust "closed", 62242113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 62342113a75STrond Myklebust (unsigned long long)__entry->fileid, 62448c9579aSOlga Kornievskaia __entry->fhandle, 62548c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 62642113a75STrond Myklebust ) 62742113a75STrond Myklebust ); 62842113a75STrond Myklebust 629d1b748a5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_lock_event, 630d1b748a5STrond Myklebust TP_PROTO( 631d1b748a5STrond Myklebust const struct file_lock *request, 632d1b748a5STrond Myklebust const struct nfs4_state *state, 633d1b748a5STrond Myklebust int cmd, 634d1b748a5STrond Myklebust int error 635d1b748a5STrond Myklebust ), 636d1b748a5STrond Myklebust 637d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error), 638d1b748a5STrond Myklebust 639d1b748a5STrond Myklebust TP_STRUCT__entry( 64096650e2eSChuck Lever __field(unsigned long, error) 6419d2d48bbSChuck Lever __field(unsigned long, cmd) 6429d2d48bbSChuck Lever __field(unsigned long, type) 643d1b748a5STrond Myklebust __field(loff_t, start) 644d1b748a5STrond Myklebust __field(loff_t, end) 645d1b748a5STrond Myklebust __field(dev_t, dev) 646d1b748a5STrond Myklebust __field(u32, fhandle) 647d1b748a5STrond Myklebust __field(u64, fileid) 64848c9579aSOlga Kornievskaia __field(int, stateid_seq) 64948c9579aSOlga Kornievskaia __field(u32, stateid_hash) 650d1b748a5STrond Myklebust ), 651d1b748a5STrond Myklebust 652d1b748a5STrond Myklebust TP_fast_assign( 653d1b748a5STrond Myklebust const struct inode *inode = state->inode; 654d1b748a5STrond Myklebust 655118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 656d1b748a5STrond Myklebust __entry->cmd = cmd; 657d1b748a5STrond Myklebust __entry->type = request->fl_type; 658d1b748a5STrond Myklebust __entry->start = request->fl_start; 659d1b748a5STrond Myklebust __entry->end = request->fl_end; 660d1b748a5STrond Myklebust __entry->dev = inode->i_sb->s_dev; 661d1b748a5STrond Myklebust __entry->fileid = NFS_FILEID(inode); 662d1b748a5STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 66348c9579aSOlga Kornievskaia __entry->stateid_seq = 66448c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 66548c9579aSOlga Kornievskaia __entry->stateid_hash = 66648c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 667d1b748a5STrond Myklebust ), 668d1b748a5STrond Myklebust 669d1b748a5STrond Myklebust TP_printk( 67096650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 67148c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 67248c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 67396650e2eSChuck Lever -__entry->error, 6748791545eSChuck Lever show_nfs4_status(__entry->error), 6759d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 6769d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 677d1b748a5STrond Myklebust (long long)__entry->start, 678d1b748a5STrond Myklebust (long long)__entry->end, 679d1b748a5STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 680d1b748a5STrond Myklebust (unsigned long long)__entry->fileid, 68148c9579aSOlga Kornievskaia __entry->fhandle, 68248c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 683d1b748a5STrond Myklebust ) 684d1b748a5STrond Myklebust ); 685d1b748a5STrond Myklebust 686d1b748a5STrond Myklebust #define DEFINE_NFS4_LOCK_EVENT(name) \ 687d1b748a5STrond Myklebust DEFINE_EVENT(nfs4_lock_event, name, \ 688d1b748a5STrond Myklebust TP_PROTO( \ 689d1b748a5STrond Myklebust const struct file_lock *request, \ 690d1b748a5STrond Myklebust const struct nfs4_state *state, \ 691d1b748a5STrond Myklebust int cmd, \ 692d1b748a5STrond Myklebust int error \ 693d1b748a5STrond Myklebust ), \ 694d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error)) 695d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock); 696d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_unlock); 697d1b748a5STrond Myklebust 69848c9579aSOlga Kornievskaia TRACE_EVENT(nfs4_set_lock, 69948c9579aSOlga Kornievskaia TP_PROTO( 70048c9579aSOlga Kornievskaia const struct file_lock *request, 70148c9579aSOlga Kornievskaia const struct nfs4_state *state, 70248c9579aSOlga Kornievskaia const nfs4_stateid *lockstateid, 70348c9579aSOlga Kornievskaia int cmd, 70448c9579aSOlga Kornievskaia int error 70548c9579aSOlga Kornievskaia ), 70648c9579aSOlga Kornievskaia 70748c9579aSOlga Kornievskaia TP_ARGS(request, state, lockstateid, cmd, error), 70848c9579aSOlga Kornievskaia 70948c9579aSOlga Kornievskaia TP_STRUCT__entry( 71096650e2eSChuck Lever __field(unsigned long, error) 7119d2d48bbSChuck Lever __field(unsigned long, cmd) 7129d2d48bbSChuck Lever __field(unsigned long, type) 71348c9579aSOlga Kornievskaia __field(loff_t, start) 71448c9579aSOlga Kornievskaia __field(loff_t, end) 71548c9579aSOlga Kornievskaia __field(dev_t, dev) 71648c9579aSOlga Kornievskaia __field(u32, fhandle) 71748c9579aSOlga Kornievskaia __field(u64, fileid) 71848c9579aSOlga Kornievskaia __field(int, stateid_seq) 71948c9579aSOlga Kornievskaia __field(u32, stateid_hash) 72048c9579aSOlga Kornievskaia __field(int, lockstateid_seq) 72148c9579aSOlga Kornievskaia __field(u32, lockstateid_hash) 72248c9579aSOlga Kornievskaia ), 72348c9579aSOlga Kornievskaia 72448c9579aSOlga Kornievskaia TP_fast_assign( 72548c9579aSOlga Kornievskaia const struct inode *inode = state->inode; 72648c9579aSOlga Kornievskaia 727118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 72848c9579aSOlga Kornievskaia __entry->cmd = cmd; 72948c9579aSOlga Kornievskaia __entry->type = request->fl_type; 73048c9579aSOlga Kornievskaia __entry->start = request->fl_start; 73148c9579aSOlga Kornievskaia __entry->end = request->fl_end; 73248c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 73348c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 73448c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 73548c9579aSOlga Kornievskaia __entry->stateid_seq = 73648c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 73748c9579aSOlga Kornievskaia __entry->stateid_hash = 73848c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 73948c9579aSOlga Kornievskaia __entry->lockstateid_seq = 74048c9579aSOlga Kornievskaia be32_to_cpu(lockstateid->seqid); 74148c9579aSOlga Kornievskaia __entry->lockstateid_hash = 74248c9579aSOlga Kornievskaia nfs_stateid_hash(lockstateid); 74348c9579aSOlga Kornievskaia ), 74448c9579aSOlga Kornievskaia 74548c9579aSOlga Kornievskaia TP_printk( 74696650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 74748c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 74848c9579aSOlga Kornievskaia "stateid=%d:0x%08x lockstateid=%d:0x%08x", 74996650e2eSChuck Lever -__entry->error, 7508791545eSChuck Lever show_nfs4_status(__entry->error), 7519d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 7529d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 75348c9579aSOlga Kornievskaia (long long)__entry->start, 75448c9579aSOlga Kornievskaia (long long)__entry->end, 75548c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 75648c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 75748c9579aSOlga Kornievskaia __entry->fhandle, 75848c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 75948c9579aSOlga Kornievskaia __entry->lockstateid_seq, __entry->lockstateid_hash 76048c9579aSOlga Kornievskaia ) 76148c9579aSOlga Kornievskaia ); 76248c9579aSOlga Kornievskaia 76321f86d2dSChuck Lever TRACE_DEFINE_ENUM(LK_STATE_IN_USE); 76421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_DELEGATED_STATE); 76521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_OPEN_STATE); 76621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDONLY_STATE); 76721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_WRONLY_STATE); 76821f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDWR_STATE); 76921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_REBOOT); 77021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_NOGRACE); 77121f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_POSIX_LOCKS); 77221f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECOVERY_FAILED); 77321f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_MAY_NOTIFY_LOCK); 77421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_CHANGE_WAIT); 77521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_DST_SSC_COPY_STATE); 77621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_SRC_SSC_COPY_STATE); 77721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_SRV_SSC_COPY_STATE); 77821f86d2dSChuck Lever 77921f86d2dSChuck Lever #define show_nfs4_state_flags(flags) \ 78021f86d2dSChuck Lever __print_flags(flags, "|", \ 78121f86d2dSChuck Lever { LK_STATE_IN_USE, "IN_USE" }, \ 78221f86d2dSChuck Lever { NFS_DELEGATED_STATE, "DELEGATED" }, \ 78321f86d2dSChuck Lever { NFS_OPEN_STATE, "OPEN" }, \ 78421f86d2dSChuck Lever { NFS_O_RDONLY_STATE, "O_RDONLY" }, \ 78521f86d2dSChuck Lever { NFS_O_WRONLY_STATE, "O_WRONLY" }, \ 78621f86d2dSChuck Lever { NFS_O_RDWR_STATE, "O_RDWR" }, \ 78721f86d2dSChuck Lever { NFS_STATE_RECLAIM_REBOOT, "RECLAIM_REBOOT" }, \ 78821f86d2dSChuck Lever { NFS_STATE_RECLAIM_NOGRACE, "RECLAIM_NOGRACE" }, \ 78921f86d2dSChuck Lever { NFS_STATE_POSIX_LOCKS, "POSIX_LOCKS" }, \ 79021f86d2dSChuck Lever { NFS_STATE_RECOVERY_FAILED, "RECOVERY_FAILED" }, \ 79121f86d2dSChuck Lever { NFS_STATE_MAY_NOTIFY_LOCK, "MAY_NOTIFY_LOCK" }, \ 79221f86d2dSChuck Lever { NFS_STATE_CHANGE_WAIT, "CHANGE_WAIT" }, \ 79321f86d2dSChuck Lever { NFS_CLNT_DST_SSC_COPY_STATE, "CLNT_DST_SSC_COPY" }, \ 79421f86d2dSChuck Lever { NFS_CLNT_SRC_SSC_COPY_STATE, "CLNT_SRC_SSC_COPY" }, \ 79521f86d2dSChuck Lever { NFS_SRV_SSC_COPY_STATE, "SRV_SSC_COPY" }) 79621f86d2dSChuck Lever 79721f86d2dSChuck Lever #define show_nfs4_lock_flags(flags) \ 79821f86d2dSChuck Lever __print_flags(flags, "|", \ 79921f86d2dSChuck Lever { BIT(NFS_LOCK_INITIALIZED), "INITIALIZED" }, \ 80021f86d2dSChuck Lever { BIT(NFS_LOCK_LOST), "LOST" }) 80121f86d2dSChuck Lever 80221f86d2dSChuck Lever TRACE_EVENT(nfs4_state_lock_reclaim, 80321f86d2dSChuck Lever TP_PROTO( 80421f86d2dSChuck Lever const struct nfs4_state *state, 80521f86d2dSChuck Lever const struct nfs4_lock_state *lock 80621f86d2dSChuck Lever ), 80721f86d2dSChuck Lever 80821f86d2dSChuck Lever TP_ARGS(state, lock), 80921f86d2dSChuck Lever 81021f86d2dSChuck Lever TP_STRUCT__entry( 81121f86d2dSChuck Lever __field(dev_t, dev) 81221f86d2dSChuck Lever __field(u32, fhandle) 81321f86d2dSChuck Lever __field(u64, fileid) 81421f86d2dSChuck Lever __field(unsigned long, state_flags) 81521f86d2dSChuck Lever __field(unsigned long, lock_flags) 81621f86d2dSChuck Lever __field(int, stateid_seq) 81721f86d2dSChuck Lever __field(u32, stateid_hash) 81821f86d2dSChuck Lever ), 81921f86d2dSChuck Lever 82021f86d2dSChuck Lever TP_fast_assign( 82121f86d2dSChuck Lever const struct inode *inode = state->inode; 82221f86d2dSChuck Lever 82321f86d2dSChuck Lever __entry->dev = inode->i_sb->s_dev; 82421f86d2dSChuck Lever __entry->fileid = NFS_FILEID(inode); 82521f86d2dSChuck Lever __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 82621f86d2dSChuck Lever __entry->state_flags = state->flags; 82721f86d2dSChuck Lever __entry->lock_flags = lock->ls_flags; 82821f86d2dSChuck Lever __entry->stateid_seq = 82921f86d2dSChuck Lever be32_to_cpu(state->stateid.seqid); 83021f86d2dSChuck Lever __entry->stateid_hash = 83121f86d2dSChuck Lever nfs_stateid_hash(&state->stateid); 83221f86d2dSChuck Lever ), 83321f86d2dSChuck Lever 83421f86d2dSChuck Lever TP_printk( 83521f86d2dSChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 83621f86d2dSChuck Lever "stateid=%d:0x%08x state_flags=%s lock_flags=%s", 83721f86d2dSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 83821f86d2dSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 83921f86d2dSChuck Lever __entry->stateid_seq, __entry->stateid_hash, 84021f86d2dSChuck Lever show_nfs4_state_flags(__entry->state_flags), 84121f86d2dSChuck Lever show_nfs4_lock_flags(__entry->lock_flags) 84221f86d2dSChuck Lever ) 84321f86d2dSChuck Lever ) 84421f86d2dSChuck Lever 845ca8acf8dSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_set_delegation_event, 846ca8acf8dSTrond Myklebust TP_PROTO( 847ca8acf8dSTrond Myklebust const struct inode *inode, 848ca8acf8dSTrond Myklebust fmode_t fmode 849ca8acf8dSTrond Myklebust ), 850ca8acf8dSTrond Myklebust 851ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode), 852ca8acf8dSTrond Myklebust 853ca8acf8dSTrond Myklebust TP_STRUCT__entry( 854ca8acf8dSTrond Myklebust __field(dev_t, dev) 855ca8acf8dSTrond Myklebust __field(u32, fhandle) 856ca8acf8dSTrond Myklebust __field(u64, fileid) 857ca8acf8dSTrond Myklebust __field(unsigned int, fmode) 858ca8acf8dSTrond Myklebust ), 859ca8acf8dSTrond Myklebust 860ca8acf8dSTrond Myklebust TP_fast_assign( 861ca8acf8dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 862ca8acf8dSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 863ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 864ca8acf8dSTrond Myklebust __entry->fmode = (__force unsigned int)fmode; 865ca8acf8dSTrond Myklebust ), 866ca8acf8dSTrond Myklebust 867ca8acf8dSTrond Myklebust TP_printk( 868ca8acf8dSTrond Myklebust "fmode=%s fileid=%02x:%02x:%llu fhandle=0x%08x", 8699d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 870ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 871ca8acf8dSTrond Myklebust (unsigned long long)__entry->fileid, 872ca8acf8dSTrond Myklebust __entry->fhandle 873ca8acf8dSTrond Myklebust ) 874ca8acf8dSTrond Myklebust ); 875ca8acf8dSTrond Myklebust #define DEFINE_NFS4_SET_DELEGATION_EVENT(name) \ 876ca8acf8dSTrond Myklebust DEFINE_EVENT(nfs4_set_delegation_event, name, \ 877ca8acf8dSTrond Myklebust TP_PROTO( \ 878ca8acf8dSTrond Myklebust const struct inode *inode, \ 879ca8acf8dSTrond Myklebust fmode_t fmode \ 880ca8acf8dSTrond Myklebust ), \ 881ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode)) 882ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_set_delegation); 883ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_reclaim_delegation); 884ca8acf8dSTrond Myklebust 885ca8acf8dSTrond Myklebust TRACE_EVENT(nfs4_delegreturn_exit, 886ca8acf8dSTrond Myklebust TP_PROTO( 887ca8acf8dSTrond Myklebust const struct nfs4_delegreturnargs *args, 888ca8acf8dSTrond Myklebust const struct nfs4_delegreturnres *res, 889ca8acf8dSTrond Myklebust int error 890ca8acf8dSTrond Myklebust ), 891ca8acf8dSTrond Myklebust 892ca8acf8dSTrond Myklebust TP_ARGS(args, res, error), 893ca8acf8dSTrond Myklebust 894ca8acf8dSTrond Myklebust TP_STRUCT__entry( 895ca8acf8dSTrond Myklebust __field(dev_t, dev) 896ca8acf8dSTrond Myklebust __field(u32, fhandle) 89796650e2eSChuck Lever __field(unsigned long, error) 89848c9579aSOlga Kornievskaia __field(int, stateid_seq) 89948c9579aSOlga Kornievskaia __field(u32, stateid_hash) 900ca8acf8dSTrond Myklebust ), 901ca8acf8dSTrond Myklebust 902ca8acf8dSTrond Myklebust TP_fast_assign( 903ca8acf8dSTrond Myklebust __entry->dev = res->server->s_dev; 904ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(args->fhandle); 905118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 90648c9579aSOlga Kornievskaia __entry->stateid_seq = 90748c9579aSOlga Kornievskaia be32_to_cpu(args->stateid->seqid); 90848c9579aSOlga Kornievskaia __entry->stateid_hash = 90948c9579aSOlga Kornievskaia nfs_stateid_hash(args->stateid); 910ca8acf8dSTrond Myklebust ), 911ca8acf8dSTrond Myklebust 912ca8acf8dSTrond Myklebust TP_printk( 91396650e2eSChuck Lever "error=%ld (%s) dev=%02x:%02x fhandle=0x%08x " 91448c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 91596650e2eSChuck Lever -__entry->error, 9168791545eSChuck Lever show_nfs4_status(__entry->error), 917ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 91848c9579aSOlga Kornievskaia __entry->fhandle, 91948c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 920ca8acf8dSTrond Myklebust ) 921ca8acf8dSTrond Myklebust ); 922ca8acf8dSTrond Myklebust 92308cb47faSTrond Myklebust #ifdef CONFIG_NFS_V4_1 92408cb47faSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_test_stateid_event, 92508cb47faSTrond Myklebust TP_PROTO( 92608cb47faSTrond Myklebust const struct nfs4_state *state, 92708cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, 92808cb47faSTrond Myklebust int error 92908cb47faSTrond Myklebust ), 93008cb47faSTrond Myklebust 93108cb47faSTrond Myklebust TP_ARGS(state, lsp, error), 93208cb47faSTrond Myklebust 93308cb47faSTrond Myklebust TP_STRUCT__entry( 93496650e2eSChuck Lever __field(unsigned long, error) 93508cb47faSTrond Myklebust __field(dev_t, dev) 93608cb47faSTrond Myklebust __field(u32, fhandle) 93708cb47faSTrond Myklebust __field(u64, fileid) 93848c9579aSOlga Kornievskaia __field(int, stateid_seq) 93948c9579aSOlga Kornievskaia __field(u32, stateid_hash) 94008cb47faSTrond Myklebust ), 94108cb47faSTrond Myklebust 94208cb47faSTrond Myklebust TP_fast_assign( 94308cb47faSTrond Myklebust const struct inode *inode = state->inode; 94408cb47faSTrond Myklebust 945118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 94608cb47faSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 94708cb47faSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 94808cb47faSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 94948c9579aSOlga Kornievskaia __entry->stateid_seq = 95048c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 95148c9579aSOlga Kornievskaia __entry->stateid_hash = 95248c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 95308cb47faSTrond Myklebust ), 95408cb47faSTrond Myklebust 95508cb47faSTrond Myklebust TP_printk( 95696650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 95748c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 95896650e2eSChuck Lever -__entry->error, 9598791545eSChuck Lever show_nfs4_status(__entry->error), 96008cb47faSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 96108cb47faSTrond Myklebust (unsigned long long)__entry->fileid, 96248c9579aSOlga Kornievskaia __entry->fhandle, 96348c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 96408cb47faSTrond Myklebust ) 96508cb47faSTrond Myklebust ); 96608cb47faSTrond Myklebust 96708cb47faSTrond Myklebust #define DEFINE_NFS4_TEST_STATEID_EVENT(name) \ 96808cb47faSTrond Myklebust DEFINE_EVENT(nfs4_test_stateid_event, name, \ 96908cb47faSTrond Myklebust TP_PROTO( \ 97008cb47faSTrond Myklebust const struct nfs4_state *state, \ 97108cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, \ 97208cb47faSTrond Myklebust int error \ 97308cb47faSTrond Myklebust ), \ 97408cb47faSTrond Myklebust TP_ARGS(state, lsp, error)) 97508cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid); 97608cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid); 97708cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid); 97808cb47faSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 97908cb47faSTrond Myklebust 980078ea3dfSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_lookup_event, 981078ea3dfSTrond Myklebust TP_PROTO( 982078ea3dfSTrond Myklebust const struct inode *dir, 983078ea3dfSTrond Myklebust const struct qstr *name, 984078ea3dfSTrond Myklebust int error 985078ea3dfSTrond Myklebust ), 986078ea3dfSTrond Myklebust 987078ea3dfSTrond Myklebust TP_ARGS(dir, name, error), 988078ea3dfSTrond Myklebust 989078ea3dfSTrond Myklebust TP_STRUCT__entry( 990078ea3dfSTrond Myklebust __field(dev_t, dev) 99196650e2eSChuck Lever __field(unsigned long, error) 992078ea3dfSTrond Myklebust __field(u64, dir) 993078ea3dfSTrond Myklebust __string(name, name->name) 994078ea3dfSTrond Myklebust ), 995078ea3dfSTrond Myklebust 996078ea3dfSTrond Myklebust TP_fast_assign( 997078ea3dfSTrond Myklebust __entry->dev = dir->i_sb->s_dev; 998078ea3dfSTrond Myklebust __entry->dir = NFS_FILEID(dir); 99996650e2eSChuck Lever __entry->error = -error; 1000078ea3dfSTrond Myklebust __assign_str(name, name->name); 1001078ea3dfSTrond Myklebust ), 1002078ea3dfSTrond Myklebust 1003078ea3dfSTrond Myklebust TP_printk( 100496650e2eSChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 100596650e2eSChuck Lever -__entry->error, 10068791545eSChuck Lever show_nfs4_status(__entry->error), 1007078ea3dfSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1008078ea3dfSTrond Myklebust (unsigned long long)__entry->dir, 1009078ea3dfSTrond Myklebust __get_str(name) 1010078ea3dfSTrond Myklebust ) 1011078ea3dfSTrond Myklebust ); 1012078ea3dfSTrond Myklebust 1013078ea3dfSTrond Myklebust #define DEFINE_NFS4_LOOKUP_EVENT(name) \ 1014078ea3dfSTrond Myklebust DEFINE_EVENT(nfs4_lookup_event, name, \ 1015078ea3dfSTrond Myklebust TP_PROTO( \ 1016078ea3dfSTrond Myklebust const struct inode *dir, \ 1017078ea3dfSTrond Myklebust const struct qstr *name, \ 1018078ea3dfSTrond Myklebust int error \ 1019078ea3dfSTrond Myklebust ), \ 1020078ea3dfSTrond Myklebust TP_ARGS(dir, name, error)) 1021078ea3dfSTrond Myklebust 1022078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_lookup); 1023078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_symlink); 1024078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mkdir); 1025078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mknod); 1026078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove); 1027078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations); 1028078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo); 1029078ea3dfSTrond Myklebust 10305b5faaf6SJeff Layton TRACE_EVENT(nfs4_lookupp, 10315b5faaf6SJeff Layton TP_PROTO( 10325b5faaf6SJeff Layton const struct inode *inode, 10335b5faaf6SJeff Layton int error 10345b5faaf6SJeff Layton ), 10355b5faaf6SJeff Layton 10365b5faaf6SJeff Layton TP_ARGS(inode, error), 10375b5faaf6SJeff Layton 10385b5faaf6SJeff Layton TP_STRUCT__entry( 10395b5faaf6SJeff Layton __field(dev_t, dev) 10405b5faaf6SJeff Layton __field(u64, ino) 104196650e2eSChuck Lever __field(unsigned long, error) 10425b5faaf6SJeff Layton ), 10435b5faaf6SJeff Layton 10445b5faaf6SJeff Layton TP_fast_assign( 10455b5faaf6SJeff Layton __entry->dev = inode->i_sb->s_dev; 10465b5faaf6SJeff Layton __entry->ino = NFS_FILEID(inode); 1047118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 10485b5faaf6SJeff Layton ), 10495b5faaf6SJeff Layton 10505b5faaf6SJeff Layton TP_printk( 105196650e2eSChuck Lever "error=%ld (%s) inode=%02x:%02x:%llu", 105296650e2eSChuck Lever -__entry->error, 10538791545eSChuck Lever show_nfs4_status(__entry->error), 10545b5faaf6SJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 10555b5faaf6SJeff Layton (unsigned long long)__entry->ino 10565b5faaf6SJeff Layton ) 10575b5faaf6SJeff Layton ); 10585b5faaf6SJeff Layton 1059fbc6f7c2STrond Myklebust TRACE_EVENT(nfs4_rename, 1060fbc6f7c2STrond Myklebust TP_PROTO( 1061fbc6f7c2STrond Myklebust const struct inode *olddir, 1062fbc6f7c2STrond Myklebust const struct qstr *oldname, 1063fbc6f7c2STrond Myklebust const struct inode *newdir, 1064fbc6f7c2STrond Myklebust const struct qstr *newname, 1065fbc6f7c2STrond Myklebust int error 1066fbc6f7c2STrond Myklebust ), 1067fbc6f7c2STrond Myklebust 1068fbc6f7c2STrond Myklebust TP_ARGS(olddir, oldname, newdir, newname, error), 1069fbc6f7c2STrond Myklebust 1070fbc6f7c2STrond Myklebust TP_STRUCT__entry( 1071fbc6f7c2STrond Myklebust __field(dev_t, dev) 107296650e2eSChuck Lever __field(unsigned long, error) 1073fbc6f7c2STrond Myklebust __field(u64, olddir) 1074fbc6f7c2STrond Myklebust __string(oldname, oldname->name) 1075fbc6f7c2STrond Myklebust __field(u64, newdir) 1076fbc6f7c2STrond Myklebust __string(newname, newname->name) 1077fbc6f7c2STrond Myklebust ), 1078fbc6f7c2STrond Myklebust 1079fbc6f7c2STrond Myklebust TP_fast_assign( 1080fbc6f7c2STrond Myklebust __entry->dev = olddir->i_sb->s_dev; 1081fbc6f7c2STrond Myklebust __entry->olddir = NFS_FILEID(olddir); 1082fbc6f7c2STrond Myklebust __entry->newdir = NFS_FILEID(newdir); 1083118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1084fbc6f7c2STrond Myklebust __assign_str(oldname, oldname->name); 1085fbc6f7c2STrond Myklebust __assign_str(newname, newname->name); 1086fbc6f7c2STrond Myklebust ), 1087fbc6f7c2STrond Myklebust 1088fbc6f7c2STrond Myklebust TP_printk( 108996650e2eSChuck Lever "error=%ld (%s) oldname=%02x:%02x:%llu/%s " 1090fbc6f7c2STrond Myklebust "newname=%02x:%02x:%llu/%s", 109196650e2eSChuck Lever -__entry->error, 10928791545eSChuck Lever show_nfs4_status(__entry->error), 1093fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1094fbc6f7c2STrond Myklebust (unsigned long long)__entry->olddir, 1095fbc6f7c2STrond Myklebust __get_str(oldname), 1096fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1097fbc6f7c2STrond Myklebust (unsigned long long)__entry->newdir, 1098fbc6f7c2STrond Myklebust __get_str(newname) 1099fbc6f7c2STrond Myklebust ) 1100fbc6f7c2STrond Myklebust ); 1101fbc6f7c2STrond Myklebust 1102c1578b76STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_event, 1103c1578b76STrond Myklebust TP_PROTO( 1104c1578b76STrond Myklebust const struct inode *inode, 1105c1578b76STrond Myklebust int error 1106c1578b76STrond Myklebust ), 1107c1578b76STrond Myklebust 1108c1578b76STrond Myklebust TP_ARGS(inode, error), 1109c1578b76STrond Myklebust 1110c1578b76STrond Myklebust TP_STRUCT__entry( 1111c1578b76STrond Myklebust __field(dev_t, dev) 1112c1578b76STrond Myklebust __field(u32, fhandle) 1113c1578b76STrond Myklebust __field(u64, fileid) 111496650e2eSChuck Lever __field(unsigned long, error) 1115c1578b76STrond Myklebust ), 1116c1578b76STrond Myklebust 1117c1578b76STrond Myklebust TP_fast_assign( 1118c1578b76STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1119c1578b76STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1120c1578b76STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 112196650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 1122c1578b76STrond Myklebust ), 1123c1578b76STrond Myklebust 1124c1578b76STrond Myklebust TP_printk( 112596650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x", 112696650e2eSChuck Lever -__entry->error, 11278791545eSChuck Lever show_nfs4_status(__entry->error), 1128c1578b76STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1129c1578b76STrond Myklebust (unsigned long long)__entry->fileid, 1130c1578b76STrond Myklebust __entry->fhandle 1131c1578b76STrond Myklebust ) 1132c1578b76STrond Myklebust ); 1133c1578b76STrond Myklebust 1134c1578b76STrond Myklebust #define DEFINE_NFS4_INODE_EVENT(name) \ 1135c1578b76STrond Myklebust DEFINE_EVENT(nfs4_inode_event, name, \ 1136c1578b76STrond Myklebust TP_PROTO( \ 1137c1578b76STrond Myklebust const struct inode *inode, \ 1138c1578b76STrond Myklebust int error \ 1139c1578b76STrond Myklebust ), \ 1140c1578b76STrond Myklebust TP_ARGS(inode, error)) 1141c1578b76STrond Myklebust 1142c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_access); 1143c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readlink); 1144c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readdir); 1145c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_acl); 1146c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_acl); 1147c1578b76STrond Myklebust #ifdef CONFIG_NFS_V4_SECURITY_LABEL 1148c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label); 1149c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label); 1150c1578b76STrond Myklebust #endif /* CONFIG_NFS_V4_SECURITY_LABEL */ 115148c9579aSOlga Kornievskaia 115248c9579aSOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_inode_stateid_event, 115348c9579aSOlga Kornievskaia TP_PROTO( 115448c9579aSOlga Kornievskaia const struct inode *inode, 115548c9579aSOlga Kornievskaia const nfs4_stateid *stateid, 115648c9579aSOlga Kornievskaia int error 115748c9579aSOlga Kornievskaia ), 115848c9579aSOlga Kornievskaia 115948c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error), 116048c9579aSOlga Kornievskaia 116148c9579aSOlga Kornievskaia TP_STRUCT__entry( 116248c9579aSOlga Kornievskaia __field(dev_t, dev) 116348c9579aSOlga Kornievskaia __field(u32, fhandle) 116448c9579aSOlga Kornievskaia __field(u64, fileid) 116596650e2eSChuck Lever __field(unsigned long, error) 116648c9579aSOlga Kornievskaia __field(int, stateid_seq) 116748c9579aSOlga Kornievskaia __field(u32, stateid_hash) 116848c9579aSOlga Kornievskaia ), 116948c9579aSOlga Kornievskaia 117048c9579aSOlga Kornievskaia TP_fast_assign( 117148c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 117248c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 117348c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1174118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 117548c9579aSOlga Kornievskaia __entry->stateid_seq = 117648c9579aSOlga Kornievskaia be32_to_cpu(stateid->seqid); 117748c9579aSOlga Kornievskaia __entry->stateid_hash = 117848c9579aSOlga Kornievskaia nfs_stateid_hash(stateid); 117948c9579aSOlga Kornievskaia ), 118048c9579aSOlga Kornievskaia 118148c9579aSOlga Kornievskaia TP_printk( 118296650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 118348c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 118496650e2eSChuck Lever -__entry->error, 11858791545eSChuck Lever show_nfs4_status(__entry->error), 118648c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 118748c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 118848c9579aSOlga Kornievskaia __entry->fhandle, 118948c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 119048c9579aSOlga Kornievskaia ) 119148c9579aSOlga Kornievskaia ); 119248c9579aSOlga Kornievskaia 119348c9579aSOlga Kornievskaia #define DEFINE_NFS4_INODE_STATEID_EVENT(name) \ 119448c9579aSOlga Kornievskaia DEFINE_EVENT(nfs4_inode_stateid_event, name, \ 119548c9579aSOlga Kornievskaia TP_PROTO( \ 119648c9579aSOlga Kornievskaia const struct inode *inode, \ 119748c9579aSOlga Kornievskaia const nfs4_stateid *stateid, \ 119848c9579aSOlga Kornievskaia int error \ 119948c9579aSOlga Kornievskaia ), \ 120048c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error)) 120148c9579aSOlga Kornievskaia 120248c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr); 120348c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn); 1204ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update); 1205ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update_wait); 1206b4868b44SBenjamin Coddington DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_close_stateid_update_wait); 1207c1578b76STrond Myklebust 1208b5f875a9STrond Myklebust DECLARE_EVENT_CLASS(nfs4_getattr_event, 1209b5f875a9STrond Myklebust TP_PROTO( 1210b5f875a9STrond Myklebust const struct nfs_server *server, 1211b5f875a9STrond Myklebust const struct nfs_fh *fhandle, 1212b5f875a9STrond Myklebust const struct nfs_fattr *fattr, 1213b5f875a9STrond Myklebust int error 1214b5f875a9STrond Myklebust ), 1215b5f875a9STrond Myklebust 1216b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error), 1217b5f875a9STrond Myklebust 1218b5f875a9STrond Myklebust TP_STRUCT__entry( 1219b5f875a9STrond Myklebust __field(dev_t, dev) 1220b5f875a9STrond Myklebust __field(u32, fhandle) 1221b5f875a9STrond Myklebust __field(u64, fileid) 1222b5f875a9STrond Myklebust __field(unsigned int, valid) 122396650e2eSChuck Lever __field(unsigned long, error) 1224b5f875a9STrond Myklebust ), 1225b5f875a9STrond Myklebust 1226b5f875a9STrond Myklebust TP_fast_assign( 1227b5f875a9STrond Myklebust __entry->dev = server->s_dev; 1228b5f875a9STrond Myklebust __entry->valid = fattr->valid; 1229b5f875a9STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 1230b5f875a9STrond Myklebust __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0; 1231118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1232b5f875a9STrond Myklebust ), 1233b5f875a9STrond Myklebust 1234b5f875a9STrond Myklebust TP_printk( 123596650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1236b5f875a9STrond Myklebust "valid=%s", 123796650e2eSChuck Lever -__entry->error, 12388791545eSChuck Lever show_nfs4_status(__entry->error), 1239b5f875a9STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1240b5f875a9STrond Myklebust (unsigned long long)__entry->fileid, 1241b5f875a9STrond Myklebust __entry->fhandle, 1242b5f875a9STrond Myklebust show_nfs_fattr_flags(__entry->valid) 1243b5f875a9STrond Myklebust ) 1244b5f875a9STrond Myklebust ); 1245b5f875a9STrond Myklebust 1246b5f875a9STrond Myklebust #define DEFINE_NFS4_GETATTR_EVENT(name) \ 1247b5f875a9STrond Myklebust DEFINE_EVENT(nfs4_getattr_event, name, \ 1248b5f875a9STrond Myklebust TP_PROTO( \ 1249b5f875a9STrond Myklebust const struct nfs_server *server, \ 1250b5f875a9STrond Myklebust const struct nfs_fh *fhandle, \ 1251b5f875a9STrond Myklebust const struct nfs_fattr *fattr, \ 1252b5f875a9STrond Myklebust int error \ 1253b5f875a9STrond Myklebust ), \ 1254b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error)) 1255b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr); 1256b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); 1257b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); 1258b5f875a9STrond Myklebust 12597cd14861STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_callback_event, 12607cd14861STrond Myklebust TP_PROTO( 12617cd14861STrond Myklebust const struct nfs_client *clp, 12627cd14861STrond Myklebust const struct nfs_fh *fhandle, 12637cd14861STrond Myklebust const struct inode *inode, 12647cd14861STrond Myklebust int error 12657cd14861STrond Myklebust ), 12667cd14861STrond Myklebust 12677cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error), 12687cd14861STrond Myklebust 12697cd14861STrond Myklebust TP_STRUCT__entry( 127096650e2eSChuck Lever __field(unsigned long, error) 12717cd14861STrond Myklebust __field(dev_t, dev) 12727cd14861STrond Myklebust __field(u32, fhandle) 12737cd14861STrond Myklebust __field(u64, fileid) 12743944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 12757cd14861STrond Myklebust ), 12767cd14861STrond Myklebust 12777cd14861STrond Myklebust TP_fast_assign( 1278118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 12797cd14861STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 12802edaead6STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 12817cd14861STrond Myklebust __entry->fileid = NFS_FILEID(inode); 12827cd14861STrond Myklebust __entry->dev = inode->i_sb->s_dev; 12837cd14861STrond Myklebust } else { 12847cd14861STrond Myklebust __entry->fileid = 0; 12857cd14861STrond Myklebust __entry->dev = 0; 12867cd14861STrond Myklebust } 128778c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 12887cd14861STrond Myklebust ), 12897cd14861STrond Myklebust 12907cd14861STrond Myklebust TP_printk( 129196650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 12927cd14861STrond Myklebust "dstaddr=%s", 129396650e2eSChuck Lever -__entry->error, 12948791545eSChuck Lever show_nfs4_status(__entry->error), 12957cd14861STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 12967cd14861STrond Myklebust (unsigned long long)__entry->fileid, 12977cd14861STrond Myklebust __entry->fhandle, 12987cd14861STrond Myklebust __get_str(dstaddr) 12997cd14861STrond Myklebust ) 13007cd14861STrond Myklebust ); 13017cd14861STrond Myklebust 13027cd14861STrond Myklebust #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \ 13037cd14861STrond Myklebust DEFINE_EVENT(nfs4_inode_callback_event, name, \ 13047cd14861STrond Myklebust TP_PROTO( \ 13057cd14861STrond Myklebust const struct nfs_client *clp, \ 13067cd14861STrond Myklebust const struct nfs_fh *fhandle, \ 13077cd14861STrond Myklebust const struct inode *inode, \ 13087cd14861STrond Myklebust int error \ 13097cd14861STrond Myklebust ), \ 13107cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error)) 13117cd14861STrond Myklebust DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr); 13127cd14861STrond Myklebust 1313e07db907STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event, 1314e07db907STrond Myklebust TP_PROTO( 1315e07db907STrond Myklebust const struct nfs_client *clp, 1316e07db907STrond Myklebust const struct nfs_fh *fhandle, 1317e07db907STrond Myklebust const struct inode *inode, 1318e07db907STrond Myklebust const nfs4_stateid *stateid, 1319e07db907STrond Myklebust int error 1320e07db907STrond Myklebust ), 1321e07db907STrond Myklebust 1322e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error), 1323e07db907STrond Myklebust 1324e07db907STrond Myklebust TP_STRUCT__entry( 132596650e2eSChuck Lever __field(unsigned long, error) 1326e07db907STrond Myklebust __field(dev_t, dev) 1327e07db907STrond Myklebust __field(u32, fhandle) 1328e07db907STrond Myklebust __field(u64, fileid) 13293944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 1330e07db907STrond Myklebust __field(int, stateid_seq) 1331e07db907STrond Myklebust __field(u32, stateid_hash) 1332e07db907STrond Myklebust ), 1333e07db907STrond Myklebust 1334e07db907STrond Myklebust TP_fast_assign( 1335118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1336e07db907STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 13372a534a74STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 1338e07db907STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1339e07db907STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1340e07db907STrond Myklebust } else { 1341e07db907STrond Myklebust __entry->fileid = 0; 1342e07db907STrond Myklebust __entry->dev = 0; 1343e07db907STrond Myklebust } 134478c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 1345e07db907STrond Myklebust __entry->stateid_seq = 1346e07db907STrond Myklebust be32_to_cpu(stateid->seqid); 1347e07db907STrond Myklebust __entry->stateid_hash = 1348e07db907STrond Myklebust nfs_stateid_hash(stateid); 1349e07db907STrond Myklebust ), 1350e07db907STrond Myklebust 1351e07db907STrond Myklebust TP_printk( 135296650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1353e07db907STrond Myklebust "stateid=%d:0x%08x dstaddr=%s", 135496650e2eSChuck Lever -__entry->error, 13558791545eSChuck Lever show_nfs4_status(__entry->error), 1356e07db907STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1357e07db907STrond Myklebust (unsigned long long)__entry->fileid, 1358e07db907STrond Myklebust __entry->fhandle, 1359e07db907STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 1360e07db907STrond Myklebust __get_str(dstaddr) 1361e07db907STrond Myklebust ) 1362e07db907STrond Myklebust ); 1363e07db907STrond Myklebust 1364e07db907STrond Myklebust #define DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(name) \ 1365e07db907STrond Myklebust DEFINE_EVENT(nfs4_inode_stateid_callback_event, name, \ 1366e07db907STrond Myklebust TP_PROTO( \ 1367e07db907STrond Myklebust const struct nfs_client *clp, \ 1368e07db907STrond Myklebust const struct nfs_fh *fhandle, \ 1369e07db907STrond Myklebust const struct inode *inode, \ 1370e07db907STrond Myklebust const nfs4_stateid *stateid, \ 1371e07db907STrond Myklebust int error \ 1372e07db907STrond Myklebust ), \ 1373e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error)) 1374e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_recall); 1375e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_layoutrecall_file); 13767cd14861STrond Myklebust 13771f2d30b5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_idmap_event, 13781f2d30b5STrond Myklebust TP_PROTO( 13791f2d30b5STrond Myklebust const char *name, 13801f2d30b5STrond Myklebust int len, 13811f2d30b5STrond Myklebust u32 id, 13821f2d30b5STrond Myklebust int error 13831f2d30b5STrond Myklebust ), 13841f2d30b5STrond Myklebust 13851f2d30b5STrond Myklebust TP_ARGS(name, len, id, error), 13861f2d30b5STrond Myklebust 13871f2d30b5STrond Myklebust TP_STRUCT__entry( 138896650e2eSChuck Lever __field(unsigned long, error) 13891f2d30b5STrond Myklebust __field(u32, id) 13901f2d30b5STrond Myklebust __dynamic_array(char, name, len > 0 ? len + 1 : 1) 13911f2d30b5STrond Myklebust ), 13921f2d30b5STrond Myklebust 13931f2d30b5STrond Myklebust TP_fast_assign( 13941f2d30b5STrond Myklebust if (len < 0) 13951f2d30b5STrond Myklebust len = 0; 13961f2d30b5STrond Myklebust __entry->error = error < 0 ? error : 0; 13971f2d30b5STrond Myklebust __entry->id = id; 1398752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), name, len); 1399752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 14001f2d30b5STrond Myklebust ), 14011f2d30b5STrond Myklebust 14021f2d30b5STrond Myklebust TP_printk( 140396650e2eSChuck Lever "error=%ld (%s) id=%u name=%s", 14048791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 14051f2d30b5STrond Myklebust __entry->id, 14061f2d30b5STrond Myklebust __get_str(name) 14071f2d30b5STrond Myklebust ) 14081f2d30b5STrond Myklebust ); 14091f2d30b5STrond Myklebust #define DEFINE_NFS4_IDMAP_EVENT(name) \ 14101f2d30b5STrond Myklebust DEFINE_EVENT(nfs4_idmap_event, name, \ 14111f2d30b5STrond Myklebust TP_PROTO( \ 14121f2d30b5STrond Myklebust const char *name, \ 14131f2d30b5STrond Myklebust int len, \ 14141f2d30b5STrond Myklebust u32 id, \ 14151f2d30b5STrond Myklebust int error \ 14161f2d30b5STrond Myklebust ), \ 14171f2d30b5STrond Myklebust TP_ARGS(name, len, id, error)) 14181f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_name_to_uid); 14191f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid); 14201f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name); 14211f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); 14221f2d30b5STrond Myklebust 142354898f70STrond Myklebust #ifdef CONFIG_NFS_V4_1 142454898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) \ 142554898f70STrond Myklebust (lseg ? nfs_stateid_hash(&lseg->pls_layout->plh_stateid) : 0) 142654898f70STrond Myklebust #else 142754898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) (0) 142854898f70STrond Myklebust #endif 142954898f70STrond Myklebust 1430cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_read_event, 1431cc668ab3STrond Myklebust TP_PROTO( 1432d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1433cc668ab3STrond Myklebust int error 1434cc668ab3STrond Myklebust ), 1435cc668ab3STrond Myklebust 1436d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1437cc668ab3STrond Myklebust 1438cc668ab3STrond Myklebust TP_STRUCT__entry( 1439cc668ab3STrond Myklebust __field(dev_t, dev) 1440cc668ab3STrond Myklebust __field(u32, fhandle) 1441cc668ab3STrond Myklebust __field(u64, fileid) 1442cc668ab3STrond Myklebust __field(loff_t, offset) 144325925b00STrond Myklebust __field(u32, arg_count) 144425925b00STrond Myklebust __field(u32, res_count) 144596650e2eSChuck Lever __field(unsigned long, error) 144648c9579aSOlga Kornievskaia __field(int, stateid_seq) 144748c9579aSOlga Kornievskaia __field(u32, stateid_hash) 144854898f70STrond Myklebust __field(int, layoutstateid_seq) 144954898f70STrond Myklebust __field(u32, layoutstateid_hash) 1450cc668ab3STrond Myklebust ), 1451cc668ab3STrond Myklebust 1452cc668ab3STrond Myklebust TP_fast_assign( 1453d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 145425925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 145525925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 145625925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 145748c9579aSOlga Kornievskaia const struct nfs4_state *state = 145848c9579aSOlga Kornievskaia hdr->args.context->state; 145954898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 146025925b00STrond Myklebust 1461cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 146225925b00STrond Myklebust __entry->fileid = nfsi->fileid; 146325925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1464d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 146525925b00STrond Myklebust __entry->arg_count = hdr->args.count; 146625925b00STrond Myklebust __entry->res_count = hdr->res.count; 146796650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 146848c9579aSOlga Kornievskaia __entry->stateid_seq = 146948c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 147048c9579aSOlga Kornievskaia __entry->stateid_hash = 147148c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 147254898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 147354898f70STrond Myklebust __entry->layoutstateid_hash = 147454898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1475cc668ab3STrond Myklebust ), 1476cc668ab3STrond Myklebust 1477cc668ab3STrond Myklebust TP_printk( 147896650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 147954898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 148054898f70STrond Myklebust "layoutstateid=%d:0x%08x", 148196650e2eSChuck Lever -__entry->error, 14828791545eSChuck Lever show_nfs4_status(__entry->error), 1483cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1484cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1485cc668ab3STrond Myklebust __entry->fhandle, 1486cc668ab3STrond Myklebust (long long)__entry->offset, 148725925b00STrond Myklebust __entry->arg_count, __entry->res_count, 148854898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 148954898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1490cc668ab3STrond Myklebust ) 1491cc668ab3STrond Myklebust ); 1492cc668ab3STrond Myklebust #define DEFINE_NFS4_READ_EVENT(name) \ 1493cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_read_event, name, \ 1494cc668ab3STrond Myklebust TP_PROTO( \ 1495d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1496cc668ab3STrond Myklebust int error \ 1497cc668ab3STrond Myklebust ), \ 1498d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1499cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_read); 1500cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1501cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read); 1502cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1503cc668ab3STrond Myklebust 1504cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_write_event, 1505cc668ab3STrond Myklebust TP_PROTO( 1506d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1507cc668ab3STrond Myklebust int error 1508cc668ab3STrond Myklebust ), 1509cc668ab3STrond Myklebust 1510d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1511cc668ab3STrond Myklebust 1512cc668ab3STrond Myklebust TP_STRUCT__entry( 1513cc668ab3STrond Myklebust __field(dev_t, dev) 1514cc668ab3STrond Myklebust __field(u32, fhandle) 1515cc668ab3STrond Myklebust __field(u64, fileid) 1516cc668ab3STrond Myklebust __field(loff_t, offset) 151725925b00STrond Myklebust __field(u32, arg_count) 151825925b00STrond Myklebust __field(u32, res_count) 151996650e2eSChuck Lever __field(unsigned long, error) 152048c9579aSOlga Kornievskaia __field(int, stateid_seq) 152148c9579aSOlga Kornievskaia __field(u32, stateid_hash) 152254898f70STrond Myklebust __field(int, layoutstateid_seq) 152354898f70STrond Myklebust __field(u32, layoutstateid_hash) 1524cc668ab3STrond Myklebust ), 1525cc668ab3STrond Myklebust 1526cc668ab3STrond Myklebust TP_fast_assign( 1527d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 152825925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 152925925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 153025925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 153148c9579aSOlga Kornievskaia const struct nfs4_state *state = 153248c9579aSOlga Kornievskaia hdr->args.context->state; 153354898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 153425925b00STrond Myklebust 1535cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 153625925b00STrond Myklebust __entry->fileid = nfsi->fileid; 153725925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1538d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 153925925b00STrond Myklebust __entry->arg_count = hdr->args.count; 154025925b00STrond Myklebust __entry->res_count = hdr->res.count; 154196650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 154248c9579aSOlga Kornievskaia __entry->stateid_seq = 154348c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 154448c9579aSOlga Kornievskaia __entry->stateid_hash = 154548c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 154654898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 154754898f70STrond Myklebust __entry->layoutstateid_hash = 154854898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1549cc668ab3STrond Myklebust ), 1550cc668ab3STrond Myklebust 1551cc668ab3STrond Myklebust TP_printk( 155296650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 155354898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 155454898f70STrond Myklebust "layoutstateid=%d:0x%08x", 155596650e2eSChuck Lever -__entry->error, 15568791545eSChuck Lever show_nfs4_status(__entry->error), 1557cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1558cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1559cc668ab3STrond Myklebust __entry->fhandle, 1560cc668ab3STrond Myklebust (long long)__entry->offset, 156125925b00STrond Myklebust __entry->arg_count, __entry->res_count, 156254898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 156354898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1564cc668ab3STrond Myklebust ) 1565cc668ab3STrond Myklebust ); 1566cc668ab3STrond Myklebust 1567cc668ab3STrond Myklebust #define DEFINE_NFS4_WRITE_EVENT(name) \ 1568cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_write_event, name, \ 1569cc668ab3STrond Myklebust TP_PROTO( \ 1570d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1571cc668ab3STrond Myklebust int error \ 1572cc668ab3STrond Myklebust ), \ 1573d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1574cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_write); 1575cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1576cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write); 1577cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1578cc668ab3STrond Myklebust 1579cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_commit_event, 1580cc668ab3STrond Myklebust TP_PROTO( 1581cc668ab3STrond Myklebust const struct nfs_commit_data *data, 1582cc668ab3STrond Myklebust int error 1583cc668ab3STrond Myklebust ), 1584cc668ab3STrond Myklebust 1585cc668ab3STrond Myklebust TP_ARGS(data, error), 1586cc668ab3STrond Myklebust 1587cc668ab3STrond Myklebust TP_STRUCT__entry( 1588cc668ab3STrond Myklebust __field(dev_t, dev) 1589cc668ab3STrond Myklebust __field(u32, fhandle) 1590cc668ab3STrond Myklebust __field(u64, fileid) 159196650e2eSChuck Lever __field(unsigned long, error) 159225925b00STrond Myklebust __field(loff_t, offset) 159325925b00STrond Myklebust __field(u32, count) 159454898f70STrond Myklebust __field(int, layoutstateid_seq) 159554898f70STrond Myklebust __field(u32, layoutstateid_hash) 1596cc668ab3STrond Myklebust ), 1597cc668ab3STrond Myklebust 1598cc668ab3STrond Myklebust TP_fast_assign( 1599cc668ab3STrond Myklebust const struct inode *inode = data->inode; 160025925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 160125925b00STrond Myklebust const struct nfs_fh *fh = data->args.fh ? 160225925b00STrond Myklebust data->args.fh : &nfsi->fh; 160354898f70STrond Myklebust const struct pnfs_layout_segment *lseg = data->lseg; 160425925b00STrond Myklebust 1605cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 160625925b00STrond Myklebust __entry->fileid = nfsi->fileid; 160725925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1608cc668ab3STrond Myklebust __entry->offset = data->args.offset; 1609cc668ab3STrond Myklebust __entry->count = data->args.count; 161025925b00STrond Myklebust __entry->error = error < 0 ? -error : 0; 161154898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 161254898f70STrond Myklebust __entry->layoutstateid_hash = 161354898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1614cc668ab3STrond Myklebust ), 1615cc668ab3STrond Myklebust 1616cc668ab3STrond Myklebust TP_printk( 161796650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 161854898f70STrond Myklebust "offset=%lld count=%u layoutstateid=%d:0x%08x", 161996650e2eSChuck Lever -__entry->error, 16208791545eSChuck Lever show_nfs4_status(__entry->error), 1621cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1622cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1623cc668ab3STrond Myklebust __entry->fhandle, 1624cc668ab3STrond Myklebust (long long)__entry->offset, 162554898f70STrond Myklebust __entry->count, 162654898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1627cc668ab3STrond Myklebust ) 1628cc668ab3STrond Myklebust ); 1629cc668ab3STrond Myklebust #define DEFINE_NFS4_COMMIT_EVENT(name) \ 1630cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_commit_event, name, \ 1631cc668ab3STrond Myklebust TP_PROTO( \ 1632cc668ab3STrond Myklebust const struct nfs_commit_data *data, \ 1633cc668ab3STrond Myklebust int error \ 1634cc668ab3STrond Myklebust ), \ 1635cc668ab3STrond Myklebust TP_ARGS(data, error)) 1636cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_commit); 1637cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1638cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds); 16391037e6eaSTrond Myklebust 16401037e6eaSTrond Myklebust TRACE_EVENT(nfs4_layoutget, 16411037e6eaSTrond Myklebust TP_PROTO( 16421037e6eaSTrond Myklebust const struct nfs_open_context *ctx, 16431037e6eaSTrond Myklebust const struct pnfs_layout_range *args, 16441037e6eaSTrond Myklebust const struct pnfs_layout_range *res, 164548c9579aSOlga Kornievskaia const nfs4_stateid *layout_stateid, 16461037e6eaSTrond Myklebust int error 16471037e6eaSTrond Myklebust ), 16481037e6eaSTrond Myklebust 164948c9579aSOlga Kornievskaia TP_ARGS(ctx, args, res, layout_stateid, error), 16501037e6eaSTrond Myklebust 16511037e6eaSTrond Myklebust TP_STRUCT__entry( 16521037e6eaSTrond Myklebust __field(dev_t, dev) 16531037e6eaSTrond Myklebust __field(u32, fhandle) 16541037e6eaSTrond Myklebust __field(u64, fileid) 16551037e6eaSTrond Myklebust __field(u32, iomode) 16561037e6eaSTrond Myklebust __field(u64, offset) 16571037e6eaSTrond Myklebust __field(u64, count) 165896650e2eSChuck Lever __field(unsigned long, error) 165948c9579aSOlga Kornievskaia __field(int, stateid_seq) 166048c9579aSOlga Kornievskaia __field(u32, stateid_hash) 166148c9579aSOlga Kornievskaia __field(int, layoutstateid_seq) 166248c9579aSOlga Kornievskaia __field(u32, layoutstateid_hash) 16631037e6eaSTrond Myklebust ), 16641037e6eaSTrond Myklebust 16651037e6eaSTrond Myklebust TP_fast_assign( 16662b0143b5SDavid Howells const struct inode *inode = d_inode(ctx->dentry); 166748c9579aSOlga Kornievskaia const struct nfs4_state *state = ctx->state; 16681037e6eaSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 16691037e6eaSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 16701037e6eaSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 16711037e6eaSTrond Myklebust __entry->iomode = args->iomode; 16721037e6eaSTrond Myklebust __entry->offset = args->offset; 16731037e6eaSTrond Myklebust __entry->count = args->length; 1674118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 167548c9579aSOlga Kornievskaia __entry->stateid_seq = 167648c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 167748c9579aSOlga Kornievskaia __entry->stateid_hash = 167848c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 167948c9579aSOlga Kornievskaia if (!error) { 168048c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 168148c9579aSOlga Kornievskaia be32_to_cpu(layout_stateid->seqid); 168248c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 168348c9579aSOlga Kornievskaia nfs_stateid_hash(layout_stateid); 168448c9579aSOlga Kornievskaia } else { 168548c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 0; 168648c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 0; 168748c9579aSOlga Kornievskaia } 16881037e6eaSTrond Myklebust ), 16891037e6eaSTrond Myklebust 16901037e6eaSTrond Myklebust TP_printk( 169196650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 169248c9579aSOlga Kornievskaia "iomode=%s offset=%llu count=%llu stateid=%d:0x%08x " 169348c9579aSOlga Kornievskaia "layoutstateid=%d:0x%08x", 169496650e2eSChuck Lever -__entry->error, 16958791545eSChuck Lever show_nfs4_status(__entry->error), 16961037e6eaSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 16971037e6eaSTrond Myklebust (unsigned long long)__entry->fileid, 16981037e6eaSTrond Myklebust __entry->fhandle, 16998791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 17001037e6eaSTrond Myklebust (unsigned long long)__entry->offset, 170148c9579aSOlga Kornievskaia (unsigned long long)__entry->count, 170248c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 170348c9579aSOlga Kornievskaia __entry->layoutstateid_seq, __entry->layoutstateid_hash 17041037e6eaSTrond Myklebust ) 17051037e6eaSTrond Myklebust ); 17061037e6eaSTrond Myklebust 170748c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit); 170848c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn); 1709a19b4785STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn_on_close); 1710638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layouterror); 1711638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutstats); 17121037e6eaSTrond Myklebust 17135b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_UNKNOWN); 17145b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NO_PNFS); 17155b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RD_ZEROLEN); 17165b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_MDSTHRESH); 17175b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NOMEM); 17185b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BULK_RECALL); 17195b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_IO_TEST_FAIL); 17205b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_FOUND_CACHED); 17215b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETURN); 17225b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BLOCKED); 17235b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_INVALID_OPEN); 17245b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETRY); 17255b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET); 1726d5b9216fSTrond Myklebust TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_EXIT); 17275b2095d0SChuck Lever 17289a4bf31dSJeff Layton #define show_pnfs_update_layout_reason(reason) \ 17299a4bf31dSJeff Layton __print_symbolic(reason, \ 17309a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_UNKNOWN, "unknown" }, \ 17319a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NO_PNFS, "no pnfs" }, \ 17329a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RD_ZEROLEN, "read+zerolen" }, \ 17339a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_MDSTHRESH, "mdsthresh" }, \ 17349a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NOMEM, "nomem" }, \ 17359a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BULK_RECALL, "bulk recall" }, \ 17369a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_IO_TEST_FAIL, "io test fail" }, \ 17379a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_FOUND_CACHED, "found cached" }, \ 17389a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RETURN, "layoutreturn" }, \ 17399a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BLOCKED, "layouts blocked" }, \ 1740183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_INVALID_OPEN, "invalid open" }, \ 1741183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_RETRY, "retrying" }, \ 1742d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET, "sent layoutget" }, \ 1743d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_EXIT, "exit" }) 17449a4bf31dSJeff Layton 17459a4bf31dSJeff Layton TRACE_EVENT(pnfs_update_layout, 17469a4bf31dSJeff Layton TP_PROTO(struct inode *inode, 17479a4bf31dSJeff Layton loff_t pos, 17489a4bf31dSJeff Layton u64 count, 17499a4bf31dSJeff Layton enum pnfs_iomode iomode, 1750f4848303STrond Myklebust struct pnfs_layout_hdr *lo, 1751183d9e7bSJeff Layton struct pnfs_layout_segment *lseg, 17529a4bf31dSJeff Layton enum pnfs_update_layout_reason reason 17539a4bf31dSJeff Layton ), 1754183d9e7bSJeff Layton TP_ARGS(inode, pos, count, iomode, lo, lseg, reason), 17559a4bf31dSJeff Layton TP_STRUCT__entry( 17569a4bf31dSJeff Layton __field(dev_t, dev) 17579a4bf31dSJeff Layton __field(u64, fileid) 17589a4bf31dSJeff Layton __field(u32, fhandle) 17599a4bf31dSJeff Layton __field(loff_t, pos) 17609a4bf31dSJeff Layton __field(u64, count) 17619a4bf31dSJeff Layton __field(enum pnfs_iomode, iomode) 1762f4848303STrond Myklebust __field(int, layoutstateid_seq) 1763f4848303STrond Myklebust __field(u32, layoutstateid_hash) 1764183d9e7bSJeff Layton __field(long, lseg) 17659a4bf31dSJeff Layton __field(enum pnfs_update_layout_reason, reason) 17669a4bf31dSJeff Layton ), 17679a4bf31dSJeff Layton TP_fast_assign( 17689a4bf31dSJeff Layton __entry->dev = inode->i_sb->s_dev; 17699a4bf31dSJeff Layton __entry->fileid = NFS_FILEID(inode); 17709a4bf31dSJeff Layton __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 17719a4bf31dSJeff Layton __entry->pos = pos; 17729a4bf31dSJeff Layton __entry->count = count; 17739a4bf31dSJeff Layton __entry->iomode = iomode; 17749a4bf31dSJeff Layton __entry->reason = reason; 1775f4848303STrond Myklebust if (lo != NULL) { 1776f4848303STrond Myklebust __entry->layoutstateid_seq = 1777f4848303STrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1778f4848303STrond Myklebust __entry->layoutstateid_hash = 1779f4848303STrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1780f4848303STrond Myklebust } else { 1781f4848303STrond Myklebust __entry->layoutstateid_seq = 0; 1782f4848303STrond Myklebust __entry->layoutstateid_hash = 0; 1783f4848303STrond Myklebust } 1784183d9e7bSJeff Layton __entry->lseg = (long)lseg; 17859a4bf31dSJeff Layton ), 17869a4bf31dSJeff Layton TP_printk( 17879a4bf31dSJeff Layton "fileid=%02x:%02x:%llu fhandle=0x%08x " 1788f4848303STrond Myklebust "iomode=%s pos=%llu count=%llu " 1789183d9e7bSJeff Layton "layoutstateid=%d:0x%08x lseg=0x%lx (%s)", 17909a4bf31dSJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 17919a4bf31dSJeff Layton (unsigned long long)__entry->fileid, 17929a4bf31dSJeff Layton __entry->fhandle, 17938791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 17949a4bf31dSJeff Layton (unsigned long long)__entry->pos, 1795f4848303STrond Myklebust (unsigned long long)__entry->count, 1796f4848303STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1797183d9e7bSJeff Layton __entry->lseg, 17989a4bf31dSJeff Layton show_pnfs_update_layout_reason(__entry->reason) 17999a4bf31dSJeff Layton ) 18009a4bf31dSJeff Layton ); 18019a4bf31dSJeff Layton 1802d5b9216fSTrond Myklebust DECLARE_EVENT_CLASS(pnfs_layout_event, 1803d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, 1804d5b9216fSTrond Myklebust loff_t pos, 1805d5b9216fSTrond Myklebust u64 count, 1806d5b9216fSTrond Myklebust enum pnfs_iomode iomode, 1807d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, 1808d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg 1809d5b9216fSTrond Myklebust ), 1810d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg), 1811d5b9216fSTrond Myklebust TP_STRUCT__entry( 1812d5b9216fSTrond Myklebust __field(dev_t, dev) 1813d5b9216fSTrond Myklebust __field(u64, fileid) 1814d5b9216fSTrond Myklebust __field(u32, fhandle) 1815d5b9216fSTrond Myklebust __field(loff_t, pos) 1816d5b9216fSTrond Myklebust __field(u64, count) 1817d5b9216fSTrond Myklebust __field(enum pnfs_iomode, iomode) 1818d5b9216fSTrond Myklebust __field(int, layoutstateid_seq) 1819d5b9216fSTrond Myklebust __field(u32, layoutstateid_hash) 1820d5b9216fSTrond Myklebust __field(long, lseg) 1821d5b9216fSTrond Myklebust ), 1822d5b9216fSTrond Myklebust TP_fast_assign( 1823d5b9216fSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 1824d5b9216fSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 1825d5b9216fSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1826d5b9216fSTrond Myklebust __entry->pos = pos; 1827d5b9216fSTrond Myklebust __entry->count = count; 1828d5b9216fSTrond Myklebust __entry->iomode = iomode; 1829d5b9216fSTrond Myklebust if (lo != NULL) { 1830d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 1831d5b9216fSTrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1832d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 1833d5b9216fSTrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1834d5b9216fSTrond Myklebust } else { 1835d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 0; 1836d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 0; 1837d5b9216fSTrond Myklebust } 1838d5b9216fSTrond Myklebust __entry->lseg = (long)lseg; 1839d5b9216fSTrond Myklebust ), 1840d5b9216fSTrond Myklebust TP_printk( 1841d5b9216fSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 1842d5b9216fSTrond Myklebust "iomode=%s pos=%llu count=%llu " 1843d5b9216fSTrond Myklebust "layoutstateid=%d:0x%08x lseg=0x%lx", 1844d5b9216fSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1845d5b9216fSTrond Myklebust (unsigned long long)__entry->fileid, 1846d5b9216fSTrond Myklebust __entry->fhandle, 18478791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 1848d5b9216fSTrond Myklebust (unsigned long long)__entry->pos, 1849d5b9216fSTrond Myklebust (unsigned long long)__entry->count, 1850d5b9216fSTrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1851d5b9216fSTrond Myklebust __entry->lseg 1852d5b9216fSTrond Myklebust ) 1853d5b9216fSTrond Myklebust ); 1854d5b9216fSTrond Myklebust 1855d5b9216fSTrond Myklebust #define DEFINE_PNFS_LAYOUT_EVENT(name) \ 1856d5b9216fSTrond Myklebust DEFINE_EVENT(pnfs_layout_event, name, \ 1857d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, \ 1858d5b9216fSTrond Myklebust loff_t pos, \ 1859d5b9216fSTrond Myklebust u64 count, \ 1860d5b9216fSTrond Myklebust enum pnfs_iomode iomode, \ 1861d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, \ 1862d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg \ 1863d5b9216fSTrond Myklebust ), \ 1864d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg)) 1865d5b9216fSTrond Myklebust 1866d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_read); 1867d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_write); 1868d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_get_mirror_count); 1869d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_done); 1870d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_done); 1871d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_pagelist); 1872d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_pagelist); 1873d5b9216fSTrond Myklebust 1874cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_event, 1875cac1d3a2STrond Myklebust TP_PROTO( 1876cac1d3a2STrond Myklebust const struct nfs_client *clp, 1877cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid 1878cac1d3a2STrond Myklebust ), 1879cac1d3a2STrond Myklebust 1880cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid), 1881cac1d3a2STrond Myklebust 1882cac1d3a2STrond Myklebust TP_STRUCT__entry( 1883cac1d3a2STrond Myklebust __string(dstaddr, clp->cl_hostname) 1884cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1885cac1d3a2STrond Myklebust ), 1886cac1d3a2STrond Myklebust 1887cac1d3a2STrond Myklebust TP_fast_assign( 1888cac1d3a2STrond Myklebust __assign_str(dstaddr, clp->cl_hostname); 1889cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1890cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1891cac1d3a2STrond Myklebust ), 1892cac1d3a2STrond Myklebust 1893cac1d3a2STrond Myklebust TP_printk( 1894cac1d3a2STrond Myklebust "deviceid=%s, dstaddr=%s", 1895cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1896cac1d3a2STrond Myklebust __get_str(dstaddr) 1897cac1d3a2STrond Myklebust ) 1898cac1d3a2STrond Myklebust ); 1899cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_EVENT(name) \ 1900cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_event, name, \ 1901cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_client *clp, \ 1902cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid \ 1903cac1d3a2STrond Myklebust ), \ 1904cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid)) 1905cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_EVENT(nfs4_deviceid_free); 1906cac1d3a2STrond Myklebust 1907cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_status, 1908cac1d3a2STrond Myklebust TP_PROTO( 1909cac1d3a2STrond Myklebust const struct nfs_server *server, 1910cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, 1911cac1d3a2STrond Myklebust int status 1912cac1d3a2STrond Myklebust ), 1913cac1d3a2STrond Myklebust 1914cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status), 1915cac1d3a2STrond Myklebust 1916cac1d3a2STrond Myklebust TP_STRUCT__entry( 1917cac1d3a2STrond Myklebust __field(dev_t, dev) 1918cac1d3a2STrond Myklebust __field(int, status) 1919cac1d3a2STrond Myklebust __string(dstaddr, server->nfs_client->cl_hostname) 1920cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1921cac1d3a2STrond Myklebust ), 1922cac1d3a2STrond Myklebust 1923cac1d3a2STrond Myklebust TP_fast_assign( 1924cac1d3a2STrond Myklebust __entry->dev = server->s_dev; 1925cac1d3a2STrond Myklebust __entry->status = status; 1926cac1d3a2STrond Myklebust __assign_str(dstaddr, server->nfs_client->cl_hostname); 1927cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1928cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1929cac1d3a2STrond Myklebust ), 1930cac1d3a2STrond Myklebust 1931cac1d3a2STrond Myklebust TP_printk( 1932cac1d3a2STrond Myklebust "dev=%02x:%02x: deviceid=%s, dstaddr=%s, status=%d", 1933cac1d3a2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1934cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1935cac1d3a2STrond Myklebust __get_str(dstaddr), 1936cac1d3a2STrond Myklebust __entry->status 1937cac1d3a2STrond Myklebust ) 1938cac1d3a2STrond Myklebust ); 1939cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_STATUS(name) \ 1940cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_status, name, \ 1941cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_server *server, \ 1942cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, \ 1943cac1d3a2STrond Myklebust int status \ 1944cac1d3a2STrond Myklebust ), \ 1945cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status)) 1946cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_getdeviceinfo); 1947cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_find_deviceid); 1948cac1d3a2STrond Myklebust 1949088f3e68STrond Myklebust DECLARE_EVENT_CLASS(nfs4_flexfiles_io_event, 1950088f3e68STrond Myklebust TP_PROTO( 1951088f3e68STrond Myklebust const struct nfs_pgio_header *hdr 1952088f3e68STrond Myklebust ), 1953088f3e68STrond Myklebust 1954088f3e68STrond Myklebust TP_ARGS(hdr), 1955088f3e68STrond Myklebust 1956088f3e68STrond Myklebust TP_STRUCT__entry( 1957088f3e68STrond Myklebust __field(unsigned long, error) 1958088f3e68STrond Myklebust __field(dev_t, dev) 1959088f3e68STrond Myklebust __field(u32, fhandle) 1960088f3e68STrond Myklebust __field(u64, fileid) 1961088f3e68STrond Myklebust __field(loff_t, offset) 1962088f3e68STrond Myklebust __field(u32, count) 1963088f3e68STrond Myklebust __field(int, stateid_seq) 1964088f3e68STrond Myklebust __field(u32, stateid_hash) 1965088f3e68STrond Myklebust __string(dstaddr, hdr->ds_clp ? 1966088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 1967088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 1968088f3e68STrond Myklebust ), 1969088f3e68STrond Myklebust 1970088f3e68STrond Myklebust TP_fast_assign( 1971088f3e68STrond Myklebust const struct inode *inode = hdr->inode; 1972088f3e68STrond Myklebust 1973088f3e68STrond Myklebust __entry->error = hdr->res.op_status; 1974088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(hdr->args.fh); 1975088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1976088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1977088f3e68STrond Myklebust __entry->offset = hdr->args.offset; 1978088f3e68STrond Myklebust __entry->count = hdr->args.count; 1979088f3e68STrond Myklebust __entry->stateid_seq = 1980088f3e68STrond Myklebust be32_to_cpu(hdr->args.stateid.seqid); 1981088f3e68STrond Myklebust __entry->stateid_hash = 1982088f3e68STrond Myklebust nfs_stateid_hash(&hdr->args.stateid); 1983088f3e68STrond Myklebust __assign_str(dstaddr, hdr->ds_clp ? 1984088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 1985088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 1986088f3e68STrond Myklebust ), 1987088f3e68STrond Myklebust 1988088f3e68STrond Myklebust TP_printk( 1989088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1990088f3e68STrond Myklebust "offset=%llu count=%u stateid=%d:0x%08x dstaddr=%s", 1991088f3e68STrond Myklebust -__entry->error, 19928791545eSChuck Lever show_nfs4_status(__entry->error), 1993088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1994088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 1995088f3e68STrond Myklebust __entry->fhandle, 1996088f3e68STrond Myklebust __entry->offset, __entry->count, 1997088f3e68STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 1998088f3e68STrond Myklebust __get_str(dstaddr) 1999088f3e68STrond Myklebust ) 2000088f3e68STrond Myklebust ); 2001088f3e68STrond Myklebust 2002088f3e68STrond Myklebust #define DEFINE_NFS4_FLEXFILES_IO_EVENT(name) \ 2003088f3e68STrond Myklebust DEFINE_EVENT(nfs4_flexfiles_io_event, name, \ 2004088f3e68STrond Myklebust TP_PROTO( \ 2005088f3e68STrond Myklebust const struct nfs_pgio_header *hdr \ 2006088f3e68STrond Myklebust ), \ 2007088f3e68STrond Myklebust TP_ARGS(hdr)) 2008088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_read_error); 2009088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_write_error); 2010088f3e68STrond Myklebust 2011088f3e68STrond Myklebust TRACE_EVENT(ff_layout_commit_error, 2012088f3e68STrond Myklebust TP_PROTO( 2013088f3e68STrond Myklebust const struct nfs_commit_data *data 2014088f3e68STrond Myklebust ), 2015088f3e68STrond Myklebust 2016088f3e68STrond Myklebust TP_ARGS(data), 2017088f3e68STrond Myklebust 2018088f3e68STrond Myklebust TP_STRUCT__entry( 2019088f3e68STrond Myklebust __field(unsigned long, error) 2020088f3e68STrond Myklebust __field(dev_t, dev) 2021088f3e68STrond Myklebust __field(u32, fhandle) 2022088f3e68STrond Myklebust __field(u64, fileid) 2023088f3e68STrond Myklebust __field(loff_t, offset) 2024088f3e68STrond Myklebust __field(u32, count) 2025088f3e68STrond Myklebust __string(dstaddr, data->ds_clp ? 2026088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2027088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 2028088f3e68STrond Myklebust ), 2029088f3e68STrond Myklebust 2030088f3e68STrond Myklebust TP_fast_assign( 2031088f3e68STrond Myklebust const struct inode *inode = data->inode; 2032088f3e68STrond Myklebust 2033088f3e68STrond Myklebust __entry->error = data->res.op_status; 2034088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(data->args.fh); 2035088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 2036088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 2037088f3e68STrond Myklebust __entry->offset = data->args.offset; 2038088f3e68STrond Myklebust __entry->count = data->args.count; 2039088f3e68STrond Myklebust __assign_str(dstaddr, data->ds_clp ? 2040088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2041088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 2042088f3e68STrond Myklebust ), 2043088f3e68STrond Myklebust 2044088f3e68STrond Myklebust TP_printk( 2045088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2046088f3e68STrond Myklebust "offset=%llu count=%u dstaddr=%s", 2047088f3e68STrond Myklebust -__entry->error, 20488791545eSChuck Lever show_nfs4_status(__entry->error), 2049088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 2050088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 2051088f3e68STrond Myklebust __entry->fhandle, 2052088f3e68STrond Myklebust __entry->offset, __entry->count, 2053088f3e68STrond Myklebust __get_str(dstaddr) 2054088f3e68STrond Myklebust ) 2055088f3e68STrond Myklebust ); 2056088f3e68STrond Myklebust 2057f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_DATA); 2058f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_HOLE); 2059f628d462SOlga Kornievskaia 2060f628d462SOlga Kornievskaia #define show_llseek_mode(what) \ 2061f628d462SOlga Kornievskaia __print_symbolic(what, \ 2062f628d462SOlga Kornievskaia { NFS4_CONTENT_DATA, "DATA" }, \ 2063f628d462SOlga Kornievskaia { NFS4_CONTENT_HOLE, "HOLE" }) 2064f628d462SOlga Kornievskaia 2065f628d462SOlga Kornievskaia #ifdef CONFIG_NFS_V4_2 2066f628d462SOlga Kornievskaia TRACE_EVENT(nfs4_llseek, 2067f628d462SOlga Kornievskaia TP_PROTO( 2068f628d462SOlga Kornievskaia const struct inode *inode, 2069f628d462SOlga Kornievskaia const struct nfs42_seek_args *args, 2070f628d462SOlga Kornievskaia const struct nfs42_seek_res *res, 2071f628d462SOlga Kornievskaia int error 2072f628d462SOlga Kornievskaia ), 2073f628d462SOlga Kornievskaia 2074f628d462SOlga Kornievskaia TP_ARGS(inode, args, res, error), 2075f628d462SOlga Kornievskaia 2076f628d462SOlga Kornievskaia TP_STRUCT__entry( 2077f628d462SOlga Kornievskaia __field(unsigned long, error) 2078f628d462SOlga Kornievskaia __field(u32, fhandle) 2079f628d462SOlga Kornievskaia __field(u32, fileid) 2080f628d462SOlga Kornievskaia __field(dev_t, dev) 2081f628d462SOlga Kornievskaia __field(int, stateid_seq) 2082f628d462SOlga Kornievskaia __field(u32, stateid_hash) 2083f628d462SOlga Kornievskaia __field(loff_t, offset_s) 2084f628d462SOlga Kornievskaia __field(u32, what) 2085f628d462SOlga Kornievskaia __field(loff_t, offset_r) 2086f628d462SOlga Kornievskaia __field(u32, eof) 2087f628d462SOlga Kornievskaia ), 2088f628d462SOlga Kornievskaia 2089f628d462SOlga Kornievskaia TP_fast_assign( 2090f628d462SOlga Kornievskaia const struct nfs_inode *nfsi = NFS_I(inode); 2091f628d462SOlga Kornievskaia const struct nfs_fh *fh = args->sa_fh; 2092f628d462SOlga Kornievskaia 2093f628d462SOlga Kornievskaia __entry->fileid = nfsi->fileid; 2094f628d462SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 2095f628d462SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(fh); 2096f628d462SOlga Kornievskaia __entry->offset_s = args->sa_offset; 2097f628d462SOlga Kornievskaia __entry->stateid_seq = 2098f628d462SOlga Kornievskaia be32_to_cpu(args->sa_stateid.seqid); 2099f628d462SOlga Kornievskaia __entry->stateid_hash = 2100f628d462SOlga Kornievskaia nfs_stateid_hash(&args->sa_stateid); 2101f628d462SOlga Kornievskaia __entry->what = args->sa_what; 2102f628d462SOlga Kornievskaia if (error) { 2103f628d462SOlga Kornievskaia __entry->error = -error; 2104f628d462SOlga Kornievskaia __entry->offset_r = 0; 2105f628d462SOlga Kornievskaia __entry->eof = 0; 2106f628d462SOlga Kornievskaia } else { 2107f628d462SOlga Kornievskaia __entry->error = 0; 2108f628d462SOlga Kornievskaia __entry->offset_r = res->sr_offset; 2109f628d462SOlga Kornievskaia __entry->eof = res->sr_eof; 2110f628d462SOlga Kornievskaia } 2111f628d462SOlga Kornievskaia ), 2112f628d462SOlga Kornievskaia 2113f628d462SOlga Kornievskaia TP_printk( 2114f628d462SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2115f628d462SOlga Kornievskaia "stateid=%d:0x%08x offset_s=%llu what=%s " 2116f628d462SOlga Kornievskaia "offset_r=%llu eof=%u", 2117f628d462SOlga Kornievskaia -__entry->error, 2118f628d462SOlga Kornievskaia show_nfs4_status(__entry->error), 2119f628d462SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 2120f628d462SOlga Kornievskaia (unsigned long long)__entry->fileid, 2121f628d462SOlga Kornievskaia __entry->fhandle, 2122f628d462SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 2123f628d462SOlga Kornievskaia __entry->offset_s, 2124f628d462SOlga Kornievskaia show_llseek_mode(__entry->what), 2125f628d462SOlga Kornievskaia __entry->offset_r, 2126f628d462SOlga Kornievskaia __entry->eof 2127f628d462SOlga Kornievskaia ) 2128f628d462SOlga Kornievskaia ); 2129f628d462SOlga Kornievskaia 213040a82417SOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_sparse_event, 213140a82417SOlga Kornievskaia TP_PROTO( 213240a82417SOlga Kornievskaia const struct inode *inode, 213340a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, 213440a82417SOlga Kornievskaia int error 213540a82417SOlga Kornievskaia ), 213640a82417SOlga Kornievskaia 213740a82417SOlga Kornievskaia TP_ARGS(inode, args, error), 213840a82417SOlga Kornievskaia 213940a82417SOlga Kornievskaia TP_STRUCT__entry( 214040a82417SOlga Kornievskaia __field(unsigned long, error) 214140a82417SOlga Kornievskaia __field(loff_t, offset) 214240a82417SOlga Kornievskaia __field(loff_t, len) 214340a82417SOlga Kornievskaia __field(dev_t, dev) 214440a82417SOlga Kornievskaia __field(u32, fhandle) 214540a82417SOlga Kornievskaia __field(u64, fileid) 214640a82417SOlga Kornievskaia __field(int, stateid_seq) 214740a82417SOlga Kornievskaia __field(u32, stateid_hash) 214840a82417SOlga Kornievskaia ), 214940a82417SOlga Kornievskaia 215040a82417SOlga Kornievskaia TP_fast_assign( 215140a82417SOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 215240a82417SOlga Kornievskaia __entry->offset = args->falloc_offset; 215340a82417SOlga Kornievskaia __entry->len = args->falloc_length; 215440a82417SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 215540a82417SOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 215640a82417SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 215740a82417SOlga Kornievskaia __entry->stateid_seq = 215840a82417SOlga Kornievskaia be32_to_cpu(args->falloc_stateid.seqid); 215940a82417SOlga Kornievskaia __entry->stateid_hash = 216040a82417SOlga Kornievskaia nfs_stateid_hash(&args->falloc_stateid); 216140a82417SOlga Kornievskaia ), 216240a82417SOlga Kornievskaia 216340a82417SOlga Kornievskaia TP_printk( 216440a82417SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 216540a82417SOlga Kornievskaia "stateid=%d:0x%08x offset=%llu len=%llu", 216640a82417SOlga Kornievskaia -__entry->error, 216740a82417SOlga Kornievskaia show_nfs4_status(__entry->error), 216840a82417SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 216940a82417SOlga Kornievskaia (unsigned long long)__entry->fileid, 217040a82417SOlga Kornievskaia __entry->fhandle, 217140a82417SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 217240a82417SOlga Kornievskaia (long long)__entry->offset, 217340a82417SOlga Kornievskaia (long long)__entry->len 217440a82417SOlga Kornievskaia ) 217540a82417SOlga Kornievskaia ); 217640a82417SOlga Kornievskaia #define DEFINE_NFS4_SPARSE_EVENT(name) \ 217740a82417SOlga Kornievskaia DEFINE_EVENT(nfs4_sparse_event, name, \ 217840a82417SOlga Kornievskaia TP_PROTO( \ 217940a82417SOlga Kornievskaia const struct inode *inode, \ 218040a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, \ 218140a82417SOlga Kornievskaia int error \ 218240a82417SOlga Kornievskaia ), \ 218340a82417SOlga Kornievskaia TP_ARGS(inode, args, error)) 218440a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_fallocate); 218540a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_deallocate); 2186*ce7cea1bSOlga Kornievskaia 2187*ce7cea1bSOlga Kornievskaia TRACE_EVENT(nfs4_copy, 2188*ce7cea1bSOlga Kornievskaia TP_PROTO( 2189*ce7cea1bSOlga Kornievskaia const struct inode *src_inode, 2190*ce7cea1bSOlga Kornievskaia const struct inode *dst_inode, 2191*ce7cea1bSOlga Kornievskaia const struct nfs42_copy_args *args, 2192*ce7cea1bSOlga Kornievskaia const struct nfs42_copy_res *res, 2193*ce7cea1bSOlga Kornievskaia const struct nl4_server *nss, 2194*ce7cea1bSOlga Kornievskaia int error 2195*ce7cea1bSOlga Kornievskaia ), 2196*ce7cea1bSOlga Kornievskaia 2197*ce7cea1bSOlga Kornievskaia TP_ARGS(src_inode, dst_inode, args, res, nss, error), 2198*ce7cea1bSOlga Kornievskaia 2199*ce7cea1bSOlga Kornievskaia TP_STRUCT__entry( 2200*ce7cea1bSOlga Kornievskaia __field(unsigned long, error) 2201*ce7cea1bSOlga Kornievskaia __field(u32, src_fhandle) 2202*ce7cea1bSOlga Kornievskaia __field(u32, src_fileid) 2203*ce7cea1bSOlga Kornievskaia __field(u32, dst_fhandle) 2204*ce7cea1bSOlga Kornievskaia __field(u32, dst_fileid) 2205*ce7cea1bSOlga Kornievskaia __field(dev_t, src_dev) 2206*ce7cea1bSOlga Kornievskaia __field(dev_t, dst_dev) 2207*ce7cea1bSOlga Kornievskaia __field(int, src_stateid_seq) 2208*ce7cea1bSOlga Kornievskaia __field(u32, src_stateid_hash) 2209*ce7cea1bSOlga Kornievskaia __field(int, dst_stateid_seq) 2210*ce7cea1bSOlga Kornievskaia __field(u32, dst_stateid_hash) 2211*ce7cea1bSOlga Kornievskaia __field(loff_t, src_offset) 2212*ce7cea1bSOlga Kornievskaia __field(loff_t, dst_offset) 2213*ce7cea1bSOlga Kornievskaia __field(bool, sync) 2214*ce7cea1bSOlga Kornievskaia __field(loff_t, len) 2215*ce7cea1bSOlga Kornievskaia __field(int, res_stateid_seq) 2216*ce7cea1bSOlga Kornievskaia __field(u32, res_stateid_hash) 2217*ce7cea1bSOlga Kornievskaia __field(loff_t, res_count) 2218*ce7cea1bSOlga Kornievskaia __field(bool, res_sync) 2219*ce7cea1bSOlga Kornievskaia __field(bool, res_cons) 2220*ce7cea1bSOlga Kornievskaia __field(bool, intra) 2221*ce7cea1bSOlga Kornievskaia ), 2222*ce7cea1bSOlga Kornievskaia 2223*ce7cea1bSOlga Kornievskaia TP_fast_assign( 2224*ce7cea1bSOlga Kornievskaia const struct nfs_inode *src_nfsi = NFS_I(src_inode); 2225*ce7cea1bSOlga Kornievskaia const struct nfs_inode *dst_nfsi = NFS_I(dst_inode); 2226*ce7cea1bSOlga Kornievskaia 2227*ce7cea1bSOlga Kornievskaia __entry->src_fileid = src_nfsi->fileid; 2228*ce7cea1bSOlga Kornievskaia __entry->src_dev = src_inode->i_sb->s_dev; 2229*ce7cea1bSOlga Kornievskaia __entry->src_fhandle = nfs_fhandle_hash(args->src_fh); 2230*ce7cea1bSOlga Kornievskaia __entry->src_offset = args->src_pos; 2231*ce7cea1bSOlga Kornievskaia __entry->dst_fileid = dst_nfsi->fileid; 2232*ce7cea1bSOlga Kornievskaia __entry->dst_dev = dst_inode->i_sb->s_dev; 2233*ce7cea1bSOlga Kornievskaia __entry->dst_fhandle = nfs_fhandle_hash(args->dst_fh); 2234*ce7cea1bSOlga Kornievskaia __entry->dst_offset = args->dst_pos; 2235*ce7cea1bSOlga Kornievskaia __entry->len = args->count; 2236*ce7cea1bSOlga Kornievskaia __entry->sync = args->sync; 2237*ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq = 2238*ce7cea1bSOlga Kornievskaia be32_to_cpu(args->src_stateid.seqid); 2239*ce7cea1bSOlga Kornievskaia __entry->src_stateid_hash = 2240*ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->src_stateid); 2241*ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq = 2242*ce7cea1bSOlga Kornievskaia be32_to_cpu(args->dst_stateid.seqid); 2243*ce7cea1bSOlga Kornievskaia __entry->dst_stateid_hash = 2244*ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->dst_stateid); 2245*ce7cea1bSOlga Kornievskaia __entry->intra = nss ? 0 : 1; 2246*ce7cea1bSOlga Kornievskaia if (error) { 2247*ce7cea1bSOlga Kornievskaia __entry->error = -error; 2248*ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 0; 2249*ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 0; 2250*ce7cea1bSOlga Kornievskaia __entry->res_count = 0; 2251*ce7cea1bSOlga Kornievskaia __entry->res_sync = 0; 2252*ce7cea1bSOlga Kornievskaia __entry->res_cons = 0; 2253*ce7cea1bSOlga Kornievskaia } else { 2254*ce7cea1bSOlga Kornievskaia __entry->error = 0; 2255*ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 2256*ce7cea1bSOlga Kornievskaia be32_to_cpu(res->write_res.stateid.seqid); 2257*ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 2258*ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&res->write_res.stateid); 2259*ce7cea1bSOlga Kornievskaia __entry->res_count = res->write_res.count; 2260*ce7cea1bSOlga Kornievskaia __entry->res_sync = res->synchronous; 2261*ce7cea1bSOlga Kornievskaia __entry->res_cons = res->consecutive; 2262*ce7cea1bSOlga Kornievskaia } 2263*ce7cea1bSOlga Kornievskaia ), 2264*ce7cea1bSOlga Kornievskaia 2265*ce7cea1bSOlga Kornievskaia TP_printk( 2266*ce7cea1bSOlga Kornievskaia "error=%ld (%s) intra=%d src_fileid=%02x:%02x:%llu " 2267*ce7cea1bSOlga Kornievskaia "src_fhandle=0x%08x dst_fileid=%02x:%02x:%llu " 2268*ce7cea1bSOlga Kornievskaia "dst_fhandle=0x%08x src_stateid=%d:0x%08x " 2269*ce7cea1bSOlga Kornievskaia "dst_stateid=%d:0x%08x src_offset=%llu dst_offset=%llu " 2270*ce7cea1bSOlga Kornievskaia "len=%llu sync=%d cb_stateid=%d:0x%08x res_sync=%d " 2271*ce7cea1bSOlga Kornievskaia "res_cons=%d res_count=%llu", 2272*ce7cea1bSOlga Kornievskaia -__entry->error, 2273*ce7cea1bSOlga Kornievskaia show_nfs4_status(__entry->error), 2274*ce7cea1bSOlga Kornievskaia __entry->intra, 2275*ce7cea1bSOlga Kornievskaia MAJOR(__entry->src_dev), MINOR(__entry->src_dev), 2276*ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->src_fileid, 2277*ce7cea1bSOlga Kornievskaia __entry->src_fhandle, 2278*ce7cea1bSOlga Kornievskaia MAJOR(__entry->dst_dev), MINOR(__entry->dst_dev), 2279*ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->dst_fileid, 2280*ce7cea1bSOlga Kornievskaia __entry->dst_fhandle, 2281*ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq, __entry->src_stateid_hash, 2282*ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq, __entry->dst_stateid_hash, 2283*ce7cea1bSOlga Kornievskaia __entry->src_offset, 2284*ce7cea1bSOlga Kornievskaia __entry->dst_offset, 2285*ce7cea1bSOlga Kornievskaia __entry->len, 2286*ce7cea1bSOlga Kornievskaia __entry->sync, 2287*ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq, __entry->res_stateid_hash, 2288*ce7cea1bSOlga Kornievskaia __entry->res_sync, 2289*ce7cea1bSOlga Kornievskaia __entry->res_cons, 2290*ce7cea1bSOlga Kornievskaia __entry->res_count 2291*ce7cea1bSOlga Kornievskaia ) 2292*ce7cea1bSOlga Kornievskaia ); 2293f628d462SOlga Kornievskaia #endif /* CONFIG_NFS_V4_2 */ 2294088f3e68STrond Myklebust 2295cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 2296cc668ab3STrond Myklebust 2297c6d01c6fSTrond Myklebust #endif /* _TRACE_NFS4_H */ 2298c6d01c6fSTrond Myklebust 2299c6d01c6fSTrond Myklebust #undef TRACE_INCLUDE_PATH 2300c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_PATH . 2301c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_FILE nfs4trace 2302c6d01c6fSTrond Myklebust /* This part must be outside protection */ 2303c6d01c6fSTrond Myklebust #include <trace/define_trace.h> 2304