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> 12247c01ffSChuck Lever #include <trace/misc/sunrpc.h> 13c6d01c6fSTrond Myklebust 14247c01ffSChuck Lever #include <trace/misc/fs.h> 15247c01ffSChuck Lever #include <trace/misc/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 2038db744ceSOlga Kornievskaia TRACE_EVENT(nfs4_cb_offload, 2048db744ceSOlga Kornievskaia TP_PROTO( 2058db744ceSOlga Kornievskaia const struct nfs_fh *cb_fh, 2068db744ceSOlga Kornievskaia const nfs4_stateid *cb_stateid, 2078db744ceSOlga Kornievskaia uint64_t cb_count, 2088db744ceSOlga Kornievskaia int cb_error, 2098db744ceSOlga Kornievskaia int cb_how_stable 2108db744ceSOlga Kornievskaia ), 2118db744ceSOlga Kornievskaia 2128db744ceSOlga Kornievskaia TP_ARGS(cb_fh, cb_stateid, cb_count, cb_error, 2138db744ceSOlga Kornievskaia cb_how_stable), 2148db744ceSOlga Kornievskaia 2158db744ceSOlga Kornievskaia TP_STRUCT__entry( 2168db744ceSOlga Kornievskaia __field(unsigned long, error) 2178db744ceSOlga Kornievskaia __field(u32, fhandle) 2188db744ceSOlga Kornievskaia __field(loff_t, cb_count) 2198db744ceSOlga Kornievskaia __field(int, cb_how) 2208db744ceSOlga Kornievskaia __field(int, cb_stateid_seq) 2218db744ceSOlga Kornievskaia __field(u32, cb_stateid_hash) 2228db744ceSOlga Kornievskaia ), 2238db744ceSOlga Kornievskaia 2248db744ceSOlga Kornievskaia TP_fast_assign( 2258db744ceSOlga Kornievskaia __entry->error = cb_error < 0 ? -cb_error : 0; 2268db744ceSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(cb_fh); 2278db744ceSOlga Kornievskaia __entry->cb_stateid_seq = 2288db744ceSOlga Kornievskaia be32_to_cpu(cb_stateid->seqid); 2298db744ceSOlga Kornievskaia __entry->cb_stateid_hash = 2308db744ceSOlga Kornievskaia nfs_stateid_hash(cb_stateid); 2318db744ceSOlga Kornievskaia __entry->cb_count = cb_count; 2328db744ceSOlga Kornievskaia __entry->cb_how = cb_how_stable; 2338db744ceSOlga Kornievskaia ), 2348db744ceSOlga Kornievskaia 2358db744ceSOlga Kornievskaia TP_printk( 2368db744ceSOlga Kornievskaia "error=%ld (%s) fhandle=0x%08x cb_stateid=%d:0x%08x " 2378db744ceSOlga Kornievskaia "cb_count=%llu cb_how=%s", 2388db744ceSOlga Kornievskaia -__entry->error, 2398db744ceSOlga Kornievskaia show_nfs4_status(__entry->error), 2408db744ceSOlga Kornievskaia __entry->fhandle, 2418db744ceSOlga Kornievskaia __entry->cb_stateid_seq, __entry->cb_stateid_hash, 2428db744ceSOlga Kornievskaia __entry->cb_count, 2438db744ceSOlga Kornievskaia show_nfs_stable_how(__entry->cb_how) 2448db744ceSOlga Kornievskaia ) 2458db744ceSOlga Kornievskaia ); 246c6d01c6fSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 247c6d01c6fSTrond Myklebust 248ad05cc0fSAnna Schumaker TRACE_EVENT(nfs4_setup_sequence, 249ad05cc0fSAnna Schumaker TP_PROTO( 250ad05cc0fSAnna Schumaker const struct nfs4_session *session, 251ad05cc0fSAnna Schumaker const struct nfs4_sequence_args *args 252ad05cc0fSAnna Schumaker ), 253ad05cc0fSAnna Schumaker TP_ARGS(session, args), 254ad05cc0fSAnna Schumaker 255ad05cc0fSAnna Schumaker TP_STRUCT__entry( 256ad05cc0fSAnna Schumaker __field(unsigned int, session) 257ad05cc0fSAnna Schumaker __field(unsigned int, slot_nr) 258ad05cc0fSAnna Schumaker __field(unsigned int, seq_nr) 259ad05cc0fSAnna Schumaker __field(unsigned int, highest_used_slotid) 260ad05cc0fSAnna Schumaker ), 261ad05cc0fSAnna Schumaker 262ad05cc0fSAnna Schumaker TP_fast_assign( 263ad05cc0fSAnna Schumaker const struct nfs4_slot *sa_slot = args->sa_slot; 264ad05cc0fSAnna Schumaker __entry->session = session ? nfs_session_id_hash(&session->sess_id) : 0; 265ad05cc0fSAnna Schumaker __entry->slot_nr = sa_slot->slot_nr; 266ad05cc0fSAnna Schumaker __entry->seq_nr = sa_slot->seq_nr; 267ad05cc0fSAnna Schumaker __entry->highest_used_slotid = 268ad05cc0fSAnna Schumaker sa_slot->table->highest_used_slotid; 269ad05cc0fSAnna Schumaker ), 270ad05cc0fSAnna Schumaker TP_printk( 271ad05cc0fSAnna Schumaker "session=0x%08x slot_nr=%u seq_nr=%u " 272ad05cc0fSAnna Schumaker "highest_used_slotid=%u", 273ad05cc0fSAnna Schumaker __entry->session, 274ad05cc0fSAnna Schumaker __entry->slot_nr, 275ad05cc0fSAnna Schumaker __entry->seq_nr, 276ad05cc0fSAnna Schumaker __entry->highest_used_slotid 277ad05cc0fSAnna Schumaker ) 278ad05cc0fSAnna Schumaker ); 279ad05cc0fSAnna Schumaker 280511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MANAGER_RUNNING); 281511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_CHECK_LEASE); 282511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_EXPIRED); 283511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_REBOOT); 284511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_NOGRACE); 285511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGRETURN); 286511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SESSION_RESET); 287511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_CONFIRM); 288511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SERVER_SCOPE_MISMATCH); 289511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_PURGE_STATE); 290511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_BIND_CONN_TO_SESSION); 291511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MOVED); 292511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_MOVED); 293511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGATION_EXPIRED); 294511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RUN_MANAGER); 295*b46d80bdSBenjamin Coddington TRACE_DEFINE_ENUM(NFS4CLNT_MANAGER_AVAILABLE); 296b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_RUNNING); 297b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_READ); 298b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_RW); 299*b46d80bdSBenjamin Coddington TRACE_DEFINE_ENUM(NFS4CLNT_DELEGRETURN_DELAYED); 300511ba52eSChuck Lever 301511ba52eSChuck Lever #define show_nfs4_clp_state(state) \ 302511ba52eSChuck Lever __print_flags(state, "|", \ 303*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_MANAGER_RUNNING), "MANAGER_RUNNING" }, \ 304*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_CHECK_LEASE), "CHECK_LEASE" }, \ 305*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_LEASE_EXPIRED), "LEASE_EXPIRED" }, \ 306*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RECLAIM_REBOOT), "RECLAIM_REBOOT" }, \ 307*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RECLAIM_NOGRACE), "RECLAIM_NOGRACE" }, \ 308*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_DELEGRETURN), "DELEGRETURN" }, \ 309*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_SESSION_RESET), "SESSION_RESET" }, \ 310*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_LEASE_CONFIRM), "LEASE_CONFIRM" }, \ 311*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_SERVER_SCOPE_MISMATCH), "SERVER_SCOPE_MISMATCH" }, \ 312*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_PURGE_STATE), "PURGE_STATE" }, \ 313*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_BIND_CONN_TO_SESSION), "BIND_CONN_TO_SESSION" }, \ 314*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_MOVED), "MOVED" }, \ 315*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_LEASE_MOVED), "LEASE_MOVED" }, \ 316*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_DELEGATION_EXPIRED), "DELEGATION_EXPIRED" }, \ 317*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RUN_MANAGER), "RUN_MANAGER" }, \ 318*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_MANAGER_AVAILABLE), "MANAGER_AVAILABLE" }, \ 319*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RECALL_RUNNING), "RECALL_RUNNING" }, \ 320*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RECALL_ANY_LAYOUT_READ), "RECALL_ANY_LAYOUT_READ" }, \ 321*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_RECALL_ANY_LAYOUT_RW), "RECALL_ANY_LAYOUT_RW" }, \ 322*b46d80bdSBenjamin Coddington { BIT(NFS4CLNT_DELEGRETURN_DELAYED), "DELERETURN_DELAYED" }) 323511ba52eSChuck Lever 324511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr, 325511ba52eSChuck Lever TP_PROTO( 326511ba52eSChuck Lever const struct nfs_client *clp 327511ba52eSChuck Lever ), 328511ba52eSChuck Lever 329511ba52eSChuck Lever TP_ARGS(clp), 330511ba52eSChuck Lever 331511ba52eSChuck Lever TP_STRUCT__entry( 332511ba52eSChuck Lever __field(unsigned long, state) 333511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 334511ba52eSChuck Lever ), 335511ba52eSChuck Lever 336511ba52eSChuck Lever TP_fast_assign( 337511ba52eSChuck Lever __entry->state = clp->cl_state; 33878c14b38SJoe Perches __assign_str(hostname, clp->cl_hostname); 339511ba52eSChuck Lever ), 340511ba52eSChuck Lever 341511ba52eSChuck Lever TP_printk( 342511ba52eSChuck Lever "hostname=%s clp state=%s", __get_str(hostname), 343511ba52eSChuck Lever show_nfs4_clp_state(__entry->state) 344511ba52eSChuck Lever ) 345511ba52eSChuck Lever ) 346511ba52eSChuck Lever 347511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr_failed, 348511ba52eSChuck Lever TP_PROTO( 349511ba52eSChuck Lever const struct nfs_client *clp, 350511ba52eSChuck Lever const char *section, 351511ba52eSChuck Lever int status 352511ba52eSChuck Lever ), 353511ba52eSChuck Lever 354511ba52eSChuck Lever TP_ARGS(clp, section, status), 355511ba52eSChuck Lever 356511ba52eSChuck Lever TP_STRUCT__entry( 357511ba52eSChuck Lever __field(unsigned long, error) 358511ba52eSChuck Lever __field(unsigned long, state) 359511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 360511ba52eSChuck Lever __string(section, section) 361511ba52eSChuck Lever ), 362511ba52eSChuck Lever 363511ba52eSChuck Lever TP_fast_assign( 364118b6292STrond Myklebust __entry->error = status < 0 ? -status : 0; 365511ba52eSChuck Lever __entry->state = clp->cl_state; 366511ba52eSChuck Lever __assign_str(hostname, clp->cl_hostname); 367511ba52eSChuck Lever __assign_str(section, section); 368511ba52eSChuck Lever ), 369511ba52eSChuck Lever 370511ba52eSChuck Lever TP_printk( 371511ba52eSChuck Lever "hostname=%s clp state=%s error=%ld (%s) section=%s", 372511ba52eSChuck Lever __get_str(hostname), 373511ba52eSChuck Lever show_nfs4_clp_state(__entry->state), -__entry->error, 3748791545eSChuck Lever show_nfs4_status(__entry->error), __get_str(section) 375511ba52eSChuck Lever 376511ba52eSChuck Lever ) 377511ba52eSChuck Lever ) 378511ba52eSChuck Lever 379da934ae0STrond Myklebust TRACE_EVENT(nfs4_xdr_bad_operation, 380da934ae0STrond Myklebust TP_PROTO( 381da934ae0STrond Myklebust const struct xdr_stream *xdr, 382da934ae0STrond Myklebust u32 op, 383da934ae0STrond Myklebust u32 expected 384da934ae0STrond Myklebust ), 385da934ae0STrond Myklebust 386da934ae0STrond Myklebust TP_ARGS(xdr, op, expected), 387da934ae0STrond Myklebust 388da934ae0STrond Myklebust TP_STRUCT__entry( 389da934ae0STrond Myklebust __field(unsigned int, task_id) 390da934ae0STrond Myklebust __field(unsigned int, client_id) 391da934ae0STrond Myklebust __field(u32, xid) 392da934ae0STrond Myklebust __field(u32, op) 393da934ae0STrond Myklebust __field(u32, expected) 394da934ae0STrond Myklebust ), 395da934ae0STrond Myklebust 396da934ae0STrond Myklebust TP_fast_assign( 397da934ae0STrond Myklebust const struct rpc_rqst *rqstp = xdr->rqst; 398da934ae0STrond Myklebust const struct rpc_task *task = rqstp->rq_task; 399da934ae0STrond Myklebust 400da934ae0STrond Myklebust __entry->task_id = task->tk_pid; 401da934ae0STrond Myklebust __entry->client_id = task->tk_client->cl_clid; 402da934ae0STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 403da934ae0STrond Myklebust __entry->op = op; 404da934ae0STrond Myklebust __entry->expected = expected; 405da934ae0STrond Myklebust ), 406da934ae0STrond Myklebust 407b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 408b4776a34SChuck Lever " xid=0x%08x operation=%u, expected=%u", 409da934ae0STrond Myklebust __entry->task_id, __entry->client_id, __entry->xid, 410da934ae0STrond Myklebust __entry->op, __entry->expected 411da934ae0STrond Myklebust ) 412da934ae0STrond Myklebust ); 413da934ae0STrond Myklebust 4143d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs4_xdr_event, 415f23f6584SChuck Lever TP_PROTO( 41662a92ba9SChuck Lever const struct xdr_stream *xdr, 417f23f6584SChuck Lever u32 op, 418118b6292STrond Myklebust u32 error 419f23f6584SChuck Lever ), 420f23f6584SChuck Lever 42162a92ba9SChuck Lever TP_ARGS(xdr, op, error), 422f23f6584SChuck Lever 423f23f6584SChuck Lever TP_STRUCT__entry( 42462a92ba9SChuck Lever __field(unsigned int, task_id) 42562a92ba9SChuck Lever __field(unsigned int, client_id) 42662a92ba9SChuck Lever __field(u32, xid) 427f23f6584SChuck Lever __field(u32, op) 42896650e2eSChuck Lever __field(unsigned long, error) 429f23f6584SChuck Lever ), 430f23f6584SChuck Lever 431f23f6584SChuck Lever TP_fast_assign( 43262a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 43362a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 43462a92ba9SChuck Lever 43562a92ba9SChuck Lever __entry->task_id = task->tk_pid; 43662a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 43762a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 438f23f6584SChuck Lever __entry->op = op; 43996650e2eSChuck Lever __entry->error = error; 440f23f6584SChuck Lever ), 441f23f6584SChuck Lever 442b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 443b4776a34SChuck Lever " xid=0x%08x error=%ld (%s) operation=%u", 44462a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 4458791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 44696650e2eSChuck Lever __entry->op 447f23f6584SChuck Lever ) 448f23f6584SChuck Lever ); 4493d66bae1STrond Myklebust #define DEFINE_NFS4_XDR_EVENT(name) \ 4503d66bae1STrond Myklebust DEFINE_EVENT(nfs4_xdr_event, name, \ 4513d66bae1STrond Myklebust TP_PROTO( \ 4523d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 4533d66bae1STrond Myklebust u32 op, \ 4543d66bae1STrond Myklebust u32 error \ 4553d66bae1STrond Myklebust ), \ 4563d66bae1STrond Myklebust TP_ARGS(xdr, op, error)) 4573d66bae1STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_status); 458eb3d58c6STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_bad_filehandle); 459f23f6584SChuck Lever 4602bb50aabSChuck Lever DECLARE_EVENT_CLASS(nfs4_cb_error_class, 4612bb50aabSChuck Lever TP_PROTO( 4622bb50aabSChuck Lever __be32 xid, 4632bb50aabSChuck Lever u32 cb_ident 4642bb50aabSChuck Lever ), 4652bb50aabSChuck Lever 4662bb50aabSChuck Lever TP_ARGS(xid, cb_ident), 4672bb50aabSChuck Lever 4682bb50aabSChuck Lever TP_STRUCT__entry( 4692bb50aabSChuck Lever __field(u32, xid) 4702bb50aabSChuck Lever __field(u32, cbident) 4712bb50aabSChuck Lever ), 4722bb50aabSChuck Lever 4732bb50aabSChuck Lever TP_fast_assign( 4742bb50aabSChuck Lever __entry->xid = be32_to_cpu(xid); 4752bb50aabSChuck Lever __entry->cbident = cb_ident; 4762bb50aabSChuck Lever ), 4772bb50aabSChuck Lever 4782bb50aabSChuck Lever TP_printk( 4792bb50aabSChuck Lever "xid=0x%08x cb_ident=0x%08x", 4802bb50aabSChuck Lever __entry->xid, __entry->cbident 4812bb50aabSChuck Lever ) 4822bb50aabSChuck Lever ); 4832bb50aabSChuck Lever 4842bb50aabSChuck Lever #define DEFINE_CB_ERROR_EVENT(name) \ 4852bb50aabSChuck Lever DEFINE_EVENT(nfs4_cb_error_class, nfs_cb_##name, \ 4862bb50aabSChuck Lever TP_PROTO( \ 4872bb50aabSChuck Lever __be32 xid, \ 4882bb50aabSChuck Lever u32 cb_ident \ 4892bb50aabSChuck Lever ), \ 4902bb50aabSChuck Lever TP_ARGS(xid, cb_ident)) 4912bb50aabSChuck Lever 4922bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(no_clp); 4932bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(badprinc); 4942bb50aabSChuck Lever 49542113a75STrond Myklebust DECLARE_EVENT_CLASS(nfs4_open_event, 49642113a75STrond Myklebust TP_PROTO( 49742113a75STrond Myklebust const struct nfs_open_context *ctx, 49842113a75STrond Myklebust int flags, 49942113a75STrond Myklebust int error 50042113a75STrond Myklebust ), 50142113a75STrond Myklebust 50242113a75STrond Myklebust TP_ARGS(ctx, flags, error), 50342113a75STrond Myklebust 50442113a75STrond Myklebust TP_STRUCT__entry( 50596650e2eSChuck Lever __field(unsigned long, error) 5069d2d48bbSChuck Lever __field(unsigned long, flags) 5079d2d48bbSChuck Lever __field(unsigned long, fmode) 50842113a75STrond Myklebust __field(dev_t, dev) 50942113a75STrond Myklebust __field(u32, fhandle) 51042113a75STrond Myklebust __field(u64, fileid) 51142113a75STrond Myklebust __field(u64, dir) 51242113a75STrond Myklebust __string(name, ctx->dentry->d_name.name) 51348c9579aSOlga Kornievskaia __field(int, stateid_seq) 51448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 51548c9579aSOlga Kornievskaia __field(int, openstateid_seq) 51648c9579aSOlga Kornievskaia __field(u32, openstateid_hash) 51742113a75STrond Myklebust ), 51842113a75STrond Myklebust 51942113a75STrond Myklebust TP_fast_assign( 52042113a75STrond Myklebust const struct nfs4_state *state = ctx->state; 52142113a75STrond Myklebust const struct inode *inode = NULL; 52242113a75STrond Myklebust 52396650e2eSChuck Lever __entry->error = -error; 52442113a75STrond Myklebust __entry->flags = flags; 5259d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 52642113a75STrond Myklebust __entry->dev = ctx->dentry->d_sb->s_dev; 52748c9579aSOlga Kornievskaia if (!IS_ERR_OR_NULL(state)) { 52842113a75STrond Myklebust inode = state->inode; 52948c9579aSOlga Kornievskaia __entry->stateid_seq = 53048c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 53148c9579aSOlga Kornievskaia __entry->stateid_hash = 53248c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 53348c9579aSOlga Kornievskaia __entry->openstateid_seq = 53448c9579aSOlga Kornievskaia be32_to_cpu(state->open_stateid.seqid); 53548c9579aSOlga Kornievskaia __entry->openstateid_hash = 53648c9579aSOlga Kornievskaia nfs_stateid_hash(&state->open_stateid); 53748c9579aSOlga Kornievskaia } else { 53848c9579aSOlga Kornievskaia __entry->stateid_seq = 0; 53948c9579aSOlga Kornievskaia __entry->stateid_hash = 0; 54048c9579aSOlga Kornievskaia __entry->openstateid_seq = 0; 54148c9579aSOlga Kornievskaia __entry->openstateid_hash = 0; 54248c9579aSOlga Kornievskaia } 54342113a75STrond Myklebust if (inode != NULL) { 54442113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 54542113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 54642113a75STrond Myklebust } else { 54742113a75STrond Myklebust __entry->fileid = 0; 54842113a75STrond Myklebust __entry->fhandle = 0; 54942113a75STrond Myklebust } 5502b0143b5SDavid Howells __entry->dir = NFS_FILEID(d_inode(ctx->dentry->d_parent)); 55142113a75STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 55242113a75STrond Myklebust ), 55342113a75STrond Myklebust 55442113a75STrond Myklebust TP_printk( 5559d2d48bbSChuck Lever "error=%ld (%s) flags=%lu (%s) fmode=%s " 55642113a75STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 55748c9579aSOlga Kornievskaia "name=%02x:%02x:%llu/%s stateid=%d:0x%08x " 55848c9579aSOlga Kornievskaia "openstateid=%d:0x%08x", 55996650e2eSChuck Lever -__entry->error, 5608791545eSChuck Lever show_nfs4_status(__entry->error), 56142113a75STrond Myklebust __entry->flags, 5629d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5639d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 56442113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 56542113a75STrond Myklebust (unsigned long long)__entry->fileid, 56642113a75STrond Myklebust __entry->fhandle, 56742113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 56842113a75STrond Myklebust (unsigned long long)__entry->dir, 56948c9579aSOlga Kornievskaia __get_str(name), 57048c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 57148c9579aSOlga Kornievskaia __entry->openstateid_seq, __entry->openstateid_hash 57242113a75STrond Myklebust ) 57342113a75STrond Myklebust ); 57442113a75STrond Myklebust 57542113a75STrond Myklebust #define DEFINE_NFS4_OPEN_EVENT(name) \ 57642113a75STrond Myklebust DEFINE_EVENT(nfs4_open_event, name, \ 57742113a75STrond Myklebust TP_PROTO( \ 57842113a75STrond Myklebust const struct nfs_open_context *ctx, \ 57942113a75STrond Myklebust int flags, \ 58042113a75STrond Myklebust int error \ 58142113a75STrond Myklebust ), \ 58242113a75STrond Myklebust TP_ARGS(ctx, flags, error)) 58342113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_reclaim); 58442113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_expired); 58542113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_file); 58642113a75STrond Myklebust 5879759b0fbSOlga Kornievskaia TRACE_EVENT(nfs4_cached_open, 5889759b0fbSOlga Kornievskaia TP_PROTO( 5899759b0fbSOlga Kornievskaia const struct nfs4_state *state 5909759b0fbSOlga Kornievskaia ), 5919759b0fbSOlga Kornievskaia TP_ARGS(state), 5929759b0fbSOlga Kornievskaia TP_STRUCT__entry( 5939759b0fbSOlga Kornievskaia __field(dev_t, dev) 5949759b0fbSOlga Kornievskaia __field(u32, fhandle) 5959759b0fbSOlga Kornievskaia __field(u64, fileid) 5969759b0fbSOlga Kornievskaia __field(unsigned int, fmode) 5979759b0fbSOlga Kornievskaia __field(int, stateid_seq) 5989759b0fbSOlga Kornievskaia __field(u32, stateid_hash) 5999759b0fbSOlga Kornievskaia ), 6009759b0fbSOlga Kornievskaia 6019759b0fbSOlga Kornievskaia TP_fast_assign( 6029759b0fbSOlga Kornievskaia const struct inode *inode = state->inode; 6039759b0fbSOlga Kornievskaia 6049759b0fbSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 6059759b0fbSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 6069759b0fbSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 6079759b0fbSOlga Kornievskaia __entry->fmode = (__force unsigned int)state->state; 6089759b0fbSOlga Kornievskaia __entry->stateid_seq = 6099759b0fbSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 6109759b0fbSOlga Kornievskaia __entry->stateid_hash = 6119759b0fbSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 6129759b0fbSOlga Kornievskaia ), 6139759b0fbSOlga Kornievskaia 6149759b0fbSOlga Kornievskaia TP_printk( 6159759b0fbSOlga Kornievskaia "fmode=%s fileid=%02x:%02x:%llu " 6169759b0fbSOlga Kornievskaia "fhandle=0x%08x stateid=%d:0x%08x", 6179d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 6189759b0fbSOlga Kornievskaia "closed", 6199759b0fbSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 6209759b0fbSOlga Kornievskaia (unsigned long long)__entry->fileid, 6219759b0fbSOlga Kornievskaia __entry->fhandle, 6229759b0fbSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 6239759b0fbSOlga Kornievskaia ) 6249759b0fbSOlga Kornievskaia ); 6259759b0fbSOlga Kornievskaia 62642113a75STrond Myklebust TRACE_EVENT(nfs4_close, 62742113a75STrond Myklebust TP_PROTO( 62842113a75STrond Myklebust const struct nfs4_state *state, 62942113a75STrond Myklebust const struct nfs_closeargs *args, 63042113a75STrond Myklebust const struct nfs_closeres *res, 63142113a75STrond Myklebust int error 63242113a75STrond Myklebust ), 63342113a75STrond Myklebust 63442113a75STrond Myklebust TP_ARGS(state, args, res, error), 63542113a75STrond Myklebust 63642113a75STrond Myklebust TP_STRUCT__entry( 63742113a75STrond Myklebust __field(dev_t, dev) 63842113a75STrond Myklebust __field(u32, fhandle) 63942113a75STrond Myklebust __field(u64, fileid) 64042113a75STrond Myklebust __field(unsigned int, fmode) 64196650e2eSChuck Lever __field(unsigned long, error) 64248c9579aSOlga Kornievskaia __field(int, stateid_seq) 64348c9579aSOlga Kornievskaia __field(u32, stateid_hash) 64442113a75STrond Myklebust ), 64542113a75STrond Myklebust 64642113a75STrond Myklebust TP_fast_assign( 64742113a75STrond Myklebust const struct inode *inode = state->inode; 64842113a75STrond Myklebust 64942113a75STrond Myklebust __entry->dev = inode->i_sb->s_dev; 65042113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 65142113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 65242113a75STrond Myklebust __entry->fmode = (__force unsigned int)state->state; 653118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 65448c9579aSOlga Kornievskaia __entry->stateid_seq = 65548c9579aSOlga Kornievskaia be32_to_cpu(args->stateid.seqid); 65648c9579aSOlga Kornievskaia __entry->stateid_hash = 65748c9579aSOlga Kornievskaia nfs_stateid_hash(&args->stateid); 65842113a75STrond Myklebust ), 65942113a75STrond Myklebust 66042113a75STrond Myklebust TP_printk( 66196650e2eSChuck Lever "error=%ld (%s) fmode=%s fileid=%02x:%02x:%llu " 66248c9579aSOlga Kornievskaia "fhandle=0x%08x openstateid=%d:0x%08x", 66396650e2eSChuck Lever -__entry->error, 6648791545eSChuck Lever show_nfs4_status(__entry->error), 6659d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 66642113a75STrond Myklebust "closed", 66742113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 66842113a75STrond Myklebust (unsigned long long)__entry->fileid, 66948c9579aSOlga Kornievskaia __entry->fhandle, 67048c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 67142113a75STrond Myklebust ) 67242113a75STrond Myklebust ); 67342113a75STrond Myklebust 674d1b748a5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_lock_event, 675d1b748a5STrond Myklebust TP_PROTO( 676d1b748a5STrond Myklebust const struct file_lock *request, 677d1b748a5STrond Myklebust const struct nfs4_state *state, 678d1b748a5STrond Myklebust int cmd, 679d1b748a5STrond Myklebust int error 680d1b748a5STrond Myklebust ), 681d1b748a5STrond Myklebust 682d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error), 683d1b748a5STrond Myklebust 684d1b748a5STrond Myklebust TP_STRUCT__entry( 68596650e2eSChuck Lever __field(unsigned long, error) 6869d2d48bbSChuck Lever __field(unsigned long, cmd) 6879d2d48bbSChuck Lever __field(unsigned long, type) 688d1b748a5STrond Myklebust __field(loff_t, start) 689d1b748a5STrond Myklebust __field(loff_t, end) 690d1b748a5STrond Myklebust __field(dev_t, dev) 691d1b748a5STrond Myklebust __field(u32, fhandle) 692d1b748a5STrond Myklebust __field(u64, fileid) 69348c9579aSOlga Kornievskaia __field(int, stateid_seq) 69448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 695d1b748a5STrond Myklebust ), 696d1b748a5STrond Myklebust 697d1b748a5STrond Myklebust TP_fast_assign( 698d1b748a5STrond Myklebust const struct inode *inode = state->inode; 699d1b748a5STrond Myklebust 700118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 701d1b748a5STrond Myklebust __entry->cmd = cmd; 702d1b748a5STrond Myklebust __entry->type = request->fl_type; 703d1b748a5STrond Myklebust __entry->start = request->fl_start; 704d1b748a5STrond Myklebust __entry->end = request->fl_end; 705d1b748a5STrond Myklebust __entry->dev = inode->i_sb->s_dev; 706d1b748a5STrond Myklebust __entry->fileid = NFS_FILEID(inode); 707d1b748a5STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 70848c9579aSOlga Kornievskaia __entry->stateid_seq = 70948c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 71048c9579aSOlga Kornievskaia __entry->stateid_hash = 71148c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 712d1b748a5STrond Myklebust ), 713d1b748a5STrond Myklebust 714d1b748a5STrond Myklebust TP_printk( 71596650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 71648c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 71748c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 71896650e2eSChuck Lever -__entry->error, 7198791545eSChuck Lever show_nfs4_status(__entry->error), 7209d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 7219d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 722d1b748a5STrond Myklebust (long long)__entry->start, 723d1b748a5STrond Myklebust (long long)__entry->end, 724d1b748a5STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 725d1b748a5STrond Myklebust (unsigned long long)__entry->fileid, 72648c9579aSOlga Kornievskaia __entry->fhandle, 72748c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 728d1b748a5STrond Myklebust ) 729d1b748a5STrond Myklebust ); 730d1b748a5STrond Myklebust 731d1b748a5STrond Myklebust #define DEFINE_NFS4_LOCK_EVENT(name) \ 732d1b748a5STrond Myklebust DEFINE_EVENT(nfs4_lock_event, name, \ 733d1b748a5STrond Myklebust TP_PROTO( \ 734d1b748a5STrond Myklebust const struct file_lock *request, \ 735d1b748a5STrond Myklebust const struct nfs4_state *state, \ 736d1b748a5STrond Myklebust int cmd, \ 737d1b748a5STrond Myklebust int error \ 738d1b748a5STrond Myklebust ), \ 739d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error)) 740d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock); 741d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_unlock); 742d1b748a5STrond Myklebust 74348c9579aSOlga Kornievskaia TRACE_EVENT(nfs4_set_lock, 74448c9579aSOlga Kornievskaia TP_PROTO( 74548c9579aSOlga Kornievskaia const struct file_lock *request, 74648c9579aSOlga Kornievskaia const struct nfs4_state *state, 74748c9579aSOlga Kornievskaia const nfs4_stateid *lockstateid, 74848c9579aSOlga Kornievskaia int cmd, 74948c9579aSOlga Kornievskaia int error 75048c9579aSOlga Kornievskaia ), 75148c9579aSOlga Kornievskaia 75248c9579aSOlga Kornievskaia TP_ARGS(request, state, lockstateid, cmd, error), 75348c9579aSOlga Kornievskaia 75448c9579aSOlga Kornievskaia TP_STRUCT__entry( 75596650e2eSChuck Lever __field(unsigned long, error) 7569d2d48bbSChuck Lever __field(unsigned long, cmd) 7579d2d48bbSChuck Lever __field(unsigned long, type) 75848c9579aSOlga Kornievskaia __field(loff_t, start) 75948c9579aSOlga Kornievskaia __field(loff_t, end) 76048c9579aSOlga Kornievskaia __field(dev_t, dev) 76148c9579aSOlga Kornievskaia __field(u32, fhandle) 76248c9579aSOlga Kornievskaia __field(u64, fileid) 76348c9579aSOlga Kornievskaia __field(int, stateid_seq) 76448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 76548c9579aSOlga Kornievskaia __field(int, lockstateid_seq) 76648c9579aSOlga Kornievskaia __field(u32, lockstateid_hash) 76748c9579aSOlga Kornievskaia ), 76848c9579aSOlga Kornievskaia 76948c9579aSOlga Kornievskaia TP_fast_assign( 77048c9579aSOlga Kornievskaia const struct inode *inode = state->inode; 77148c9579aSOlga Kornievskaia 772118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 77348c9579aSOlga Kornievskaia __entry->cmd = cmd; 77448c9579aSOlga Kornievskaia __entry->type = request->fl_type; 77548c9579aSOlga Kornievskaia __entry->start = request->fl_start; 77648c9579aSOlga Kornievskaia __entry->end = request->fl_end; 77748c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 77848c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 77948c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 78048c9579aSOlga Kornievskaia __entry->stateid_seq = 78148c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 78248c9579aSOlga Kornievskaia __entry->stateid_hash = 78348c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 78448c9579aSOlga Kornievskaia __entry->lockstateid_seq = 78548c9579aSOlga Kornievskaia be32_to_cpu(lockstateid->seqid); 78648c9579aSOlga Kornievskaia __entry->lockstateid_hash = 78748c9579aSOlga Kornievskaia nfs_stateid_hash(lockstateid); 78848c9579aSOlga Kornievskaia ), 78948c9579aSOlga Kornievskaia 79048c9579aSOlga Kornievskaia TP_printk( 79196650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 79248c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 79348c9579aSOlga Kornievskaia "stateid=%d:0x%08x lockstateid=%d:0x%08x", 79496650e2eSChuck Lever -__entry->error, 7958791545eSChuck Lever show_nfs4_status(__entry->error), 7969d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 7979d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 79848c9579aSOlga Kornievskaia (long long)__entry->start, 79948c9579aSOlga Kornievskaia (long long)__entry->end, 80048c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 80148c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 80248c9579aSOlga Kornievskaia __entry->fhandle, 80348c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 80448c9579aSOlga Kornievskaia __entry->lockstateid_seq, __entry->lockstateid_hash 80548c9579aSOlga Kornievskaia ) 80648c9579aSOlga Kornievskaia ); 80748c9579aSOlga Kornievskaia 80821f86d2dSChuck Lever TRACE_DEFINE_ENUM(LK_STATE_IN_USE); 80921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_DELEGATED_STATE); 81021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_OPEN_STATE); 81121f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDONLY_STATE); 81221f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_WRONLY_STATE); 81321f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDWR_STATE); 81421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_REBOOT); 81521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_NOGRACE); 81621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_POSIX_LOCKS); 81721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECOVERY_FAILED); 81821f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_MAY_NOTIFY_LOCK); 81921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_CHANGE_WAIT); 82021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_DST_SSC_COPY_STATE); 82121f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_SRC_SSC_COPY_STATE); 82221f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_SRV_SSC_COPY_STATE); 82321f86d2dSChuck Lever 82421f86d2dSChuck Lever #define show_nfs4_state_flags(flags) \ 82521f86d2dSChuck Lever __print_flags(flags, "|", \ 82621f86d2dSChuck Lever { LK_STATE_IN_USE, "IN_USE" }, \ 82721f86d2dSChuck Lever { NFS_DELEGATED_STATE, "DELEGATED" }, \ 82821f86d2dSChuck Lever { NFS_OPEN_STATE, "OPEN" }, \ 82921f86d2dSChuck Lever { NFS_O_RDONLY_STATE, "O_RDONLY" }, \ 83021f86d2dSChuck Lever { NFS_O_WRONLY_STATE, "O_WRONLY" }, \ 83121f86d2dSChuck Lever { NFS_O_RDWR_STATE, "O_RDWR" }, \ 83221f86d2dSChuck Lever { NFS_STATE_RECLAIM_REBOOT, "RECLAIM_REBOOT" }, \ 83321f86d2dSChuck Lever { NFS_STATE_RECLAIM_NOGRACE, "RECLAIM_NOGRACE" }, \ 83421f86d2dSChuck Lever { NFS_STATE_POSIX_LOCKS, "POSIX_LOCKS" }, \ 83521f86d2dSChuck Lever { NFS_STATE_RECOVERY_FAILED, "RECOVERY_FAILED" }, \ 83621f86d2dSChuck Lever { NFS_STATE_MAY_NOTIFY_LOCK, "MAY_NOTIFY_LOCK" }, \ 83721f86d2dSChuck Lever { NFS_STATE_CHANGE_WAIT, "CHANGE_WAIT" }, \ 83821f86d2dSChuck Lever { NFS_CLNT_DST_SSC_COPY_STATE, "CLNT_DST_SSC_COPY" }, \ 83921f86d2dSChuck Lever { NFS_CLNT_SRC_SSC_COPY_STATE, "CLNT_SRC_SSC_COPY" }, \ 84021f86d2dSChuck Lever { NFS_SRV_SSC_COPY_STATE, "SRV_SSC_COPY" }) 84121f86d2dSChuck Lever 84221f86d2dSChuck Lever #define show_nfs4_lock_flags(flags) \ 84321f86d2dSChuck Lever __print_flags(flags, "|", \ 84421f86d2dSChuck Lever { BIT(NFS_LOCK_INITIALIZED), "INITIALIZED" }, \ 84521f86d2dSChuck Lever { BIT(NFS_LOCK_LOST), "LOST" }) 84621f86d2dSChuck Lever 84721f86d2dSChuck Lever TRACE_EVENT(nfs4_state_lock_reclaim, 84821f86d2dSChuck Lever TP_PROTO( 84921f86d2dSChuck Lever const struct nfs4_state *state, 85021f86d2dSChuck Lever const struct nfs4_lock_state *lock 85121f86d2dSChuck Lever ), 85221f86d2dSChuck Lever 85321f86d2dSChuck Lever TP_ARGS(state, lock), 85421f86d2dSChuck Lever 85521f86d2dSChuck Lever TP_STRUCT__entry( 85621f86d2dSChuck Lever __field(dev_t, dev) 85721f86d2dSChuck Lever __field(u32, fhandle) 85821f86d2dSChuck Lever __field(u64, fileid) 85921f86d2dSChuck Lever __field(unsigned long, state_flags) 86021f86d2dSChuck Lever __field(unsigned long, lock_flags) 86121f86d2dSChuck Lever __field(int, stateid_seq) 86221f86d2dSChuck Lever __field(u32, stateid_hash) 86321f86d2dSChuck Lever ), 86421f86d2dSChuck Lever 86521f86d2dSChuck Lever TP_fast_assign( 86621f86d2dSChuck Lever const struct inode *inode = state->inode; 86721f86d2dSChuck Lever 86821f86d2dSChuck Lever __entry->dev = inode->i_sb->s_dev; 86921f86d2dSChuck Lever __entry->fileid = NFS_FILEID(inode); 87021f86d2dSChuck Lever __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 87121f86d2dSChuck Lever __entry->state_flags = state->flags; 87221f86d2dSChuck Lever __entry->lock_flags = lock->ls_flags; 87321f86d2dSChuck Lever __entry->stateid_seq = 87421f86d2dSChuck Lever be32_to_cpu(state->stateid.seqid); 87521f86d2dSChuck Lever __entry->stateid_hash = 87621f86d2dSChuck Lever nfs_stateid_hash(&state->stateid); 87721f86d2dSChuck Lever ), 87821f86d2dSChuck Lever 87921f86d2dSChuck Lever TP_printk( 88021f86d2dSChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 88121f86d2dSChuck Lever "stateid=%d:0x%08x state_flags=%s lock_flags=%s", 88221f86d2dSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 88321f86d2dSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 88421f86d2dSChuck Lever __entry->stateid_seq, __entry->stateid_hash, 88521f86d2dSChuck Lever show_nfs4_state_flags(__entry->state_flags), 88621f86d2dSChuck Lever show_nfs4_lock_flags(__entry->lock_flags) 88721f86d2dSChuck Lever ) 88821f86d2dSChuck Lever ) 88921f86d2dSChuck Lever 890ca8acf8dSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_set_delegation_event, 891ca8acf8dSTrond Myklebust TP_PROTO( 892ca8acf8dSTrond Myklebust const struct inode *inode, 893ca8acf8dSTrond Myklebust fmode_t fmode 894ca8acf8dSTrond Myklebust ), 895ca8acf8dSTrond Myklebust 896ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode), 897ca8acf8dSTrond Myklebust 898ca8acf8dSTrond Myklebust TP_STRUCT__entry( 899ca8acf8dSTrond Myklebust __field(dev_t, dev) 900ca8acf8dSTrond Myklebust __field(u32, fhandle) 901ca8acf8dSTrond Myklebust __field(u64, fileid) 902ca8acf8dSTrond Myklebust __field(unsigned int, fmode) 903ca8acf8dSTrond Myklebust ), 904ca8acf8dSTrond Myklebust 905ca8acf8dSTrond Myklebust TP_fast_assign( 906ca8acf8dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 907ca8acf8dSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 908ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 909ca8acf8dSTrond Myklebust __entry->fmode = (__force unsigned int)fmode; 910ca8acf8dSTrond Myklebust ), 911ca8acf8dSTrond Myklebust 912ca8acf8dSTrond Myklebust TP_printk( 913ca8acf8dSTrond Myklebust "fmode=%s fileid=%02x:%02x:%llu fhandle=0x%08x", 9149d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 915ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 916ca8acf8dSTrond Myklebust (unsigned long long)__entry->fileid, 917ca8acf8dSTrond Myklebust __entry->fhandle 918ca8acf8dSTrond Myklebust ) 919ca8acf8dSTrond Myklebust ); 920ca8acf8dSTrond Myklebust #define DEFINE_NFS4_SET_DELEGATION_EVENT(name) \ 921ca8acf8dSTrond Myklebust DEFINE_EVENT(nfs4_set_delegation_event, name, \ 922ca8acf8dSTrond Myklebust TP_PROTO( \ 923ca8acf8dSTrond Myklebust const struct inode *inode, \ 924ca8acf8dSTrond Myklebust fmode_t fmode \ 925ca8acf8dSTrond Myklebust ), \ 926ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode)) 927ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_set_delegation); 928ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_reclaim_delegation); 929ca8acf8dSTrond Myklebust 930ca8acf8dSTrond Myklebust TRACE_EVENT(nfs4_delegreturn_exit, 931ca8acf8dSTrond Myklebust TP_PROTO( 932ca8acf8dSTrond Myklebust const struct nfs4_delegreturnargs *args, 933ca8acf8dSTrond Myklebust const struct nfs4_delegreturnres *res, 934ca8acf8dSTrond Myklebust int error 935ca8acf8dSTrond Myklebust ), 936ca8acf8dSTrond Myklebust 937ca8acf8dSTrond Myklebust TP_ARGS(args, res, error), 938ca8acf8dSTrond Myklebust 939ca8acf8dSTrond Myklebust TP_STRUCT__entry( 940ca8acf8dSTrond Myklebust __field(dev_t, dev) 941ca8acf8dSTrond Myklebust __field(u32, fhandle) 94296650e2eSChuck Lever __field(unsigned long, error) 94348c9579aSOlga Kornievskaia __field(int, stateid_seq) 94448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 945ca8acf8dSTrond Myklebust ), 946ca8acf8dSTrond Myklebust 947ca8acf8dSTrond Myklebust TP_fast_assign( 948ca8acf8dSTrond Myklebust __entry->dev = res->server->s_dev; 949ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(args->fhandle); 950118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 95148c9579aSOlga Kornievskaia __entry->stateid_seq = 95248c9579aSOlga Kornievskaia be32_to_cpu(args->stateid->seqid); 95348c9579aSOlga Kornievskaia __entry->stateid_hash = 95448c9579aSOlga Kornievskaia nfs_stateid_hash(args->stateid); 955ca8acf8dSTrond Myklebust ), 956ca8acf8dSTrond Myklebust 957ca8acf8dSTrond Myklebust TP_printk( 95896650e2eSChuck Lever "error=%ld (%s) dev=%02x:%02x fhandle=0x%08x " 95948c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 96096650e2eSChuck Lever -__entry->error, 9618791545eSChuck Lever show_nfs4_status(__entry->error), 962ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 96348c9579aSOlga Kornievskaia __entry->fhandle, 96448c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 965ca8acf8dSTrond Myklebust ) 966ca8acf8dSTrond Myklebust ); 967ca8acf8dSTrond Myklebust 96808cb47faSTrond Myklebust #ifdef CONFIG_NFS_V4_1 96908cb47faSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_test_stateid_event, 97008cb47faSTrond Myklebust TP_PROTO( 97108cb47faSTrond Myklebust const struct nfs4_state *state, 97208cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, 97308cb47faSTrond Myklebust int error 97408cb47faSTrond Myklebust ), 97508cb47faSTrond Myklebust 97608cb47faSTrond Myklebust TP_ARGS(state, lsp, error), 97708cb47faSTrond Myklebust 97808cb47faSTrond Myklebust TP_STRUCT__entry( 97996650e2eSChuck Lever __field(unsigned long, error) 98008cb47faSTrond Myklebust __field(dev_t, dev) 98108cb47faSTrond Myklebust __field(u32, fhandle) 98208cb47faSTrond Myklebust __field(u64, fileid) 98348c9579aSOlga Kornievskaia __field(int, stateid_seq) 98448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 98508cb47faSTrond Myklebust ), 98608cb47faSTrond Myklebust 98708cb47faSTrond Myklebust TP_fast_assign( 98808cb47faSTrond Myklebust const struct inode *inode = state->inode; 98908cb47faSTrond Myklebust 990118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 99108cb47faSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 99208cb47faSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 99308cb47faSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 99448c9579aSOlga Kornievskaia __entry->stateid_seq = 99548c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 99648c9579aSOlga Kornievskaia __entry->stateid_hash = 99748c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 99808cb47faSTrond Myklebust ), 99908cb47faSTrond Myklebust 100008cb47faSTrond Myklebust TP_printk( 100196650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 100248c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 100396650e2eSChuck Lever -__entry->error, 10048791545eSChuck Lever show_nfs4_status(__entry->error), 100508cb47faSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 100608cb47faSTrond Myklebust (unsigned long long)__entry->fileid, 100748c9579aSOlga Kornievskaia __entry->fhandle, 100848c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 100908cb47faSTrond Myklebust ) 101008cb47faSTrond Myklebust ); 101108cb47faSTrond Myklebust 101208cb47faSTrond Myklebust #define DEFINE_NFS4_TEST_STATEID_EVENT(name) \ 101308cb47faSTrond Myklebust DEFINE_EVENT(nfs4_test_stateid_event, name, \ 101408cb47faSTrond Myklebust TP_PROTO( \ 101508cb47faSTrond Myklebust const struct nfs4_state *state, \ 101608cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, \ 101708cb47faSTrond Myklebust int error \ 101808cb47faSTrond Myklebust ), \ 101908cb47faSTrond Myklebust TP_ARGS(state, lsp, error)) 102008cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid); 102108cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid); 102208cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid); 102308cb47faSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 102408cb47faSTrond Myklebust 1025078ea3dfSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_lookup_event, 1026078ea3dfSTrond Myklebust TP_PROTO( 1027078ea3dfSTrond Myklebust const struct inode *dir, 1028078ea3dfSTrond Myklebust const struct qstr *name, 1029078ea3dfSTrond Myklebust int error 1030078ea3dfSTrond Myklebust ), 1031078ea3dfSTrond Myklebust 1032078ea3dfSTrond Myklebust TP_ARGS(dir, name, error), 1033078ea3dfSTrond Myklebust 1034078ea3dfSTrond Myklebust TP_STRUCT__entry( 1035078ea3dfSTrond Myklebust __field(dev_t, dev) 103696650e2eSChuck Lever __field(unsigned long, error) 1037078ea3dfSTrond Myklebust __field(u64, dir) 1038078ea3dfSTrond Myklebust __string(name, name->name) 1039078ea3dfSTrond Myklebust ), 1040078ea3dfSTrond Myklebust 1041078ea3dfSTrond Myklebust TP_fast_assign( 1042078ea3dfSTrond Myklebust __entry->dev = dir->i_sb->s_dev; 1043078ea3dfSTrond Myklebust __entry->dir = NFS_FILEID(dir); 104496650e2eSChuck Lever __entry->error = -error; 1045078ea3dfSTrond Myklebust __assign_str(name, name->name); 1046078ea3dfSTrond Myklebust ), 1047078ea3dfSTrond Myklebust 1048078ea3dfSTrond Myklebust TP_printk( 104996650e2eSChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 105096650e2eSChuck Lever -__entry->error, 10518791545eSChuck Lever show_nfs4_status(__entry->error), 1052078ea3dfSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1053078ea3dfSTrond Myklebust (unsigned long long)__entry->dir, 1054078ea3dfSTrond Myklebust __get_str(name) 1055078ea3dfSTrond Myklebust ) 1056078ea3dfSTrond Myklebust ); 1057078ea3dfSTrond Myklebust 1058078ea3dfSTrond Myklebust #define DEFINE_NFS4_LOOKUP_EVENT(name) \ 1059078ea3dfSTrond Myklebust DEFINE_EVENT(nfs4_lookup_event, name, \ 1060078ea3dfSTrond Myklebust TP_PROTO( \ 1061078ea3dfSTrond Myklebust const struct inode *dir, \ 1062078ea3dfSTrond Myklebust const struct qstr *name, \ 1063078ea3dfSTrond Myklebust int error \ 1064078ea3dfSTrond Myklebust ), \ 1065078ea3dfSTrond Myklebust TP_ARGS(dir, name, error)) 1066078ea3dfSTrond Myklebust 1067078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_lookup); 1068078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_symlink); 1069078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mkdir); 1070078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mknod); 1071078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove); 1072078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations); 1073078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo); 1074078ea3dfSTrond Myklebust 10755b5faaf6SJeff Layton TRACE_EVENT(nfs4_lookupp, 10765b5faaf6SJeff Layton TP_PROTO( 10775b5faaf6SJeff Layton const struct inode *inode, 10785b5faaf6SJeff Layton int error 10795b5faaf6SJeff Layton ), 10805b5faaf6SJeff Layton 10815b5faaf6SJeff Layton TP_ARGS(inode, error), 10825b5faaf6SJeff Layton 10835b5faaf6SJeff Layton TP_STRUCT__entry( 10845b5faaf6SJeff Layton __field(dev_t, dev) 10855b5faaf6SJeff Layton __field(u64, ino) 108696650e2eSChuck Lever __field(unsigned long, error) 10875b5faaf6SJeff Layton ), 10885b5faaf6SJeff Layton 10895b5faaf6SJeff Layton TP_fast_assign( 10905b5faaf6SJeff Layton __entry->dev = inode->i_sb->s_dev; 10915b5faaf6SJeff Layton __entry->ino = NFS_FILEID(inode); 1092118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 10935b5faaf6SJeff Layton ), 10945b5faaf6SJeff Layton 10955b5faaf6SJeff Layton TP_printk( 109696650e2eSChuck Lever "error=%ld (%s) inode=%02x:%02x:%llu", 109796650e2eSChuck Lever -__entry->error, 10988791545eSChuck Lever show_nfs4_status(__entry->error), 10995b5faaf6SJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 11005b5faaf6SJeff Layton (unsigned long long)__entry->ino 11015b5faaf6SJeff Layton ) 11025b5faaf6SJeff Layton ); 11035b5faaf6SJeff Layton 1104fbc6f7c2STrond Myklebust TRACE_EVENT(nfs4_rename, 1105fbc6f7c2STrond Myklebust TP_PROTO( 1106fbc6f7c2STrond Myklebust const struct inode *olddir, 1107fbc6f7c2STrond Myklebust const struct qstr *oldname, 1108fbc6f7c2STrond Myklebust const struct inode *newdir, 1109fbc6f7c2STrond Myklebust const struct qstr *newname, 1110fbc6f7c2STrond Myklebust int error 1111fbc6f7c2STrond Myklebust ), 1112fbc6f7c2STrond Myklebust 1113fbc6f7c2STrond Myklebust TP_ARGS(olddir, oldname, newdir, newname, error), 1114fbc6f7c2STrond Myklebust 1115fbc6f7c2STrond Myklebust TP_STRUCT__entry( 1116fbc6f7c2STrond Myklebust __field(dev_t, dev) 111796650e2eSChuck Lever __field(unsigned long, error) 1118fbc6f7c2STrond Myklebust __field(u64, olddir) 1119fbc6f7c2STrond Myklebust __string(oldname, oldname->name) 1120fbc6f7c2STrond Myklebust __field(u64, newdir) 1121fbc6f7c2STrond Myklebust __string(newname, newname->name) 1122fbc6f7c2STrond Myklebust ), 1123fbc6f7c2STrond Myklebust 1124fbc6f7c2STrond Myklebust TP_fast_assign( 1125fbc6f7c2STrond Myklebust __entry->dev = olddir->i_sb->s_dev; 1126fbc6f7c2STrond Myklebust __entry->olddir = NFS_FILEID(olddir); 1127fbc6f7c2STrond Myklebust __entry->newdir = NFS_FILEID(newdir); 1128118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1129fbc6f7c2STrond Myklebust __assign_str(oldname, oldname->name); 1130fbc6f7c2STrond Myklebust __assign_str(newname, newname->name); 1131fbc6f7c2STrond Myklebust ), 1132fbc6f7c2STrond Myklebust 1133fbc6f7c2STrond Myklebust TP_printk( 113496650e2eSChuck Lever "error=%ld (%s) oldname=%02x:%02x:%llu/%s " 1135fbc6f7c2STrond Myklebust "newname=%02x:%02x:%llu/%s", 113696650e2eSChuck Lever -__entry->error, 11378791545eSChuck Lever show_nfs4_status(__entry->error), 1138fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1139fbc6f7c2STrond Myklebust (unsigned long long)__entry->olddir, 1140fbc6f7c2STrond Myklebust __get_str(oldname), 1141fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1142fbc6f7c2STrond Myklebust (unsigned long long)__entry->newdir, 1143fbc6f7c2STrond Myklebust __get_str(newname) 1144fbc6f7c2STrond Myklebust ) 1145fbc6f7c2STrond Myklebust ); 1146fbc6f7c2STrond Myklebust 1147c1578b76STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_event, 1148c1578b76STrond Myklebust TP_PROTO( 1149c1578b76STrond Myklebust const struct inode *inode, 1150c1578b76STrond Myklebust int error 1151c1578b76STrond Myklebust ), 1152c1578b76STrond Myklebust 1153c1578b76STrond Myklebust TP_ARGS(inode, error), 1154c1578b76STrond Myklebust 1155c1578b76STrond Myklebust TP_STRUCT__entry( 1156c1578b76STrond Myklebust __field(dev_t, dev) 1157c1578b76STrond Myklebust __field(u32, fhandle) 1158c1578b76STrond Myklebust __field(u64, fileid) 115996650e2eSChuck Lever __field(unsigned long, error) 1160c1578b76STrond Myklebust ), 1161c1578b76STrond Myklebust 1162c1578b76STrond Myklebust TP_fast_assign( 1163c1578b76STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1164c1578b76STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1165c1578b76STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 116696650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 1167c1578b76STrond Myklebust ), 1168c1578b76STrond Myklebust 1169c1578b76STrond Myklebust TP_printk( 117096650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x", 117196650e2eSChuck Lever -__entry->error, 11728791545eSChuck Lever show_nfs4_status(__entry->error), 1173c1578b76STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1174c1578b76STrond Myklebust (unsigned long long)__entry->fileid, 1175c1578b76STrond Myklebust __entry->fhandle 1176c1578b76STrond Myklebust ) 1177c1578b76STrond Myklebust ); 1178c1578b76STrond Myklebust 1179c1578b76STrond Myklebust #define DEFINE_NFS4_INODE_EVENT(name) \ 1180c1578b76STrond Myklebust DEFINE_EVENT(nfs4_inode_event, name, \ 1181c1578b76STrond Myklebust TP_PROTO( \ 1182c1578b76STrond Myklebust const struct inode *inode, \ 1183c1578b76STrond Myklebust int error \ 1184c1578b76STrond Myklebust ), \ 1185c1578b76STrond Myklebust TP_ARGS(inode, error)) 1186c1578b76STrond Myklebust 1187c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_access); 1188c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readlink); 1189c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readdir); 1190c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_acl); 1191c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_acl); 1192c1578b76STrond Myklebust #ifdef CONFIG_NFS_V4_SECURITY_LABEL 1193c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label); 1194c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label); 1195c1578b76STrond Myklebust #endif /* CONFIG_NFS_V4_SECURITY_LABEL */ 119648c9579aSOlga Kornievskaia 119748c9579aSOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_inode_stateid_event, 119848c9579aSOlga Kornievskaia TP_PROTO( 119948c9579aSOlga Kornievskaia const struct inode *inode, 120048c9579aSOlga Kornievskaia const nfs4_stateid *stateid, 120148c9579aSOlga Kornievskaia int error 120248c9579aSOlga Kornievskaia ), 120348c9579aSOlga Kornievskaia 120448c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error), 120548c9579aSOlga Kornievskaia 120648c9579aSOlga Kornievskaia TP_STRUCT__entry( 120748c9579aSOlga Kornievskaia __field(dev_t, dev) 120848c9579aSOlga Kornievskaia __field(u32, fhandle) 120948c9579aSOlga Kornievskaia __field(u64, fileid) 121096650e2eSChuck Lever __field(unsigned long, error) 121148c9579aSOlga Kornievskaia __field(int, stateid_seq) 121248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 121348c9579aSOlga Kornievskaia ), 121448c9579aSOlga Kornievskaia 121548c9579aSOlga Kornievskaia TP_fast_assign( 121648c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 121748c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 121848c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1219118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 122048c9579aSOlga Kornievskaia __entry->stateid_seq = 122148c9579aSOlga Kornievskaia be32_to_cpu(stateid->seqid); 122248c9579aSOlga Kornievskaia __entry->stateid_hash = 122348c9579aSOlga Kornievskaia nfs_stateid_hash(stateid); 122448c9579aSOlga Kornievskaia ), 122548c9579aSOlga Kornievskaia 122648c9579aSOlga Kornievskaia TP_printk( 122796650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 122848c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 122996650e2eSChuck Lever -__entry->error, 12308791545eSChuck Lever show_nfs4_status(__entry->error), 123148c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 123248c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 123348c9579aSOlga Kornievskaia __entry->fhandle, 123448c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 123548c9579aSOlga Kornievskaia ) 123648c9579aSOlga Kornievskaia ); 123748c9579aSOlga Kornievskaia 123848c9579aSOlga Kornievskaia #define DEFINE_NFS4_INODE_STATEID_EVENT(name) \ 123948c9579aSOlga Kornievskaia DEFINE_EVENT(nfs4_inode_stateid_event, name, \ 124048c9579aSOlga Kornievskaia TP_PROTO( \ 124148c9579aSOlga Kornievskaia const struct inode *inode, \ 124248c9579aSOlga Kornievskaia const nfs4_stateid *stateid, \ 124348c9579aSOlga Kornievskaia int error \ 124448c9579aSOlga Kornievskaia ), \ 124548c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error)) 124648c9579aSOlga Kornievskaia 124748c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr); 124848c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn); 1249ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update); 1250ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update_wait); 1251b4868b44SBenjamin Coddington DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_close_stateid_update_wait); 1252c1578b76STrond Myklebust 1253b5f875a9STrond Myklebust DECLARE_EVENT_CLASS(nfs4_getattr_event, 1254b5f875a9STrond Myklebust TP_PROTO( 1255b5f875a9STrond Myklebust const struct nfs_server *server, 1256b5f875a9STrond Myklebust const struct nfs_fh *fhandle, 1257b5f875a9STrond Myklebust const struct nfs_fattr *fattr, 1258b5f875a9STrond Myklebust int error 1259b5f875a9STrond Myklebust ), 1260b5f875a9STrond Myklebust 1261b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error), 1262b5f875a9STrond Myklebust 1263b5f875a9STrond Myklebust TP_STRUCT__entry( 1264b5f875a9STrond Myklebust __field(dev_t, dev) 1265b5f875a9STrond Myklebust __field(u32, fhandle) 1266b5f875a9STrond Myklebust __field(u64, fileid) 1267b5f875a9STrond Myklebust __field(unsigned int, valid) 126896650e2eSChuck Lever __field(unsigned long, error) 1269b5f875a9STrond Myklebust ), 1270b5f875a9STrond Myklebust 1271b5f875a9STrond Myklebust TP_fast_assign( 1272b5f875a9STrond Myklebust __entry->dev = server->s_dev; 1273b5f875a9STrond Myklebust __entry->valid = fattr->valid; 1274b5f875a9STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 1275b5f875a9STrond Myklebust __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0; 1276118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1277b5f875a9STrond Myklebust ), 1278b5f875a9STrond Myklebust 1279b5f875a9STrond Myklebust TP_printk( 128096650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1281b5f875a9STrond Myklebust "valid=%s", 128296650e2eSChuck Lever -__entry->error, 12838791545eSChuck Lever show_nfs4_status(__entry->error), 1284b5f875a9STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1285b5f875a9STrond Myklebust (unsigned long long)__entry->fileid, 1286b5f875a9STrond Myklebust __entry->fhandle, 1287b5f875a9STrond Myklebust show_nfs_fattr_flags(__entry->valid) 1288b5f875a9STrond Myklebust ) 1289b5f875a9STrond Myklebust ); 1290b5f875a9STrond Myklebust 1291b5f875a9STrond Myklebust #define DEFINE_NFS4_GETATTR_EVENT(name) \ 1292b5f875a9STrond Myklebust DEFINE_EVENT(nfs4_getattr_event, name, \ 1293b5f875a9STrond Myklebust TP_PROTO( \ 1294b5f875a9STrond Myklebust const struct nfs_server *server, \ 1295b5f875a9STrond Myklebust const struct nfs_fh *fhandle, \ 1296b5f875a9STrond Myklebust const struct nfs_fattr *fattr, \ 1297b5f875a9STrond Myklebust int error \ 1298b5f875a9STrond Myklebust ), \ 1299b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error)) 1300b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr); 1301b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); 1302b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); 1303b5f875a9STrond Myklebust 13047cd14861STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_callback_event, 13057cd14861STrond Myklebust TP_PROTO( 13067cd14861STrond Myklebust const struct nfs_client *clp, 13077cd14861STrond Myklebust const struct nfs_fh *fhandle, 13087cd14861STrond Myklebust const struct inode *inode, 13097cd14861STrond Myklebust int error 13107cd14861STrond Myklebust ), 13117cd14861STrond Myklebust 13127cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error), 13137cd14861STrond Myklebust 13147cd14861STrond Myklebust TP_STRUCT__entry( 131596650e2eSChuck Lever __field(unsigned long, error) 13167cd14861STrond Myklebust __field(dev_t, dev) 13177cd14861STrond Myklebust __field(u32, fhandle) 13187cd14861STrond Myklebust __field(u64, fileid) 13193944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 13207cd14861STrond Myklebust ), 13217cd14861STrond Myklebust 13227cd14861STrond Myklebust TP_fast_assign( 1323118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 13247cd14861STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 13252edaead6STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 13267cd14861STrond Myklebust __entry->fileid = NFS_FILEID(inode); 13277cd14861STrond Myklebust __entry->dev = inode->i_sb->s_dev; 13287cd14861STrond Myklebust } else { 13297cd14861STrond Myklebust __entry->fileid = 0; 13307cd14861STrond Myklebust __entry->dev = 0; 13317cd14861STrond Myklebust } 133278c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 13337cd14861STrond Myklebust ), 13347cd14861STrond Myklebust 13357cd14861STrond Myklebust TP_printk( 133696650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 13377cd14861STrond Myklebust "dstaddr=%s", 133896650e2eSChuck Lever -__entry->error, 13398791545eSChuck Lever show_nfs4_status(__entry->error), 13407cd14861STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 13417cd14861STrond Myklebust (unsigned long long)__entry->fileid, 13427cd14861STrond Myklebust __entry->fhandle, 13437cd14861STrond Myklebust __get_str(dstaddr) 13447cd14861STrond Myklebust ) 13457cd14861STrond Myklebust ); 13467cd14861STrond Myklebust 13477cd14861STrond Myklebust #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \ 13487cd14861STrond Myklebust DEFINE_EVENT(nfs4_inode_callback_event, name, \ 13497cd14861STrond Myklebust TP_PROTO( \ 13507cd14861STrond Myklebust const struct nfs_client *clp, \ 13517cd14861STrond Myklebust const struct nfs_fh *fhandle, \ 13527cd14861STrond Myklebust const struct inode *inode, \ 13537cd14861STrond Myklebust int error \ 13547cd14861STrond Myklebust ), \ 13557cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error)) 13567cd14861STrond Myklebust DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr); 13577cd14861STrond Myklebust 1358e07db907STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event, 1359e07db907STrond Myklebust TP_PROTO( 1360e07db907STrond Myklebust const struct nfs_client *clp, 1361e07db907STrond Myklebust const struct nfs_fh *fhandle, 1362e07db907STrond Myklebust const struct inode *inode, 1363e07db907STrond Myklebust const nfs4_stateid *stateid, 1364e07db907STrond Myklebust int error 1365e07db907STrond Myklebust ), 1366e07db907STrond Myklebust 1367e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error), 1368e07db907STrond Myklebust 1369e07db907STrond Myklebust TP_STRUCT__entry( 137096650e2eSChuck Lever __field(unsigned long, error) 1371e07db907STrond Myklebust __field(dev_t, dev) 1372e07db907STrond Myklebust __field(u32, fhandle) 1373e07db907STrond Myklebust __field(u64, fileid) 13743944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 1375e07db907STrond Myklebust __field(int, stateid_seq) 1376e07db907STrond Myklebust __field(u32, stateid_hash) 1377e07db907STrond Myklebust ), 1378e07db907STrond Myklebust 1379e07db907STrond Myklebust TP_fast_assign( 1380118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1381e07db907STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 13822a534a74STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 1383e07db907STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1384e07db907STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1385e07db907STrond Myklebust } else { 1386e07db907STrond Myklebust __entry->fileid = 0; 1387e07db907STrond Myklebust __entry->dev = 0; 1388e07db907STrond Myklebust } 138978c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 1390e07db907STrond Myklebust __entry->stateid_seq = 1391e07db907STrond Myklebust be32_to_cpu(stateid->seqid); 1392e07db907STrond Myklebust __entry->stateid_hash = 1393e07db907STrond Myklebust nfs_stateid_hash(stateid); 1394e07db907STrond Myklebust ), 1395e07db907STrond Myklebust 1396e07db907STrond Myklebust TP_printk( 139796650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1398e07db907STrond Myklebust "stateid=%d:0x%08x dstaddr=%s", 139996650e2eSChuck Lever -__entry->error, 14008791545eSChuck Lever show_nfs4_status(__entry->error), 1401e07db907STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1402e07db907STrond Myklebust (unsigned long long)__entry->fileid, 1403e07db907STrond Myklebust __entry->fhandle, 1404e07db907STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 1405e07db907STrond Myklebust __get_str(dstaddr) 1406e07db907STrond Myklebust ) 1407e07db907STrond Myklebust ); 1408e07db907STrond Myklebust 1409e07db907STrond Myklebust #define DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(name) \ 1410e07db907STrond Myklebust DEFINE_EVENT(nfs4_inode_stateid_callback_event, name, \ 1411e07db907STrond Myklebust TP_PROTO( \ 1412e07db907STrond Myklebust const struct nfs_client *clp, \ 1413e07db907STrond Myklebust const struct nfs_fh *fhandle, \ 1414e07db907STrond Myklebust const struct inode *inode, \ 1415e07db907STrond Myklebust const nfs4_stateid *stateid, \ 1416e07db907STrond Myklebust int error \ 1417e07db907STrond Myklebust ), \ 1418e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error)) 1419e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_recall); 1420e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_layoutrecall_file); 14217cd14861STrond Myklebust 14221f2d30b5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_idmap_event, 14231f2d30b5STrond Myklebust TP_PROTO( 14241f2d30b5STrond Myklebust const char *name, 14251f2d30b5STrond Myklebust int len, 14261f2d30b5STrond Myklebust u32 id, 14271f2d30b5STrond Myklebust int error 14281f2d30b5STrond Myklebust ), 14291f2d30b5STrond Myklebust 14301f2d30b5STrond Myklebust TP_ARGS(name, len, id, error), 14311f2d30b5STrond Myklebust 14321f2d30b5STrond Myklebust TP_STRUCT__entry( 143396650e2eSChuck Lever __field(unsigned long, error) 14341f2d30b5STrond Myklebust __field(u32, id) 14351f2d30b5STrond Myklebust __dynamic_array(char, name, len > 0 ? len + 1 : 1) 14361f2d30b5STrond Myklebust ), 14371f2d30b5STrond Myklebust 14381f2d30b5STrond Myklebust TP_fast_assign( 14391f2d30b5STrond Myklebust if (len < 0) 14401f2d30b5STrond Myklebust len = 0; 14411f2d30b5STrond Myklebust __entry->error = error < 0 ? error : 0; 14421f2d30b5STrond Myklebust __entry->id = id; 1443752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), name, len); 1444752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 14451f2d30b5STrond Myklebust ), 14461f2d30b5STrond Myklebust 14471f2d30b5STrond Myklebust TP_printk( 144896650e2eSChuck Lever "error=%ld (%s) id=%u name=%s", 14498791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 14501f2d30b5STrond Myklebust __entry->id, 14511f2d30b5STrond Myklebust __get_str(name) 14521f2d30b5STrond Myklebust ) 14531f2d30b5STrond Myklebust ); 14541f2d30b5STrond Myklebust #define DEFINE_NFS4_IDMAP_EVENT(name) \ 14551f2d30b5STrond Myklebust DEFINE_EVENT(nfs4_idmap_event, name, \ 14561f2d30b5STrond Myklebust TP_PROTO( \ 14571f2d30b5STrond Myklebust const char *name, \ 14581f2d30b5STrond Myklebust int len, \ 14591f2d30b5STrond Myklebust u32 id, \ 14601f2d30b5STrond Myklebust int error \ 14611f2d30b5STrond Myklebust ), \ 14621f2d30b5STrond Myklebust TP_ARGS(name, len, id, error)) 14631f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_name_to_uid); 14641f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid); 14651f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name); 14661f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); 14671f2d30b5STrond Myklebust 146854898f70STrond Myklebust #ifdef CONFIG_NFS_V4_1 146954898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) \ 147054898f70STrond Myklebust (lseg ? nfs_stateid_hash(&lseg->pls_layout->plh_stateid) : 0) 147154898f70STrond Myklebust #else 147254898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) (0) 147354898f70STrond Myklebust #endif 147454898f70STrond Myklebust 1475cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_read_event, 1476cc668ab3STrond Myklebust TP_PROTO( 1477d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1478cc668ab3STrond Myklebust int error 1479cc668ab3STrond Myklebust ), 1480cc668ab3STrond Myklebust 1481d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1482cc668ab3STrond Myklebust 1483cc668ab3STrond Myklebust TP_STRUCT__entry( 1484cc668ab3STrond Myklebust __field(dev_t, dev) 1485cc668ab3STrond Myklebust __field(u32, fhandle) 1486cc668ab3STrond Myklebust __field(u64, fileid) 1487cc668ab3STrond Myklebust __field(loff_t, offset) 148825925b00STrond Myklebust __field(u32, arg_count) 148925925b00STrond Myklebust __field(u32, res_count) 149096650e2eSChuck Lever __field(unsigned long, error) 149148c9579aSOlga Kornievskaia __field(int, stateid_seq) 149248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 149354898f70STrond Myklebust __field(int, layoutstateid_seq) 149454898f70STrond Myklebust __field(u32, layoutstateid_hash) 1495cc668ab3STrond Myklebust ), 1496cc668ab3STrond Myklebust 1497cc668ab3STrond Myklebust TP_fast_assign( 1498d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 149925925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 150025925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 150125925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 150248c9579aSOlga Kornievskaia const struct nfs4_state *state = 150348c9579aSOlga Kornievskaia hdr->args.context->state; 150454898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 150525925b00STrond Myklebust 1506cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 150725925b00STrond Myklebust __entry->fileid = nfsi->fileid; 150825925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1509d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 151025925b00STrond Myklebust __entry->arg_count = hdr->args.count; 151125925b00STrond Myklebust __entry->res_count = hdr->res.count; 151296650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 151348c9579aSOlga Kornievskaia __entry->stateid_seq = 151448c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 151548c9579aSOlga Kornievskaia __entry->stateid_hash = 151648c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 151754898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 151854898f70STrond Myklebust __entry->layoutstateid_hash = 151954898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1520cc668ab3STrond Myklebust ), 1521cc668ab3STrond Myklebust 1522cc668ab3STrond Myklebust TP_printk( 152396650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 152454898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 152554898f70STrond Myklebust "layoutstateid=%d:0x%08x", 152696650e2eSChuck Lever -__entry->error, 15278791545eSChuck Lever show_nfs4_status(__entry->error), 1528cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1529cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1530cc668ab3STrond Myklebust __entry->fhandle, 1531cc668ab3STrond Myklebust (long long)__entry->offset, 153225925b00STrond Myklebust __entry->arg_count, __entry->res_count, 153354898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 153454898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1535cc668ab3STrond Myklebust ) 1536cc668ab3STrond Myklebust ); 1537cc668ab3STrond Myklebust #define DEFINE_NFS4_READ_EVENT(name) \ 1538cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_read_event, name, \ 1539cc668ab3STrond Myklebust TP_PROTO( \ 1540d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1541cc668ab3STrond Myklebust int error \ 1542cc668ab3STrond Myklebust ), \ 1543d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1544cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_read); 1545cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1546cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read); 1547cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1548cc668ab3STrond Myklebust 1549cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_write_event, 1550cc668ab3STrond Myklebust TP_PROTO( 1551d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1552cc668ab3STrond Myklebust int error 1553cc668ab3STrond Myklebust ), 1554cc668ab3STrond Myklebust 1555d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1556cc668ab3STrond Myklebust 1557cc668ab3STrond Myklebust TP_STRUCT__entry( 1558cc668ab3STrond Myklebust __field(dev_t, dev) 1559cc668ab3STrond Myklebust __field(u32, fhandle) 1560cc668ab3STrond Myklebust __field(u64, fileid) 1561cc668ab3STrond Myklebust __field(loff_t, offset) 156225925b00STrond Myklebust __field(u32, arg_count) 156325925b00STrond Myklebust __field(u32, res_count) 156496650e2eSChuck Lever __field(unsigned long, error) 156548c9579aSOlga Kornievskaia __field(int, stateid_seq) 156648c9579aSOlga Kornievskaia __field(u32, stateid_hash) 156754898f70STrond Myklebust __field(int, layoutstateid_seq) 156854898f70STrond Myklebust __field(u32, layoutstateid_hash) 1569cc668ab3STrond Myklebust ), 1570cc668ab3STrond Myklebust 1571cc668ab3STrond Myklebust TP_fast_assign( 1572d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 157325925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 157425925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 157525925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 157648c9579aSOlga Kornievskaia const struct nfs4_state *state = 157748c9579aSOlga Kornievskaia hdr->args.context->state; 157854898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 157925925b00STrond Myklebust 1580cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 158125925b00STrond Myklebust __entry->fileid = nfsi->fileid; 158225925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1583d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 158425925b00STrond Myklebust __entry->arg_count = hdr->args.count; 158525925b00STrond Myklebust __entry->res_count = hdr->res.count; 158696650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 158748c9579aSOlga Kornievskaia __entry->stateid_seq = 158848c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 158948c9579aSOlga Kornievskaia __entry->stateid_hash = 159048c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 159154898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 159254898f70STrond Myklebust __entry->layoutstateid_hash = 159354898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1594cc668ab3STrond Myklebust ), 1595cc668ab3STrond Myklebust 1596cc668ab3STrond Myklebust TP_printk( 159796650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 159854898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 159954898f70STrond Myklebust "layoutstateid=%d:0x%08x", 160096650e2eSChuck Lever -__entry->error, 16018791545eSChuck Lever show_nfs4_status(__entry->error), 1602cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1603cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1604cc668ab3STrond Myklebust __entry->fhandle, 1605cc668ab3STrond Myklebust (long long)__entry->offset, 160625925b00STrond Myklebust __entry->arg_count, __entry->res_count, 160754898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 160854898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1609cc668ab3STrond Myklebust ) 1610cc668ab3STrond Myklebust ); 1611cc668ab3STrond Myklebust 1612cc668ab3STrond Myklebust #define DEFINE_NFS4_WRITE_EVENT(name) \ 1613cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_write_event, name, \ 1614cc668ab3STrond Myklebust TP_PROTO( \ 1615d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1616cc668ab3STrond Myklebust int error \ 1617cc668ab3STrond Myklebust ), \ 1618d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1619cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_write); 1620cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1621cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write); 1622cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1623cc668ab3STrond Myklebust 1624cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_commit_event, 1625cc668ab3STrond Myklebust TP_PROTO( 1626cc668ab3STrond Myklebust const struct nfs_commit_data *data, 1627cc668ab3STrond Myklebust int error 1628cc668ab3STrond Myklebust ), 1629cc668ab3STrond Myklebust 1630cc668ab3STrond Myklebust TP_ARGS(data, error), 1631cc668ab3STrond Myklebust 1632cc668ab3STrond Myklebust TP_STRUCT__entry( 1633cc668ab3STrond Myklebust __field(dev_t, dev) 1634cc668ab3STrond Myklebust __field(u32, fhandle) 1635cc668ab3STrond Myklebust __field(u64, fileid) 163696650e2eSChuck Lever __field(unsigned long, error) 163725925b00STrond Myklebust __field(loff_t, offset) 163825925b00STrond Myklebust __field(u32, count) 163954898f70STrond Myklebust __field(int, layoutstateid_seq) 164054898f70STrond Myklebust __field(u32, layoutstateid_hash) 1641cc668ab3STrond Myklebust ), 1642cc668ab3STrond Myklebust 1643cc668ab3STrond Myklebust TP_fast_assign( 1644cc668ab3STrond Myklebust const struct inode *inode = data->inode; 164525925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 164625925b00STrond Myklebust const struct nfs_fh *fh = data->args.fh ? 164725925b00STrond Myklebust data->args.fh : &nfsi->fh; 164854898f70STrond Myklebust const struct pnfs_layout_segment *lseg = data->lseg; 164925925b00STrond Myklebust 1650cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 165125925b00STrond Myklebust __entry->fileid = nfsi->fileid; 165225925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1653cc668ab3STrond Myklebust __entry->offset = data->args.offset; 1654cc668ab3STrond Myklebust __entry->count = data->args.count; 165525925b00STrond Myklebust __entry->error = error < 0 ? -error : 0; 165654898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 165754898f70STrond Myklebust __entry->layoutstateid_hash = 165854898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1659cc668ab3STrond Myklebust ), 1660cc668ab3STrond Myklebust 1661cc668ab3STrond Myklebust TP_printk( 166296650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 166354898f70STrond Myklebust "offset=%lld count=%u layoutstateid=%d:0x%08x", 166496650e2eSChuck Lever -__entry->error, 16658791545eSChuck Lever show_nfs4_status(__entry->error), 1666cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1667cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1668cc668ab3STrond Myklebust __entry->fhandle, 1669cc668ab3STrond Myklebust (long long)__entry->offset, 167054898f70STrond Myklebust __entry->count, 167154898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1672cc668ab3STrond Myklebust ) 1673cc668ab3STrond Myklebust ); 1674cc668ab3STrond Myklebust #define DEFINE_NFS4_COMMIT_EVENT(name) \ 1675cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_commit_event, name, \ 1676cc668ab3STrond Myklebust TP_PROTO( \ 1677cc668ab3STrond Myklebust const struct nfs_commit_data *data, \ 1678cc668ab3STrond Myklebust int error \ 1679cc668ab3STrond Myklebust ), \ 1680cc668ab3STrond Myklebust TP_ARGS(data, error)) 1681cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_commit); 1682cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1683cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds); 16841037e6eaSTrond Myklebust 16851037e6eaSTrond Myklebust TRACE_EVENT(nfs4_layoutget, 16861037e6eaSTrond Myklebust TP_PROTO( 16871037e6eaSTrond Myklebust const struct nfs_open_context *ctx, 16881037e6eaSTrond Myklebust const struct pnfs_layout_range *args, 16891037e6eaSTrond Myklebust const struct pnfs_layout_range *res, 169048c9579aSOlga Kornievskaia const nfs4_stateid *layout_stateid, 16911037e6eaSTrond Myklebust int error 16921037e6eaSTrond Myklebust ), 16931037e6eaSTrond Myklebust 169448c9579aSOlga Kornievskaia TP_ARGS(ctx, args, res, layout_stateid, error), 16951037e6eaSTrond Myklebust 16961037e6eaSTrond Myklebust TP_STRUCT__entry( 16971037e6eaSTrond Myklebust __field(dev_t, dev) 16981037e6eaSTrond Myklebust __field(u32, fhandle) 16991037e6eaSTrond Myklebust __field(u64, fileid) 17001037e6eaSTrond Myklebust __field(u32, iomode) 17011037e6eaSTrond Myklebust __field(u64, offset) 17021037e6eaSTrond Myklebust __field(u64, count) 170396650e2eSChuck Lever __field(unsigned long, error) 170448c9579aSOlga Kornievskaia __field(int, stateid_seq) 170548c9579aSOlga Kornievskaia __field(u32, stateid_hash) 170648c9579aSOlga Kornievskaia __field(int, layoutstateid_seq) 170748c9579aSOlga Kornievskaia __field(u32, layoutstateid_hash) 17081037e6eaSTrond Myklebust ), 17091037e6eaSTrond Myklebust 17101037e6eaSTrond Myklebust TP_fast_assign( 17112b0143b5SDavid Howells const struct inode *inode = d_inode(ctx->dentry); 171248c9579aSOlga Kornievskaia const struct nfs4_state *state = ctx->state; 17131037e6eaSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 17141037e6eaSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 17151037e6eaSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 17161037e6eaSTrond Myklebust __entry->iomode = args->iomode; 17171037e6eaSTrond Myklebust __entry->offset = args->offset; 17181037e6eaSTrond Myklebust __entry->count = args->length; 1719118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 172048c9579aSOlga Kornievskaia __entry->stateid_seq = 172148c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 172248c9579aSOlga Kornievskaia __entry->stateid_hash = 172348c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 172448c9579aSOlga Kornievskaia if (!error) { 172548c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 172648c9579aSOlga Kornievskaia be32_to_cpu(layout_stateid->seqid); 172748c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 172848c9579aSOlga Kornievskaia nfs_stateid_hash(layout_stateid); 172948c9579aSOlga Kornievskaia } else { 173048c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 0; 173148c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 0; 173248c9579aSOlga Kornievskaia } 17331037e6eaSTrond Myklebust ), 17341037e6eaSTrond Myklebust 17351037e6eaSTrond Myklebust TP_printk( 173696650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 173748c9579aSOlga Kornievskaia "iomode=%s offset=%llu count=%llu stateid=%d:0x%08x " 173848c9579aSOlga Kornievskaia "layoutstateid=%d:0x%08x", 173996650e2eSChuck Lever -__entry->error, 17408791545eSChuck Lever show_nfs4_status(__entry->error), 17411037e6eaSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 17421037e6eaSTrond Myklebust (unsigned long long)__entry->fileid, 17431037e6eaSTrond Myklebust __entry->fhandle, 17448791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 17451037e6eaSTrond Myklebust (unsigned long long)__entry->offset, 174648c9579aSOlga Kornievskaia (unsigned long long)__entry->count, 174748c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 174848c9579aSOlga Kornievskaia __entry->layoutstateid_seq, __entry->layoutstateid_hash 17491037e6eaSTrond Myklebust ) 17501037e6eaSTrond Myklebust ); 17511037e6eaSTrond Myklebust 175248c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit); 175348c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn); 1754a19b4785STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn_on_close); 1755638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layouterror); 1756638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutstats); 17571037e6eaSTrond Myklebust 17585b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_UNKNOWN); 17595b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NO_PNFS); 17605b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RD_ZEROLEN); 17615b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_MDSTHRESH); 17625b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NOMEM); 17635b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BULK_RECALL); 17645b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_IO_TEST_FAIL); 17655b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_FOUND_CACHED); 17665b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETURN); 17675b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BLOCKED); 17685b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_INVALID_OPEN); 17695b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETRY); 17705b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET); 1771d5b9216fSTrond Myklebust TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_EXIT); 17725b2095d0SChuck Lever 17739a4bf31dSJeff Layton #define show_pnfs_update_layout_reason(reason) \ 17749a4bf31dSJeff Layton __print_symbolic(reason, \ 17759a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_UNKNOWN, "unknown" }, \ 17769a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NO_PNFS, "no pnfs" }, \ 17779a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RD_ZEROLEN, "read+zerolen" }, \ 17789a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_MDSTHRESH, "mdsthresh" }, \ 17799a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NOMEM, "nomem" }, \ 17809a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BULK_RECALL, "bulk recall" }, \ 17819a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_IO_TEST_FAIL, "io test fail" }, \ 17829a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_FOUND_CACHED, "found cached" }, \ 17839a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RETURN, "layoutreturn" }, \ 17849a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BLOCKED, "layouts blocked" }, \ 1785183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_INVALID_OPEN, "invalid open" }, \ 1786183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_RETRY, "retrying" }, \ 1787d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET, "sent layoutget" }, \ 1788d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_EXIT, "exit" }) 17899a4bf31dSJeff Layton 17909a4bf31dSJeff Layton TRACE_EVENT(pnfs_update_layout, 17919a4bf31dSJeff Layton TP_PROTO(struct inode *inode, 17929a4bf31dSJeff Layton loff_t pos, 17939a4bf31dSJeff Layton u64 count, 17949a4bf31dSJeff Layton enum pnfs_iomode iomode, 1795f4848303STrond Myklebust struct pnfs_layout_hdr *lo, 1796183d9e7bSJeff Layton struct pnfs_layout_segment *lseg, 17979a4bf31dSJeff Layton enum pnfs_update_layout_reason reason 17989a4bf31dSJeff Layton ), 1799183d9e7bSJeff Layton TP_ARGS(inode, pos, count, iomode, lo, lseg, reason), 18009a4bf31dSJeff Layton TP_STRUCT__entry( 18019a4bf31dSJeff Layton __field(dev_t, dev) 18029a4bf31dSJeff Layton __field(u64, fileid) 18039a4bf31dSJeff Layton __field(u32, fhandle) 18049a4bf31dSJeff Layton __field(loff_t, pos) 18059a4bf31dSJeff Layton __field(u64, count) 18069a4bf31dSJeff Layton __field(enum pnfs_iomode, iomode) 1807f4848303STrond Myklebust __field(int, layoutstateid_seq) 1808f4848303STrond Myklebust __field(u32, layoutstateid_hash) 1809183d9e7bSJeff Layton __field(long, lseg) 18109a4bf31dSJeff Layton __field(enum pnfs_update_layout_reason, reason) 18119a4bf31dSJeff Layton ), 18129a4bf31dSJeff Layton TP_fast_assign( 18139a4bf31dSJeff Layton __entry->dev = inode->i_sb->s_dev; 18149a4bf31dSJeff Layton __entry->fileid = NFS_FILEID(inode); 18159a4bf31dSJeff Layton __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 18169a4bf31dSJeff Layton __entry->pos = pos; 18179a4bf31dSJeff Layton __entry->count = count; 18189a4bf31dSJeff Layton __entry->iomode = iomode; 18199a4bf31dSJeff Layton __entry->reason = reason; 1820d01c6ed6STrond Myklebust if (lo != NULL && pnfs_layout_is_valid(lo)) { 1821f4848303STrond Myklebust __entry->layoutstateid_seq = 1822f4848303STrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1823f4848303STrond Myklebust __entry->layoutstateid_hash = 1824f4848303STrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1825f4848303STrond Myklebust } else { 1826f4848303STrond Myklebust __entry->layoutstateid_seq = 0; 1827f4848303STrond Myklebust __entry->layoutstateid_hash = 0; 1828f4848303STrond Myklebust } 1829183d9e7bSJeff Layton __entry->lseg = (long)lseg; 18309a4bf31dSJeff Layton ), 18319a4bf31dSJeff Layton TP_printk( 18329a4bf31dSJeff Layton "fileid=%02x:%02x:%llu fhandle=0x%08x " 1833f4848303STrond Myklebust "iomode=%s pos=%llu count=%llu " 1834183d9e7bSJeff Layton "layoutstateid=%d:0x%08x lseg=0x%lx (%s)", 18359a4bf31dSJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 18369a4bf31dSJeff Layton (unsigned long long)__entry->fileid, 18379a4bf31dSJeff Layton __entry->fhandle, 18388791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 18399a4bf31dSJeff Layton (unsigned long long)__entry->pos, 1840f4848303STrond Myklebust (unsigned long long)__entry->count, 1841f4848303STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1842183d9e7bSJeff Layton __entry->lseg, 18439a4bf31dSJeff Layton show_pnfs_update_layout_reason(__entry->reason) 18449a4bf31dSJeff Layton ) 18459a4bf31dSJeff Layton ); 18469a4bf31dSJeff Layton 1847d5b9216fSTrond Myklebust DECLARE_EVENT_CLASS(pnfs_layout_event, 1848d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, 1849d5b9216fSTrond Myklebust loff_t pos, 1850d5b9216fSTrond Myklebust u64 count, 1851d5b9216fSTrond Myklebust enum pnfs_iomode iomode, 1852d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, 1853d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg 1854d5b9216fSTrond Myklebust ), 1855d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg), 1856d5b9216fSTrond Myklebust TP_STRUCT__entry( 1857d5b9216fSTrond Myklebust __field(dev_t, dev) 1858d5b9216fSTrond Myklebust __field(u64, fileid) 1859d5b9216fSTrond Myklebust __field(u32, fhandle) 1860d5b9216fSTrond Myklebust __field(loff_t, pos) 1861d5b9216fSTrond Myklebust __field(u64, count) 1862d5b9216fSTrond Myklebust __field(enum pnfs_iomode, iomode) 1863d5b9216fSTrond Myklebust __field(int, layoutstateid_seq) 1864d5b9216fSTrond Myklebust __field(u32, layoutstateid_hash) 1865d5b9216fSTrond Myklebust __field(long, lseg) 1866d5b9216fSTrond Myklebust ), 1867d5b9216fSTrond Myklebust TP_fast_assign( 1868d5b9216fSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 1869d5b9216fSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 1870d5b9216fSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1871d5b9216fSTrond Myklebust __entry->pos = pos; 1872d5b9216fSTrond Myklebust __entry->count = count; 1873d5b9216fSTrond Myklebust __entry->iomode = iomode; 1874d01c6ed6STrond Myklebust if (lo != NULL && pnfs_layout_is_valid(lo)) { 1875d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 1876d5b9216fSTrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1877d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 1878d5b9216fSTrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1879d5b9216fSTrond Myklebust } else { 1880d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 0; 1881d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 0; 1882d5b9216fSTrond Myklebust } 1883d5b9216fSTrond Myklebust __entry->lseg = (long)lseg; 1884d5b9216fSTrond Myklebust ), 1885d5b9216fSTrond Myklebust TP_printk( 1886d5b9216fSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 1887d5b9216fSTrond Myklebust "iomode=%s pos=%llu count=%llu " 1888d5b9216fSTrond Myklebust "layoutstateid=%d:0x%08x lseg=0x%lx", 1889d5b9216fSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1890d5b9216fSTrond Myklebust (unsigned long long)__entry->fileid, 1891d5b9216fSTrond Myklebust __entry->fhandle, 18928791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 1893d5b9216fSTrond Myklebust (unsigned long long)__entry->pos, 1894d5b9216fSTrond Myklebust (unsigned long long)__entry->count, 1895d5b9216fSTrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1896d5b9216fSTrond Myklebust __entry->lseg 1897d5b9216fSTrond Myklebust ) 1898d5b9216fSTrond Myklebust ); 1899d5b9216fSTrond Myklebust 1900d5b9216fSTrond Myklebust #define DEFINE_PNFS_LAYOUT_EVENT(name) \ 1901d5b9216fSTrond Myklebust DEFINE_EVENT(pnfs_layout_event, name, \ 1902d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, \ 1903d5b9216fSTrond Myklebust loff_t pos, \ 1904d5b9216fSTrond Myklebust u64 count, \ 1905d5b9216fSTrond Myklebust enum pnfs_iomode iomode, \ 1906d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, \ 1907d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg \ 1908d5b9216fSTrond Myklebust ), \ 1909d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg)) 1910d5b9216fSTrond Myklebust 1911d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_read); 1912d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_write); 1913d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_get_mirror_count); 1914d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_done); 1915d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_done); 1916d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_pagelist); 1917d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_pagelist); 1918d5b9216fSTrond Myklebust 1919cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_event, 1920cac1d3a2STrond Myklebust TP_PROTO( 1921cac1d3a2STrond Myklebust const struct nfs_client *clp, 1922cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid 1923cac1d3a2STrond Myklebust ), 1924cac1d3a2STrond Myklebust 1925cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid), 1926cac1d3a2STrond Myklebust 1927cac1d3a2STrond Myklebust TP_STRUCT__entry( 1928cac1d3a2STrond Myklebust __string(dstaddr, clp->cl_hostname) 1929cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1930cac1d3a2STrond Myklebust ), 1931cac1d3a2STrond Myklebust 1932cac1d3a2STrond Myklebust TP_fast_assign( 1933cac1d3a2STrond Myklebust __assign_str(dstaddr, clp->cl_hostname); 1934cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1935cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1936cac1d3a2STrond Myklebust ), 1937cac1d3a2STrond Myklebust 1938cac1d3a2STrond Myklebust TP_printk( 1939cac1d3a2STrond Myklebust "deviceid=%s, dstaddr=%s", 1940cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1941cac1d3a2STrond Myklebust __get_str(dstaddr) 1942cac1d3a2STrond Myklebust ) 1943cac1d3a2STrond Myklebust ); 1944cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_EVENT(name) \ 1945cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_event, name, \ 1946cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_client *clp, \ 1947cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid \ 1948cac1d3a2STrond Myklebust ), \ 1949cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid)) 1950cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_EVENT(nfs4_deviceid_free); 1951cac1d3a2STrond Myklebust 1952cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_status, 1953cac1d3a2STrond Myklebust TP_PROTO( 1954cac1d3a2STrond Myklebust const struct nfs_server *server, 1955cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, 1956cac1d3a2STrond Myklebust int status 1957cac1d3a2STrond Myklebust ), 1958cac1d3a2STrond Myklebust 1959cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status), 1960cac1d3a2STrond Myklebust 1961cac1d3a2STrond Myklebust TP_STRUCT__entry( 1962cac1d3a2STrond Myklebust __field(dev_t, dev) 1963cac1d3a2STrond Myklebust __field(int, status) 1964cac1d3a2STrond Myklebust __string(dstaddr, server->nfs_client->cl_hostname) 1965cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1966cac1d3a2STrond Myklebust ), 1967cac1d3a2STrond Myklebust 1968cac1d3a2STrond Myklebust TP_fast_assign( 1969cac1d3a2STrond Myklebust __entry->dev = server->s_dev; 1970cac1d3a2STrond Myklebust __entry->status = status; 1971cac1d3a2STrond Myklebust __assign_str(dstaddr, server->nfs_client->cl_hostname); 1972cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1973cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1974cac1d3a2STrond Myklebust ), 1975cac1d3a2STrond Myklebust 1976cac1d3a2STrond Myklebust TP_printk( 1977cac1d3a2STrond Myklebust "dev=%02x:%02x: deviceid=%s, dstaddr=%s, status=%d", 1978cac1d3a2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1979cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1980cac1d3a2STrond Myklebust __get_str(dstaddr), 1981cac1d3a2STrond Myklebust __entry->status 1982cac1d3a2STrond Myklebust ) 1983cac1d3a2STrond Myklebust ); 1984cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_STATUS(name) \ 1985cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_status, name, \ 1986cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_server *server, \ 1987cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, \ 1988cac1d3a2STrond Myklebust int status \ 1989cac1d3a2STrond Myklebust ), \ 1990cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status)) 1991cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_getdeviceinfo); 1992cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_find_deviceid); 1993cac1d3a2STrond Myklebust 1994088f3e68STrond Myklebust DECLARE_EVENT_CLASS(nfs4_flexfiles_io_event, 1995088f3e68STrond Myklebust TP_PROTO( 1996088f3e68STrond Myklebust const struct nfs_pgio_header *hdr 1997088f3e68STrond Myklebust ), 1998088f3e68STrond Myklebust 1999088f3e68STrond Myklebust TP_ARGS(hdr), 2000088f3e68STrond Myklebust 2001088f3e68STrond Myklebust TP_STRUCT__entry( 2002088f3e68STrond Myklebust __field(unsigned long, error) 2003088f3e68STrond Myklebust __field(dev_t, dev) 2004088f3e68STrond Myklebust __field(u32, fhandle) 2005088f3e68STrond Myklebust __field(u64, fileid) 2006088f3e68STrond Myklebust __field(loff_t, offset) 2007088f3e68STrond Myklebust __field(u32, count) 2008088f3e68STrond Myklebust __field(int, stateid_seq) 2009088f3e68STrond Myklebust __field(u32, stateid_hash) 2010088f3e68STrond Myklebust __string(dstaddr, hdr->ds_clp ? 2011088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 2012088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 2013088f3e68STrond Myklebust ), 2014088f3e68STrond Myklebust 2015088f3e68STrond Myklebust TP_fast_assign( 2016088f3e68STrond Myklebust const struct inode *inode = hdr->inode; 2017088f3e68STrond Myklebust 2018088f3e68STrond Myklebust __entry->error = hdr->res.op_status; 2019088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(hdr->args.fh); 2020088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 2021088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 2022088f3e68STrond Myklebust __entry->offset = hdr->args.offset; 2023088f3e68STrond Myklebust __entry->count = hdr->args.count; 2024088f3e68STrond Myklebust __entry->stateid_seq = 2025088f3e68STrond Myklebust be32_to_cpu(hdr->args.stateid.seqid); 2026088f3e68STrond Myklebust __entry->stateid_hash = 2027088f3e68STrond Myklebust nfs_stateid_hash(&hdr->args.stateid); 2028088f3e68STrond Myklebust __assign_str(dstaddr, hdr->ds_clp ? 2029088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 2030088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 2031088f3e68STrond Myklebust ), 2032088f3e68STrond Myklebust 2033088f3e68STrond Myklebust TP_printk( 2034088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2035088f3e68STrond Myklebust "offset=%llu count=%u stateid=%d:0x%08x dstaddr=%s", 2036088f3e68STrond Myklebust -__entry->error, 20378791545eSChuck Lever show_nfs4_status(__entry->error), 2038088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 2039088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 2040088f3e68STrond Myklebust __entry->fhandle, 2041088f3e68STrond Myklebust __entry->offset, __entry->count, 2042088f3e68STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 2043088f3e68STrond Myklebust __get_str(dstaddr) 2044088f3e68STrond Myklebust ) 2045088f3e68STrond Myklebust ); 2046088f3e68STrond Myklebust 2047088f3e68STrond Myklebust #define DEFINE_NFS4_FLEXFILES_IO_EVENT(name) \ 2048088f3e68STrond Myklebust DEFINE_EVENT(nfs4_flexfiles_io_event, name, \ 2049088f3e68STrond Myklebust TP_PROTO( \ 2050088f3e68STrond Myklebust const struct nfs_pgio_header *hdr \ 2051088f3e68STrond Myklebust ), \ 2052088f3e68STrond Myklebust TP_ARGS(hdr)) 2053088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_read_error); 2054088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_write_error); 2055088f3e68STrond Myklebust 2056088f3e68STrond Myklebust TRACE_EVENT(ff_layout_commit_error, 2057088f3e68STrond Myklebust TP_PROTO( 2058088f3e68STrond Myklebust const struct nfs_commit_data *data 2059088f3e68STrond Myklebust ), 2060088f3e68STrond Myklebust 2061088f3e68STrond Myklebust TP_ARGS(data), 2062088f3e68STrond Myklebust 2063088f3e68STrond Myklebust TP_STRUCT__entry( 2064088f3e68STrond Myklebust __field(unsigned long, error) 2065088f3e68STrond Myklebust __field(dev_t, dev) 2066088f3e68STrond Myklebust __field(u32, fhandle) 2067088f3e68STrond Myklebust __field(u64, fileid) 2068088f3e68STrond Myklebust __field(loff_t, offset) 2069088f3e68STrond Myklebust __field(u32, count) 2070088f3e68STrond Myklebust __string(dstaddr, data->ds_clp ? 2071088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2072088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 2073088f3e68STrond Myklebust ), 2074088f3e68STrond Myklebust 2075088f3e68STrond Myklebust TP_fast_assign( 2076088f3e68STrond Myklebust const struct inode *inode = data->inode; 2077088f3e68STrond Myklebust 2078088f3e68STrond Myklebust __entry->error = data->res.op_status; 2079088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(data->args.fh); 2080088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 2081088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 2082088f3e68STrond Myklebust __entry->offset = data->args.offset; 2083088f3e68STrond Myklebust __entry->count = data->args.count; 2084088f3e68STrond Myklebust __assign_str(dstaddr, data->ds_clp ? 2085088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2086088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 2087088f3e68STrond Myklebust ), 2088088f3e68STrond Myklebust 2089088f3e68STrond Myklebust TP_printk( 2090088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2091088f3e68STrond Myklebust "offset=%llu count=%u dstaddr=%s", 2092088f3e68STrond Myklebust -__entry->error, 20938791545eSChuck Lever show_nfs4_status(__entry->error), 2094088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 2095088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 2096088f3e68STrond Myklebust __entry->fhandle, 2097088f3e68STrond Myklebust __entry->offset, __entry->count, 2098088f3e68STrond Myklebust __get_str(dstaddr) 2099088f3e68STrond Myklebust ) 2100088f3e68STrond Myklebust ); 2101088f3e68STrond Myklebust 21023a100e4dSAnna Schumaker #ifdef CONFIG_NFS_V4_2 2103f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_DATA); 2104f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_HOLE); 2105f628d462SOlga Kornievskaia 2106f628d462SOlga Kornievskaia #define show_llseek_mode(what) \ 2107f628d462SOlga Kornievskaia __print_symbolic(what, \ 2108f628d462SOlga Kornievskaia { NFS4_CONTENT_DATA, "DATA" }, \ 2109f628d462SOlga Kornievskaia { NFS4_CONTENT_HOLE, "HOLE" }) 2110f628d462SOlga Kornievskaia 2111f628d462SOlga Kornievskaia TRACE_EVENT(nfs4_llseek, 2112f628d462SOlga Kornievskaia TP_PROTO( 2113f628d462SOlga Kornievskaia const struct inode *inode, 2114f628d462SOlga Kornievskaia const struct nfs42_seek_args *args, 2115f628d462SOlga Kornievskaia const struct nfs42_seek_res *res, 2116f628d462SOlga Kornievskaia int error 2117f628d462SOlga Kornievskaia ), 2118f628d462SOlga Kornievskaia 2119f628d462SOlga Kornievskaia TP_ARGS(inode, args, res, error), 2120f628d462SOlga Kornievskaia 2121f628d462SOlga Kornievskaia TP_STRUCT__entry( 2122f628d462SOlga Kornievskaia __field(unsigned long, error) 2123f628d462SOlga Kornievskaia __field(u32, fhandle) 2124f628d462SOlga Kornievskaia __field(u32, fileid) 2125f628d462SOlga Kornievskaia __field(dev_t, dev) 2126f628d462SOlga Kornievskaia __field(int, stateid_seq) 2127f628d462SOlga Kornievskaia __field(u32, stateid_hash) 2128f628d462SOlga Kornievskaia __field(loff_t, offset_s) 2129f628d462SOlga Kornievskaia __field(u32, what) 2130f628d462SOlga Kornievskaia __field(loff_t, offset_r) 2131f628d462SOlga Kornievskaia __field(u32, eof) 2132f628d462SOlga Kornievskaia ), 2133f628d462SOlga Kornievskaia 2134f628d462SOlga Kornievskaia TP_fast_assign( 2135f628d462SOlga Kornievskaia const struct nfs_inode *nfsi = NFS_I(inode); 2136f628d462SOlga Kornievskaia const struct nfs_fh *fh = args->sa_fh; 2137f628d462SOlga Kornievskaia 2138f628d462SOlga Kornievskaia __entry->fileid = nfsi->fileid; 2139f628d462SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 2140f628d462SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(fh); 2141f628d462SOlga Kornievskaia __entry->offset_s = args->sa_offset; 2142f628d462SOlga Kornievskaia __entry->stateid_seq = 2143f628d462SOlga Kornievskaia be32_to_cpu(args->sa_stateid.seqid); 2144f628d462SOlga Kornievskaia __entry->stateid_hash = 2145f628d462SOlga Kornievskaia nfs_stateid_hash(&args->sa_stateid); 2146f628d462SOlga Kornievskaia __entry->what = args->sa_what; 2147f628d462SOlga Kornievskaia if (error) { 2148f628d462SOlga Kornievskaia __entry->error = -error; 2149f628d462SOlga Kornievskaia __entry->offset_r = 0; 2150f628d462SOlga Kornievskaia __entry->eof = 0; 2151f628d462SOlga Kornievskaia } else { 2152f628d462SOlga Kornievskaia __entry->error = 0; 2153f628d462SOlga Kornievskaia __entry->offset_r = res->sr_offset; 2154f628d462SOlga Kornievskaia __entry->eof = res->sr_eof; 2155f628d462SOlga Kornievskaia } 2156f628d462SOlga Kornievskaia ), 2157f628d462SOlga Kornievskaia 2158f628d462SOlga Kornievskaia TP_printk( 2159f628d462SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2160f628d462SOlga Kornievskaia "stateid=%d:0x%08x offset_s=%llu what=%s " 2161f628d462SOlga Kornievskaia "offset_r=%llu eof=%u", 2162f628d462SOlga Kornievskaia -__entry->error, 2163f628d462SOlga Kornievskaia show_nfs4_status(__entry->error), 2164f628d462SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 2165f628d462SOlga Kornievskaia (unsigned long long)__entry->fileid, 2166f628d462SOlga Kornievskaia __entry->fhandle, 2167f628d462SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 2168f628d462SOlga Kornievskaia __entry->offset_s, 2169f628d462SOlga Kornievskaia show_llseek_mode(__entry->what), 2170f628d462SOlga Kornievskaia __entry->offset_r, 2171f628d462SOlga Kornievskaia __entry->eof 2172f628d462SOlga Kornievskaia ) 2173f628d462SOlga Kornievskaia ); 2174f628d462SOlga Kornievskaia 217540a82417SOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_sparse_event, 217640a82417SOlga Kornievskaia TP_PROTO( 217740a82417SOlga Kornievskaia const struct inode *inode, 217840a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, 217940a82417SOlga Kornievskaia int error 218040a82417SOlga Kornievskaia ), 218140a82417SOlga Kornievskaia 218240a82417SOlga Kornievskaia TP_ARGS(inode, args, error), 218340a82417SOlga Kornievskaia 218440a82417SOlga Kornievskaia TP_STRUCT__entry( 218540a82417SOlga Kornievskaia __field(unsigned long, error) 218640a82417SOlga Kornievskaia __field(loff_t, offset) 218740a82417SOlga Kornievskaia __field(loff_t, len) 218840a82417SOlga Kornievskaia __field(dev_t, dev) 218940a82417SOlga Kornievskaia __field(u32, fhandle) 219040a82417SOlga Kornievskaia __field(u64, fileid) 219140a82417SOlga Kornievskaia __field(int, stateid_seq) 219240a82417SOlga Kornievskaia __field(u32, stateid_hash) 219340a82417SOlga Kornievskaia ), 219440a82417SOlga Kornievskaia 219540a82417SOlga Kornievskaia TP_fast_assign( 219640a82417SOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 219740a82417SOlga Kornievskaia __entry->offset = args->falloc_offset; 219840a82417SOlga Kornievskaia __entry->len = args->falloc_length; 219940a82417SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 220040a82417SOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 220140a82417SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 220240a82417SOlga Kornievskaia __entry->stateid_seq = 220340a82417SOlga Kornievskaia be32_to_cpu(args->falloc_stateid.seqid); 220440a82417SOlga Kornievskaia __entry->stateid_hash = 220540a82417SOlga Kornievskaia nfs_stateid_hash(&args->falloc_stateid); 220640a82417SOlga Kornievskaia ), 220740a82417SOlga Kornievskaia 220840a82417SOlga Kornievskaia TP_printk( 220940a82417SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 221040a82417SOlga Kornievskaia "stateid=%d:0x%08x offset=%llu len=%llu", 221140a82417SOlga Kornievskaia -__entry->error, 221240a82417SOlga Kornievskaia show_nfs4_status(__entry->error), 221340a82417SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 221440a82417SOlga Kornievskaia (unsigned long long)__entry->fileid, 221540a82417SOlga Kornievskaia __entry->fhandle, 221640a82417SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 221740a82417SOlga Kornievskaia (long long)__entry->offset, 221840a82417SOlga Kornievskaia (long long)__entry->len 221940a82417SOlga Kornievskaia ) 222040a82417SOlga Kornievskaia ); 222140a82417SOlga Kornievskaia #define DEFINE_NFS4_SPARSE_EVENT(name) \ 222240a82417SOlga Kornievskaia DEFINE_EVENT(nfs4_sparse_event, name, \ 222340a82417SOlga Kornievskaia TP_PROTO( \ 222440a82417SOlga Kornievskaia const struct inode *inode, \ 222540a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, \ 222640a82417SOlga Kornievskaia int error \ 222740a82417SOlga Kornievskaia ), \ 222840a82417SOlga Kornievskaia TP_ARGS(inode, args, error)) 222940a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_fallocate); 223040a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_deallocate); 2231ce7cea1bSOlga Kornievskaia 2232ce7cea1bSOlga Kornievskaia TRACE_EVENT(nfs4_copy, 2233ce7cea1bSOlga Kornievskaia TP_PROTO( 2234ce7cea1bSOlga Kornievskaia const struct inode *src_inode, 2235ce7cea1bSOlga Kornievskaia const struct inode *dst_inode, 2236ce7cea1bSOlga Kornievskaia const struct nfs42_copy_args *args, 2237ce7cea1bSOlga Kornievskaia const struct nfs42_copy_res *res, 2238ce7cea1bSOlga Kornievskaia const struct nl4_server *nss, 2239ce7cea1bSOlga Kornievskaia int error 2240ce7cea1bSOlga Kornievskaia ), 2241ce7cea1bSOlga Kornievskaia 2242ce7cea1bSOlga Kornievskaia TP_ARGS(src_inode, dst_inode, args, res, nss, error), 2243ce7cea1bSOlga Kornievskaia 2244ce7cea1bSOlga Kornievskaia TP_STRUCT__entry( 2245ce7cea1bSOlga Kornievskaia __field(unsigned long, error) 2246ce7cea1bSOlga Kornievskaia __field(u32, src_fhandle) 2247ce7cea1bSOlga Kornievskaia __field(u32, src_fileid) 2248ce7cea1bSOlga Kornievskaia __field(u32, dst_fhandle) 2249ce7cea1bSOlga Kornievskaia __field(u32, dst_fileid) 2250ce7cea1bSOlga Kornievskaia __field(dev_t, src_dev) 2251ce7cea1bSOlga Kornievskaia __field(dev_t, dst_dev) 2252ce7cea1bSOlga Kornievskaia __field(int, src_stateid_seq) 2253ce7cea1bSOlga Kornievskaia __field(u32, src_stateid_hash) 2254ce7cea1bSOlga Kornievskaia __field(int, dst_stateid_seq) 2255ce7cea1bSOlga Kornievskaia __field(u32, dst_stateid_hash) 2256ce7cea1bSOlga Kornievskaia __field(loff_t, src_offset) 2257ce7cea1bSOlga Kornievskaia __field(loff_t, dst_offset) 2258ce7cea1bSOlga Kornievskaia __field(bool, sync) 2259ce7cea1bSOlga Kornievskaia __field(loff_t, len) 2260ce7cea1bSOlga Kornievskaia __field(int, res_stateid_seq) 2261ce7cea1bSOlga Kornievskaia __field(u32, res_stateid_hash) 2262ce7cea1bSOlga Kornievskaia __field(loff_t, res_count) 2263ce7cea1bSOlga Kornievskaia __field(bool, res_sync) 2264ce7cea1bSOlga Kornievskaia __field(bool, res_cons) 2265ce7cea1bSOlga Kornievskaia __field(bool, intra) 2266ce7cea1bSOlga Kornievskaia ), 2267ce7cea1bSOlga Kornievskaia 2268ce7cea1bSOlga Kornievskaia TP_fast_assign( 2269ce7cea1bSOlga Kornievskaia const struct nfs_inode *src_nfsi = NFS_I(src_inode); 2270ce7cea1bSOlga Kornievskaia const struct nfs_inode *dst_nfsi = NFS_I(dst_inode); 2271ce7cea1bSOlga Kornievskaia 2272ce7cea1bSOlga Kornievskaia __entry->src_fileid = src_nfsi->fileid; 2273ce7cea1bSOlga Kornievskaia __entry->src_dev = src_inode->i_sb->s_dev; 2274ce7cea1bSOlga Kornievskaia __entry->src_fhandle = nfs_fhandle_hash(args->src_fh); 2275ce7cea1bSOlga Kornievskaia __entry->src_offset = args->src_pos; 2276ce7cea1bSOlga Kornievskaia __entry->dst_fileid = dst_nfsi->fileid; 2277ce7cea1bSOlga Kornievskaia __entry->dst_dev = dst_inode->i_sb->s_dev; 2278ce7cea1bSOlga Kornievskaia __entry->dst_fhandle = nfs_fhandle_hash(args->dst_fh); 2279ce7cea1bSOlga Kornievskaia __entry->dst_offset = args->dst_pos; 2280ce7cea1bSOlga Kornievskaia __entry->len = args->count; 2281ce7cea1bSOlga Kornievskaia __entry->sync = args->sync; 2282ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq = 2283ce7cea1bSOlga Kornievskaia be32_to_cpu(args->src_stateid.seqid); 2284ce7cea1bSOlga Kornievskaia __entry->src_stateid_hash = 2285ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->src_stateid); 2286ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq = 2287ce7cea1bSOlga Kornievskaia be32_to_cpu(args->dst_stateid.seqid); 2288ce7cea1bSOlga Kornievskaia __entry->dst_stateid_hash = 2289ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->dst_stateid); 2290ce7cea1bSOlga Kornievskaia __entry->intra = nss ? 0 : 1; 2291ce7cea1bSOlga Kornievskaia if (error) { 2292ce7cea1bSOlga Kornievskaia __entry->error = -error; 2293ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 0; 2294ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 0; 2295ce7cea1bSOlga Kornievskaia __entry->res_count = 0; 2296ce7cea1bSOlga Kornievskaia __entry->res_sync = 0; 2297ce7cea1bSOlga Kornievskaia __entry->res_cons = 0; 2298ce7cea1bSOlga Kornievskaia } else { 2299ce7cea1bSOlga Kornievskaia __entry->error = 0; 2300ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 2301ce7cea1bSOlga Kornievskaia be32_to_cpu(res->write_res.stateid.seqid); 2302ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 2303ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&res->write_res.stateid); 2304ce7cea1bSOlga Kornievskaia __entry->res_count = res->write_res.count; 2305ce7cea1bSOlga Kornievskaia __entry->res_sync = res->synchronous; 2306ce7cea1bSOlga Kornievskaia __entry->res_cons = res->consecutive; 2307ce7cea1bSOlga Kornievskaia } 2308ce7cea1bSOlga Kornievskaia ), 2309ce7cea1bSOlga Kornievskaia 2310ce7cea1bSOlga Kornievskaia TP_printk( 2311ce7cea1bSOlga Kornievskaia "error=%ld (%s) intra=%d src_fileid=%02x:%02x:%llu " 2312ce7cea1bSOlga Kornievskaia "src_fhandle=0x%08x dst_fileid=%02x:%02x:%llu " 2313ce7cea1bSOlga Kornievskaia "dst_fhandle=0x%08x src_stateid=%d:0x%08x " 2314ce7cea1bSOlga Kornievskaia "dst_stateid=%d:0x%08x src_offset=%llu dst_offset=%llu " 2315ce7cea1bSOlga Kornievskaia "len=%llu sync=%d cb_stateid=%d:0x%08x res_sync=%d " 2316ce7cea1bSOlga Kornievskaia "res_cons=%d res_count=%llu", 2317ce7cea1bSOlga Kornievskaia -__entry->error, 2318ce7cea1bSOlga Kornievskaia show_nfs4_status(__entry->error), 2319ce7cea1bSOlga Kornievskaia __entry->intra, 2320ce7cea1bSOlga Kornievskaia MAJOR(__entry->src_dev), MINOR(__entry->src_dev), 2321ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->src_fileid, 2322ce7cea1bSOlga Kornievskaia __entry->src_fhandle, 2323ce7cea1bSOlga Kornievskaia MAJOR(__entry->dst_dev), MINOR(__entry->dst_dev), 2324ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->dst_fileid, 2325ce7cea1bSOlga Kornievskaia __entry->dst_fhandle, 2326ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq, __entry->src_stateid_hash, 2327ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq, __entry->dst_stateid_hash, 2328ce7cea1bSOlga Kornievskaia __entry->src_offset, 2329ce7cea1bSOlga Kornievskaia __entry->dst_offset, 2330ce7cea1bSOlga Kornievskaia __entry->len, 2331ce7cea1bSOlga Kornievskaia __entry->sync, 2332ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq, __entry->res_stateid_hash, 2333ce7cea1bSOlga Kornievskaia __entry->res_sync, 2334ce7cea1bSOlga Kornievskaia __entry->res_cons, 2335ce7cea1bSOlga Kornievskaia __entry->res_count 2336ce7cea1bSOlga Kornievskaia ) 2337ce7cea1bSOlga Kornievskaia ); 23382a65ca8bSOlga Kornievskaia 23392a65ca8bSOlga Kornievskaia TRACE_EVENT(nfs4_clone, 23402a65ca8bSOlga Kornievskaia TP_PROTO( 23412a65ca8bSOlga Kornievskaia const struct inode *src_inode, 23422a65ca8bSOlga Kornievskaia const struct inode *dst_inode, 23432a65ca8bSOlga Kornievskaia const struct nfs42_clone_args *args, 23442a65ca8bSOlga Kornievskaia int error 23452a65ca8bSOlga Kornievskaia ), 23462a65ca8bSOlga Kornievskaia 23472a65ca8bSOlga Kornievskaia TP_ARGS(src_inode, dst_inode, args, error), 23482a65ca8bSOlga Kornievskaia 23492a65ca8bSOlga Kornievskaia TP_STRUCT__entry( 23502a65ca8bSOlga Kornievskaia __field(unsigned long, error) 23512a65ca8bSOlga Kornievskaia __field(u32, src_fhandle) 23522a65ca8bSOlga Kornievskaia __field(u32, src_fileid) 23532a65ca8bSOlga Kornievskaia __field(u32, dst_fhandle) 23542a65ca8bSOlga Kornievskaia __field(u32, dst_fileid) 23552a65ca8bSOlga Kornievskaia __field(dev_t, src_dev) 23562a65ca8bSOlga Kornievskaia __field(dev_t, dst_dev) 23572a65ca8bSOlga Kornievskaia __field(loff_t, src_offset) 23582a65ca8bSOlga Kornievskaia __field(loff_t, dst_offset) 23592a65ca8bSOlga Kornievskaia __field(int, src_stateid_seq) 23602a65ca8bSOlga Kornievskaia __field(u32, src_stateid_hash) 23612a65ca8bSOlga Kornievskaia __field(int, dst_stateid_seq) 23622a65ca8bSOlga Kornievskaia __field(u32, dst_stateid_hash) 23632a65ca8bSOlga Kornievskaia __field(loff_t, len) 23642a65ca8bSOlga Kornievskaia ), 23652a65ca8bSOlga Kornievskaia 23662a65ca8bSOlga Kornievskaia TP_fast_assign( 23672a65ca8bSOlga Kornievskaia const struct nfs_inode *src_nfsi = NFS_I(src_inode); 23682a65ca8bSOlga Kornievskaia const struct nfs_inode *dst_nfsi = NFS_I(dst_inode); 23692a65ca8bSOlga Kornievskaia 23702a65ca8bSOlga Kornievskaia __entry->src_fileid = src_nfsi->fileid; 23712a65ca8bSOlga Kornievskaia __entry->src_dev = src_inode->i_sb->s_dev; 23722a65ca8bSOlga Kornievskaia __entry->src_fhandle = nfs_fhandle_hash(args->src_fh); 23732a65ca8bSOlga Kornievskaia __entry->src_offset = args->src_offset; 23742a65ca8bSOlga Kornievskaia __entry->dst_fileid = dst_nfsi->fileid; 23752a65ca8bSOlga Kornievskaia __entry->dst_dev = dst_inode->i_sb->s_dev; 23762a65ca8bSOlga Kornievskaia __entry->dst_fhandle = nfs_fhandle_hash(args->dst_fh); 23772a65ca8bSOlga Kornievskaia __entry->dst_offset = args->dst_offset; 23782a65ca8bSOlga Kornievskaia __entry->len = args->count; 23792a65ca8bSOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 23802a65ca8bSOlga Kornievskaia __entry->src_stateid_seq = 23812a65ca8bSOlga Kornievskaia be32_to_cpu(args->src_stateid.seqid); 23822a65ca8bSOlga Kornievskaia __entry->src_stateid_hash = 23832a65ca8bSOlga Kornievskaia nfs_stateid_hash(&args->src_stateid); 23842a65ca8bSOlga Kornievskaia __entry->dst_stateid_seq = 23852a65ca8bSOlga Kornievskaia be32_to_cpu(args->dst_stateid.seqid); 23862a65ca8bSOlga Kornievskaia __entry->dst_stateid_hash = 23872a65ca8bSOlga Kornievskaia nfs_stateid_hash(&args->dst_stateid); 23882a65ca8bSOlga Kornievskaia ), 23892a65ca8bSOlga Kornievskaia 23902a65ca8bSOlga Kornievskaia TP_printk( 23912a65ca8bSOlga Kornievskaia "error=%ld (%s) src_fileid=%02x:%02x:%llu " 23922a65ca8bSOlga Kornievskaia "src_fhandle=0x%08x dst_fileid=%02x:%02x:%llu " 23932a65ca8bSOlga Kornievskaia "dst_fhandle=0x%08x src_stateid=%d:0x%08x " 23942a65ca8bSOlga Kornievskaia "dst_stateid=%d:0x%08x src_offset=%llu " 23952a65ca8bSOlga Kornievskaia "dst_offset=%llu len=%llu", 23962a65ca8bSOlga Kornievskaia -__entry->error, 23972a65ca8bSOlga Kornievskaia show_nfs4_status(__entry->error), 23982a65ca8bSOlga Kornievskaia MAJOR(__entry->src_dev), MINOR(__entry->src_dev), 23992a65ca8bSOlga Kornievskaia (unsigned long long)__entry->src_fileid, 24002a65ca8bSOlga Kornievskaia __entry->src_fhandle, 24012a65ca8bSOlga Kornievskaia MAJOR(__entry->dst_dev), MINOR(__entry->dst_dev), 24022a65ca8bSOlga Kornievskaia (unsigned long long)__entry->dst_fileid, 24032a65ca8bSOlga Kornievskaia __entry->dst_fhandle, 24042a65ca8bSOlga Kornievskaia __entry->src_stateid_seq, __entry->src_stateid_hash, 24052a65ca8bSOlga Kornievskaia __entry->dst_stateid_seq, __entry->dst_stateid_hash, 24062a65ca8bSOlga Kornievskaia __entry->src_offset, 24072a65ca8bSOlga Kornievskaia __entry->dst_offset, 24082a65ca8bSOlga Kornievskaia __entry->len 24092a65ca8bSOlga Kornievskaia ) 24102a65ca8bSOlga Kornievskaia ); 2411488b170cSOlga Kornievskaia 2412488b170cSOlga Kornievskaia TRACE_EVENT(nfs4_copy_notify, 2413488b170cSOlga Kornievskaia TP_PROTO( 2414488b170cSOlga Kornievskaia const struct inode *inode, 2415488b170cSOlga Kornievskaia const struct nfs42_copy_notify_args *args, 2416488b170cSOlga Kornievskaia const struct nfs42_copy_notify_res *res, 2417488b170cSOlga Kornievskaia int error 2418488b170cSOlga Kornievskaia ), 2419488b170cSOlga Kornievskaia 2420488b170cSOlga Kornievskaia TP_ARGS(inode, args, res, error), 2421488b170cSOlga Kornievskaia 2422488b170cSOlga Kornievskaia TP_STRUCT__entry( 2423488b170cSOlga Kornievskaia __field(unsigned long, error) 2424488b170cSOlga Kornievskaia __field(u32, fhandle) 2425488b170cSOlga Kornievskaia __field(u32, fileid) 2426488b170cSOlga Kornievskaia __field(dev_t, dev) 2427488b170cSOlga Kornievskaia __field(int, stateid_seq) 2428488b170cSOlga Kornievskaia __field(u32, stateid_hash) 2429488b170cSOlga Kornievskaia __field(int, res_stateid_seq) 2430488b170cSOlga Kornievskaia __field(u32, res_stateid_hash) 2431488b170cSOlga Kornievskaia ), 2432488b170cSOlga Kornievskaia 2433488b170cSOlga Kornievskaia TP_fast_assign( 2434488b170cSOlga Kornievskaia const struct nfs_inode *nfsi = NFS_I(inode); 2435488b170cSOlga Kornievskaia 2436488b170cSOlga Kornievskaia __entry->fileid = nfsi->fileid; 2437488b170cSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 2438488b170cSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(args->cna_src_fh); 2439488b170cSOlga Kornievskaia __entry->stateid_seq = 2440488b170cSOlga Kornievskaia be32_to_cpu(args->cna_src_stateid.seqid); 2441488b170cSOlga Kornievskaia __entry->stateid_hash = 2442488b170cSOlga Kornievskaia nfs_stateid_hash(&args->cna_src_stateid); 2443488b170cSOlga Kornievskaia if (error) { 2444488b170cSOlga Kornievskaia __entry->error = -error; 2445488b170cSOlga Kornievskaia __entry->res_stateid_seq = 0; 2446488b170cSOlga Kornievskaia __entry->res_stateid_hash = 0; 2447488b170cSOlga Kornievskaia } else { 2448488b170cSOlga Kornievskaia __entry->error = 0; 2449488b170cSOlga Kornievskaia __entry->res_stateid_seq = 2450488b170cSOlga Kornievskaia be32_to_cpu(res->cnr_stateid.seqid); 2451488b170cSOlga Kornievskaia __entry->res_stateid_hash = 2452488b170cSOlga Kornievskaia nfs_stateid_hash(&res->cnr_stateid); 2453488b170cSOlga Kornievskaia } 2454488b170cSOlga Kornievskaia ), 2455488b170cSOlga Kornievskaia 2456488b170cSOlga Kornievskaia TP_printk( 2457488b170cSOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2458488b170cSOlga Kornievskaia "stateid=%d:0x%08x res_stateid=%d:0x%08x", 2459488b170cSOlga Kornievskaia -__entry->error, 2460488b170cSOlga Kornievskaia show_nfs4_status(__entry->error), 2461488b170cSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 2462488b170cSOlga Kornievskaia (unsigned long long)__entry->fileid, 2463488b170cSOlga Kornievskaia __entry->fhandle, 2464488b170cSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 2465488b170cSOlga Kornievskaia __entry->res_stateid_seq, __entry->res_stateid_hash 2466488b170cSOlga Kornievskaia ) 2467488b170cSOlga Kornievskaia ); 2468127becabSOlga Kornievskaia 2469127becabSOlga Kornievskaia TRACE_EVENT(nfs4_offload_cancel, 2470127becabSOlga Kornievskaia TP_PROTO( 2471127becabSOlga Kornievskaia const struct nfs42_offload_status_args *args, 2472127becabSOlga Kornievskaia int error 2473127becabSOlga Kornievskaia ), 2474127becabSOlga Kornievskaia 2475127becabSOlga Kornievskaia TP_ARGS(args, error), 2476127becabSOlga Kornievskaia 2477127becabSOlga Kornievskaia TP_STRUCT__entry( 2478127becabSOlga Kornievskaia __field(unsigned long, error) 2479127becabSOlga Kornievskaia __field(u32, fhandle) 2480127becabSOlga Kornievskaia __field(int, stateid_seq) 2481127becabSOlga Kornievskaia __field(u32, stateid_hash) 2482127becabSOlga Kornievskaia ), 2483127becabSOlga Kornievskaia 2484127becabSOlga Kornievskaia TP_fast_assign( 2485127becabSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(args->osa_src_fh); 2486127becabSOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 2487127becabSOlga Kornievskaia __entry->stateid_seq = 2488127becabSOlga Kornievskaia be32_to_cpu(args->osa_stateid.seqid); 2489127becabSOlga Kornievskaia __entry->stateid_hash = 2490127becabSOlga Kornievskaia nfs_stateid_hash(&args->osa_stateid); 2491127becabSOlga Kornievskaia ), 2492127becabSOlga Kornievskaia 2493127becabSOlga Kornievskaia TP_printk( 2494127becabSOlga Kornievskaia "error=%ld (%s) fhandle=0x%08x stateid=%d:0x%08x", 2495127becabSOlga Kornievskaia -__entry->error, 2496127becabSOlga Kornievskaia show_nfs4_status(__entry->error), 2497127becabSOlga Kornievskaia __entry->fhandle, 2498127becabSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 2499127becabSOlga Kornievskaia ) 2500127becabSOlga Kornievskaia ); 250127ffed10SAnna Schumaker 250227ffed10SAnna Schumaker DECLARE_EVENT_CLASS(nfs4_xattr_event, 250327ffed10SAnna Schumaker TP_PROTO( 250427ffed10SAnna Schumaker const struct inode *inode, 250527ffed10SAnna Schumaker const char *name, 250627ffed10SAnna Schumaker int error 250727ffed10SAnna Schumaker ), 250827ffed10SAnna Schumaker 250927ffed10SAnna Schumaker TP_ARGS(inode, name, error), 251027ffed10SAnna Schumaker 251127ffed10SAnna Schumaker TP_STRUCT__entry( 251227ffed10SAnna Schumaker __field(unsigned long, error) 251327ffed10SAnna Schumaker __field(dev_t, dev) 251427ffed10SAnna Schumaker __field(u32, fhandle) 251527ffed10SAnna Schumaker __field(u64, fileid) 251627ffed10SAnna Schumaker __string(name, name) 251727ffed10SAnna Schumaker ), 251827ffed10SAnna Schumaker 251927ffed10SAnna Schumaker TP_fast_assign( 252027ffed10SAnna Schumaker __entry->error = error < 0 ? -error : 0; 252127ffed10SAnna Schumaker __entry->dev = inode->i_sb->s_dev; 252227ffed10SAnna Schumaker __entry->fileid = NFS_FILEID(inode); 252327ffed10SAnna Schumaker __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 252427ffed10SAnna Schumaker __assign_str(name, name); 252527ffed10SAnna Schumaker ), 252627ffed10SAnna Schumaker 252727ffed10SAnna Schumaker TP_printk( 252827ffed10SAnna Schumaker "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 252927ffed10SAnna Schumaker "name=%s", 253027ffed10SAnna Schumaker -__entry->error, show_nfs4_status(__entry->error), 253127ffed10SAnna Schumaker MAJOR(__entry->dev), MINOR(__entry->dev), 253227ffed10SAnna Schumaker (unsigned long long)__entry->fileid, 253327ffed10SAnna Schumaker __entry->fhandle, __get_str(name) 253427ffed10SAnna Schumaker ) 253527ffed10SAnna Schumaker ); 253627ffed10SAnna Schumaker #define DEFINE_NFS4_XATTR_EVENT(name) \ 253727ffed10SAnna Schumaker DEFINE_EVENT(nfs4_xattr_event, name, \ 253827ffed10SAnna Schumaker TP_PROTO( \ 253927ffed10SAnna Schumaker const struct inode *inode, \ 254027ffed10SAnna Schumaker const char *name, \ 254127ffed10SAnna Schumaker int error \ 254227ffed10SAnna Schumaker ), \ 254327ffed10SAnna Schumaker TP_ARGS(inode, name, error)) 254427ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_getxattr); 254527ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_setxattr); 254627ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_removexattr); 2547a0b685e7SAnna Schumaker 2548a0b685e7SAnna Schumaker DEFINE_NFS4_INODE_EVENT(nfs4_listxattr); 2549f628d462SOlga Kornievskaia #endif /* CONFIG_NFS_V4_2 */ 2550088f3e68STrond Myklebust 2551cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 2552cc668ab3STrond Myklebust 2553c6d01c6fSTrond Myklebust #endif /* _TRACE_NFS4_H */ 2554c6d01c6fSTrond Myklebust 2555c6d01c6fSTrond Myklebust #undef TRACE_INCLUDE_PATH 2556c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_PATH . 2557c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_FILE nfs4trace 2558c6d01c6fSTrond Myklebust /* This part must be outside protection */ 2559c6d01c6fSTrond Myklebust #include <trace/define_trace.h> 2560