1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2c6d01c6fSTrond Myklebust /* 3c6d01c6fSTrond Myklebust * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 4c6d01c6fSTrond Myklebust */ 5c6d01c6fSTrond Myklebust #undef TRACE_SYSTEM 6c6d01c6fSTrond Myklebust #define TRACE_SYSTEM nfs4 7c6d01c6fSTrond Myklebust 8c6d01c6fSTrond Myklebust #if !defined(_TRACE_NFS4_H) || defined(TRACE_HEADER_MULTI_READ) 9c6d01c6fSTrond Myklebust #define _TRACE_NFS4_H 10c6d01c6fSTrond Myklebust 11c6d01c6fSTrond Myklebust #include <linux/tracepoint.h> 12b4776a34SChuck Lever #include <trace/events/sunrpc_base.h> 13c6d01c6fSTrond Myklebust 149d2d48bbSChuck Lever #include <trace/events/fs.h> 158791545eSChuck Lever #include <trace/events/nfs.h> 16c6d01c6fSTrond Myklebust 17b5f875a9STrond Myklebust #define show_nfs_fattr_flags(valid) \ 18b5f875a9STrond Myklebust __print_flags((unsigned long)valid, "|", \ 19b5f875a9STrond Myklebust { NFS_ATTR_FATTR_TYPE, "TYPE" }, \ 20b5f875a9STrond Myklebust { NFS_ATTR_FATTR_MODE, "MODE" }, \ 21b5f875a9STrond Myklebust { NFS_ATTR_FATTR_NLINK, "NLINK" }, \ 22b5f875a9STrond Myklebust { NFS_ATTR_FATTR_OWNER, "OWNER" }, \ 23b5f875a9STrond Myklebust { NFS_ATTR_FATTR_GROUP, "GROUP" }, \ 24b5f875a9STrond Myklebust { NFS_ATTR_FATTR_RDEV, "RDEV" }, \ 25b5f875a9STrond Myklebust { NFS_ATTR_FATTR_SIZE, "SIZE" }, \ 26b5f875a9STrond Myklebust { NFS_ATTR_FATTR_FSID, "FSID" }, \ 27b5f875a9STrond Myklebust { NFS_ATTR_FATTR_FILEID, "FILEID" }, \ 28b5f875a9STrond Myklebust { NFS_ATTR_FATTR_ATIME, "ATIME" }, \ 29b5f875a9STrond Myklebust { NFS_ATTR_FATTR_MTIME, "MTIME" }, \ 30b5f875a9STrond Myklebust { NFS_ATTR_FATTR_CTIME, "CTIME" }, \ 31b5f875a9STrond Myklebust { NFS_ATTR_FATTR_CHANGE, "CHANGE" }, \ 32b5f875a9STrond Myklebust { NFS_ATTR_FATTR_OWNER_NAME, "OWNER_NAME" }, \ 33b5f875a9STrond Myklebust { NFS_ATTR_FATTR_GROUP_NAME, "GROUP_NAME" }) 34b5f875a9STrond Myklebust 35c6d01c6fSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_clientid_event, 36c6d01c6fSTrond Myklebust TP_PROTO( 37c6d01c6fSTrond Myklebust const struct nfs_client *clp, 38c6d01c6fSTrond Myklebust int error 39c6d01c6fSTrond Myklebust ), 40c6d01c6fSTrond Myklebust 41c6d01c6fSTrond Myklebust TP_ARGS(clp, error), 42c6d01c6fSTrond Myklebust 43c6d01c6fSTrond Myklebust TP_STRUCT__entry( 443944369dSAnna Schumaker __string(dstaddr, clp->cl_hostname) 4596650e2eSChuck Lever __field(unsigned long, error) 46c6d01c6fSTrond Myklebust ), 47c6d01c6fSTrond Myklebust 48c6d01c6fSTrond Myklebust TP_fast_assign( 49118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 503944369dSAnna Schumaker __assign_str(dstaddr, clp->cl_hostname); 51c6d01c6fSTrond Myklebust ), 52c6d01c6fSTrond Myklebust 53c6d01c6fSTrond Myklebust TP_printk( 5496650e2eSChuck Lever "error=%ld (%s) dstaddr=%s", 5596650e2eSChuck Lever -__entry->error, 568791545eSChuck Lever show_nfs4_status(__entry->error), 57c6d01c6fSTrond Myklebust __get_str(dstaddr) 58c6d01c6fSTrond Myklebust ) 59c6d01c6fSTrond Myklebust ); 60c6d01c6fSTrond Myklebust #define DEFINE_NFS4_CLIENTID_EVENT(name) \ 61c6d01c6fSTrond Myklebust DEFINE_EVENT(nfs4_clientid_event, name, \ 62c6d01c6fSTrond Myklebust TP_PROTO( \ 63c6d01c6fSTrond Myklebust const struct nfs_client *clp, \ 64c6d01c6fSTrond Myklebust int error \ 65c6d01c6fSTrond Myklebust ), \ 66c6d01c6fSTrond Myklebust TP_ARGS(clp, error)) 67c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid); 68c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid_confirm); 69c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew); 70c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew_async); 71c6d01c6fSTrond Myklebust #ifdef CONFIG_NFS_V4_1 72c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_exchange_id); 73c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_create_session); 74c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_session); 75c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_clientid); 76c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_bind_conn_to_session); 77c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_sequence); 78c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_reclaim_complete); 792f92ae34STrond Myklebust 802f92ae34STrond Myklebust TRACE_EVENT(nfs4_sequence_done, 812f92ae34STrond Myklebust TP_PROTO( 822f92ae34STrond Myklebust const struct nfs4_session *session, 832f92ae34STrond Myklebust const struct nfs4_sequence_res *res 842f92ae34STrond Myklebust ), 852f92ae34STrond Myklebust TP_ARGS(session, res), 862f92ae34STrond Myklebust 872f92ae34STrond Myklebust TP_STRUCT__entry( 882f92ae34STrond Myklebust __field(unsigned int, session) 892f92ae34STrond Myklebust __field(unsigned int, slot_nr) 902f92ae34STrond Myklebust __field(unsigned int, seq_nr) 912f92ae34STrond Myklebust __field(unsigned int, highest_slotid) 922f92ae34STrond Myklebust __field(unsigned int, target_highest_slotid) 938791545eSChuck Lever __field(unsigned long, status_flags) 9496650e2eSChuck Lever __field(unsigned long, error) 952f92ae34STrond Myklebust ), 962f92ae34STrond Myklebust 972f92ae34STrond Myklebust TP_fast_assign( 982f92ae34STrond Myklebust const struct nfs4_slot *sr_slot = res->sr_slot; 992f92ae34STrond Myklebust __entry->session = nfs_session_id_hash(&session->sess_id); 1002f92ae34STrond Myklebust __entry->slot_nr = sr_slot->slot_nr; 1012f92ae34STrond Myklebust __entry->seq_nr = sr_slot->seq_nr; 1022f92ae34STrond Myklebust __entry->highest_slotid = res->sr_highest_slotid; 1032f92ae34STrond Myklebust __entry->target_highest_slotid = 1042f92ae34STrond Myklebust res->sr_target_highest_slotid; 10552618df9SAndrew Elble __entry->status_flags = res->sr_status_flags; 106118b6292STrond Myklebust __entry->error = res->sr_status < 0 ? 107118b6292STrond Myklebust -res->sr_status : 0; 1082f92ae34STrond Myklebust ), 1092f92ae34STrond Myklebust TP_printk( 11096650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 1112f92ae34STrond Myklebust "highest_slotid=%u target_highest_slotid=%u " 1128791545eSChuck Lever "status_flags=0x%lx (%s)", 11396650e2eSChuck Lever -__entry->error, 1148791545eSChuck Lever show_nfs4_status(__entry->error), 1152f92ae34STrond Myklebust __entry->session, 1162f92ae34STrond Myklebust __entry->slot_nr, 1172f92ae34STrond Myklebust __entry->seq_nr, 1182f92ae34STrond Myklebust __entry->highest_slotid, 1192f92ae34STrond Myklebust __entry->target_highest_slotid, 1202f92ae34STrond Myklebust __entry->status_flags, 1218791545eSChuck Lever show_nfs4_seq4_status(__entry->status_flags) 1222f92ae34STrond Myklebust ) 1232f92ae34STrond Myklebust ); 1242f92ae34STrond Myklebust 1252f92ae34STrond Myklebust struct cb_sequenceargs; 1262f92ae34STrond Myklebust struct cb_sequenceres; 1272f92ae34STrond Myklebust 1282f92ae34STrond Myklebust TRACE_EVENT(nfs4_cb_sequence, 1292f92ae34STrond Myklebust TP_PROTO( 1302f92ae34STrond Myklebust const struct cb_sequenceargs *args, 1312f92ae34STrond Myklebust const struct cb_sequenceres *res, 1322f92ae34STrond Myklebust __be32 status 1332f92ae34STrond Myklebust ), 1342f92ae34STrond Myklebust TP_ARGS(args, res, status), 1352f92ae34STrond Myklebust 1362f92ae34STrond Myklebust TP_STRUCT__entry( 1372f92ae34STrond Myklebust __field(unsigned int, session) 1382f92ae34STrond Myklebust __field(unsigned int, slot_nr) 1392f92ae34STrond Myklebust __field(unsigned int, seq_nr) 1402f92ae34STrond Myklebust __field(unsigned int, highest_slotid) 1412f92ae34STrond Myklebust __field(unsigned int, cachethis) 14296650e2eSChuck Lever __field(unsigned long, error) 1432f92ae34STrond Myklebust ), 1442f92ae34STrond Myklebust 1452f92ae34STrond Myklebust TP_fast_assign( 1462f92ae34STrond Myklebust __entry->session = nfs_session_id_hash(&args->csa_sessionid); 1472f92ae34STrond Myklebust __entry->slot_nr = args->csa_slotid; 1482f92ae34STrond Myklebust __entry->seq_nr = args->csa_sequenceid; 1492f92ae34STrond Myklebust __entry->highest_slotid = args->csa_highestslotid; 1502f92ae34STrond Myklebust __entry->cachethis = args->csa_cachethis; 15196650e2eSChuck Lever __entry->error = be32_to_cpu(status); 1522f92ae34STrond Myklebust ), 1532f92ae34STrond Myklebust 1542f92ae34STrond Myklebust TP_printk( 15596650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 1562f92ae34STrond Myklebust "highest_slotid=%u", 15796650e2eSChuck Lever -__entry->error, 1588791545eSChuck Lever show_nfs4_status(__entry->error), 1592f92ae34STrond Myklebust __entry->session, 1602f92ae34STrond Myklebust __entry->slot_nr, 1612f92ae34STrond Myklebust __entry->seq_nr, 1622f92ae34STrond Myklebust __entry->highest_slotid 1632f92ae34STrond Myklebust ) 1642f92ae34STrond Myklebust ); 165c5833f0dSChuck Lever 166c5833f0dSChuck Lever TRACE_EVENT(nfs4_cb_seqid_err, 167c5833f0dSChuck Lever TP_PROTO( 168c5833f0dSChuck Lever const struct cb_sequenceargs *args, 169c5833f0dSChuck Lever __be32 status 170c5833f0dSChuck Lever ), 171c5833f0dSChuck Lever TP_ARGS(args, status), 172c5833f0dSChuck Lever 173c5833f0dSChuck Lever TP_STRUCT__entry( 174c5833f0dSChuck Lever __field(unsigned int, session) 175c5833f0dSChuck Lever __field(unsigned int, slot_nr) 176c5833f0dSChuck Lever __field(unsigned int, seq_nr) 177c5833f0dSChuck Lever __field(unsigned int, highest_slotid) 178c5833f0dSChuck Lever __field(unsigned int, cachethis) 17996650e2eSChuck Lever __field(unsigned long, error) 180c5833f0dSChuck Lever ), 181c5833f0dSChuck Lever 182c5833f0dSChuck Lever TP_fast_assign( 183c5833f0dSChuck Lever __entry->session = nfs_session_id_hash(&args->csa_sessionid); 184c5833f0dSChuck Lever __entry->slot_nr = args->csa_slotid; 185c5833f0dSChuck Lever __entry->seq_nr = args->csa_sequenceid; 186c5833f0dSChuck Lever __entry->highest_slotid = args->csa_highestslotid; 187c5833f0dSChuck Lever __entry->cachethis = args->csa_cachethis; 18896650e2eSChuck Lever __entry->error = be32_to_cpu(status); 189c5833f0dSChuck Lever ), 190c5833f0dSChuck Lever 191c5833f0dSChuck Lever TP_printk( 19296650e2eSChuck Lever "error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u " 193c5833f0dSChuck Lever "highest_slotid=%u", 19496650e2eSChuck Lever -__entry->error, 1958791545eSChuck Lever show_nfs4_status(__entry->error), 196c5833f0dSChuck Lever __entry->session, 197c5833f0dSChuck Lever __entry->slot_nr, 198c5833f0dSChuck Lever __entry->seq_nr, 199c5833f0dSChuck Lever __entry->highest_slotid 200c5833f0dSChuck Lever ) 201c5833f0dSChuck Lever ); 202c5833f0dSChuck Lever 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); 295b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_RUNNING); 296b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_READ); 297b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_RW); 298511ba52eSChuck Lever 299511ba52eSChuck Lever #define show_nfs4_clp_state(state) \ 300511ba52eSChuck Lever __print_flags(state, "|", \ 301511ba52eSChuck Lever { NFS4CLNT_MANAGER_RUNNING, "MANAGER_RUNNING" }, \ 302511ba52eSChuck Lever { NFS4CLNT_CHECK_LEASE, "CHECK_LEASE" }, \ 303511ba52eSChuck Lever { NFS4CLNT_LEASE_EXPIRED, "LEASE_EXPIRED" }, \ 304511ba52eSChuck Lever { NFS4CLNT_RECLAIM_REBOOT, "RECLAIM_REBOOT" }, \ 305511ba52eSChuck Lever { NFS4CLNT_RECLAIM_NOGRACE, "RECLAIM_NOGRACE" }, \ 306511ba52eSChuck Lever { NFS4CLNT_DELEGRETURN, "DELEGRETURN" }, \ 307511ba52eSChuck Lever { NFS4CLNT_SESSION_RESET, "SESSION_RESET" }, \ 308511ba52eSChuck Lever { NFS4CLNT_LEASE_CONFIRM, "LEASE_CONFIRM" }, \ 309511ba52eSChuck Lever { NFS4CLNT_SERVER_SCOPE_MISMATCH, \ 310511ba52eSChuck Lever "SERVER_SCOPE_MISMATCH" }, \ 311511ba52eSChuck Lever { NFS4CLNT_PURGE_STATE, "PURGE_STATE" }, \ 312511ba52eSChuck Lever { NFS4CLNT_BIND_CONN_TO_SESSION, \ 313511ba52eSChuck Lever "BIND_CONN_TO_SESSION" }, \ 314511ba52eSChuck Lever { NFS4CLNT_MOVED, "MOVED" }, \ 315511ba52eSChuck Lever { NFS4CLNT_LEASE_MOVED, "LEASE_MOVED" }, \ 316511ba52eSChuck Lever { NFS4CLNT_DELEGATION_EXPIRED, "DELEGATION_EXPIRED" }, \ 317511ba52eSChuck Lever { NFS4CLNT_RUN_MANAGER, "RUN_MANAGER" }, \ 318b5fdf841STrond Myklebust { NFS4CLNT_RECALL_RUNNING, "RECALL_RUNNING" }, \ 319b5fdf841STrond Myklebust { NFS4CLNT_RECALL_ANY_LAYOUT_READ, "RECALL_ANY_LAYOUT_READ" }, \ 320b5fdf841STrond Myklebust { NFS4CLNT_RECALL_ANY_LAYOUT_RW, "RECALL_ANY_LAYOUT_RW" }) 321511ba52eSChuck Lever 322511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr, 323511ba52eSChuck Lever TP_PROTO( 324511ba52eSChuck Lever const struct nfs_client *clp 325511ba52eSChuck Lever ), 326511ba52eSChuck Lever 327511ba52eSChuck Lever TP_ARGS(clp), 328511ba52eSChuck Lever 329511ba52eSChuck Lever TP_STRUCT__entry( 330511ba52eSChuck Lever __field(unsigned long, state) 331511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 332511ba52eSChuck Lever ), 333511ba52eSChuck Lever 334511ba52eSChuck Lever TP_fast_assign( 335511ba52eSChuck Lever __entry->state = clp->cl_state; 33678c14b38SJoe Perches __assign_str(hostname, clp->cl_hostname); 337511ba52eSChuck Lever ), 338511ba52eSChuck Lever 339511ba52eSChuck Lever TP_printk( 340511ba52eSChuck Lever "hostname=%s clp state=%s", __get_str(hostname), 341511ba52eSChuck Lever show_nfs4_clp_state(__entry->state) 342511ba52eSChuck Lever ) 343511ba52eSChuck Lever ) 344511ba52eSChuck Lever 345511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr_failed, 346511ba52eSChuck Lever TP_PROTO( 347511ba52eSChuck Lever const struct nfs_client *clp, 348511ba52eSChuck Lever const char *section, 349511ba52eSChuck Lever int status 350511ba52eSChuck Lever ), 351511ba52eSChuck Lever 352511ba52eSChuck Lever TP_ARGS(clp, section, status), 353511ba52eSChuck Lever 354511ba52eSChuck Lever TP_STRUCT__entry( 355511ba52eSChuck Lever __field(unsigned long, error) 356511ba52eSChuck Lever __field(unsigned long, state) 357511ba52eSChuck Lever __string(hostname, clp->cl_hostname) 358511ba52eSChuck Lever __string(section, section) 359511ba52eSChuck Lever ), 360511ba52eSChuck Lever 361511ba52eSChuck Lever TP_fast_assign( 362118b6292STrond Myklebust __entry->error = status < 0 ? -status : 0; 363511ba52eSChuck Lever __entry->state = clp->cl_state; 364511ba52eSChuck Lever __assign_str(hostname, clp->cl_hostname); 365511ba52eSChuck Lever __assign_str(section, section); 366511ba52eSChuck Lever ), 367511ba52eSChuck Lever 368511ba52eSChuck Lever TP_printk( 369511ba52eSChuck Lever "hostname=%s clp state=%s error=%ld (%s) section=%s", 370511ba52eSChuck Lever __get_str(hostname), 371511ba52eSChuck Lever show_nfs4_clp_state(__entry->state), -__entry->error, 3728791545eSChuck Lever show_nfs4_status(__entry->error), __get_str(section) 373511ba52eSChuck Lever 374511ba52eSChuck Lever ) 375511ba52eSChuck Lever ) 376511ba52eSChuck Lever 377da934ae0STrond Myklebust TRACE_EVENT(nfs4_xdr_bad_operation, 378da934ae0STrond Myklebust TP_PROTO( 379da934ae0STrond Myklebust const struct xdr_stream *xdr, 380da934ae0STrond Myklebust u32 op, 381da934ae0STrond Myklebust u32 expected 382da934ae0STrond Myklebust ), 383da934ae0STrond Myklebust 384da934ae0STrond Myklebust TP_ARGS(xdr, op, expected), 385da934ae0STrond Myklebust 386da934ae0STrond Myklebust TP_STRUCT__entry( 387da934ae0STrond Myklebust __field(unsigned int, task_id) 388da934ae0STrond Myklebust __field(unsigned int, client_id) 389da934ae0STrond Myklebust __field(u32, xid) 390da934ae0STrond Myklebust __field(u32, op) 391da934ae0STrond Myklebust __field(u32, expected) 392da934ae0STrond Myklebust ), 393da934ae0STrond Myklebust 394da934ae0STrond Myklebust TP_fast_assign( 395da934ae0STrond Myklebust const struct rpc_rqst *rqstp = xdr->rqst; 396da934ae0STrond Myklebust const struct rpc_task *task = rqstp->rq_task; 397da934ae0STrond Myklebust 398da934ae0STrond Myklebust __entry->task_id = task->tk_pid; 399da934ae0STrond Myklebust __entry->client_id = task->tk_client->cl_clid; 400da934ae0STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 401da934ae0STrond Myklebust __entry->op = op; 402da934ae0STrond Myklebust __entry->expected = expected; 403da934ae0STrond Myklebust ), 404da934ae0STrond Myklebust 405b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 406b4776a34SChuck Lever " xid=0x%08x operation=%u, expected=%u", 407da934ae0STrond Myklebust __entry->task_id, __entry->client_id, __entry->xid, 408da934ae0STrond Myklebust __entry->op, __entry->expected 409da934ae0STrond Myklebust ) 410da934ae0STrond Myklebust ); 411da934ae0STrond Myklebust 4123d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs4_xdr_event, 413f23f6584SChuck Lever TP_PROTO( 41462a92ba9SChuck Lever const struct xdr_stream *xdr, 415f23f6584SChuck Lever u32 op, 416118b6292STrond Myklebust u32 error 417f23f6584SChuck Lever ), 418f23f6584SChuck Lever 41962a92ba9SChuck Lever TP_ARGS(xdr, op, error), 420f23f6584SChuck Lever 421f23f6584SChuck Lever TP_STRUCT__entry( 42262a92ba9SChuck Lever __field(unsigned int, task_id) 42362a92ba9SChuck Lever __field(unsigned int, client_id) 42462a92ba9SChuck Lever __field(u32, xid) 425f23f6584SChuck Lever __field(u32, op) 42696650e2eSChuck Lever __field(unsigned long, error) 427f23f6584SChuck Lever ), 428f23f6584SChuck Lever 429f23f6584SChuck Lever TP_fast_assign( 43062a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 43162a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 43262a92ba9SChuck Lever 43362a92ba9SChuck Lever __entry->task_id = task->tk_pid; 43462a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 43562a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 436f23f6584SChuck Lever __entry->op = op; 43796650e2eSChuck Lever __entry->error = error; 438f23f6584SChuck Lever ), 439f23f6584SChuck Lever 440b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 441b4776a34SChuck Lever " xid=0x%08x error=%ld (%s) operation=%u", 44262a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 4438791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 44496650e2eSChuck Lever __entry->op 445f23f6584SChuck Lever ) 446f23f6584SChuck Lever ); 4473d66bae1STrond Myklebust #define DEFINE_NFS4_XDR_EVENT(name) \ 4483d66bae1STrond Myklebust DEFINE_EVENT(nfs4_xdr_event, name, \ 4493d66bae1STrond Myklebust TP_PROTO( \ 4503d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 4513d66bae1STrond Myklebust u32 op, \ 4523d66bae1STrond Myklebust u32 error \ 4533d66bae1STrond Myklebust ), \ 4543d66bae1STrond Myklebust TP_ARGS(xdr, op, error)) 4553d66bae1STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_status); 456eb3d58c6STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_bad_filehandle); 457f23f6584SChuck Lever 4582bb50aabSChuck Lever DECLARE_EVENT_CLASS(nfs4_cb_error_class, 4592bb50aabSChuck Lever TP_PROTO( 4602bb50aabSChuck Lever __be32 xid, 4612bb50aabSChuck Lever u32 cb_ident 4622bb50aabSChuck Lever ), 4632bb50aabSChuck Lever 4642bb50aabSChuck Lever TP_ARGS(xid, cb_ident), 4652bb50aabSChuck Lever 4662bb50aabSChuck Lever TP_STRUCT__entry( 4672bb50aabSChuck Lever __field(u32, xid) 4682bb50aabSChuck Lever __field(u32, cbident) 4692bb50aabSChuck Lever ), 4702bb50aabSChuck Lever 4712bb50aabSChuck Lever TP_fast_assign( 4722bb50aabSChuck Lever __entry->xid = be32_to_cpu(xid); 4732bb50aabSChuck Lever __entry->cbident = cb_ident; 4742bb50aabSChuck Lever ), 4752bb50aabSChuck Lever 4762bb50aabSChuck Lever TP_printk( 4772bb50aabSChuck Lever "xid=0x%08x cb_ident=0x%08x", 4782bb50aabSChuck Lever __entry->xid, __entry->cbident 4792bb50aabSChuck Lever ) 4802bb50aabSChuck Lever ); 4812bb50aabSChuck Lever 4822bb50aabSChuck Lever #define DEFINE_CB_ERROR_EVENT(name) \ 4832bb50aabSChuck Lever DEFINE_EVENT(nfs4_cb_error_class, nfs_cb_##name, \ 4842bb50aabSChuck Lever TP_PROTO( \ 4852bb50aabSChuck Lever __be32 xid, \ 4862bb50aabSChuck Lever u32 cb_ident \ 4872bb50aabSChuck Lever ), \ 4882bb50aabSChuck Lever TP_ARGS(xid, cb_ident)) 4892bb50aabSChuck Lever 4902bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(no_clp); 4912bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(badprinc); 4922bb50aabSChuck Lever 49342113a75STrond Myklebust DECLARE_EVENT_CLASS(nfs4_open_event, 49442113a75STrond Myklebust TP_PROTO( 49542113a75STrond Myklebust const struct nfs_open_context *ctx, 49642113a75STrond Myklebust int flags, 49742113a75STrond Myklebust int error 49842113a75STrond Myklebust ), 49942113a75STrond Myklebust 50042113a75STrond Myklebust TP_ARGS(ctx, flags, error), 50142113a75STrond Myklebust 50242113a75STrond Myklebust TP_STRUCT__entry( 50396650e2eSChuck Lever __field(unsigned long, error) 5049d2d48bbSChuck Lever __field(unsigned long, flags) 5059d2d48bbSChuck Lever __field(unsigned long, fmode) 50642113a75STrond Myklebust __field(dev_t, dev) 50742113a75STrond Myklebust __field(u32, fhandle) 50842113a75STrond Myklebust __field(u64, fileid) 50942113a75STrond Myklebust __field(u64, dir) 51042113a75STrond Myklebust __string(name, ctx->dentry->d_name.name) 51148c9579aSOlga Kornievskaia __field(int, stateid_seq) 51248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 51348c9579aSOlga Kornievskaia __field(int, openstateid_seq) 51448c9579aSOlga Kornievskaia __field(u32, openstateid_hash) 51542113a75STrond Myklebust ), 51642113a75STrond Myklebust 51742113a75STrond Myklebust TP_fast_assign( 51842113a75STrond Myklebust const struct nfs4_state *state = ctx->state; 51942113a75STrond Myklebust const struct inode *inode = NULL; 52042113a75STrond Myklebust 52196650e2eSChuck Lever __entry->error = -error; 52242113a75STrond Myklebust __entry->flags = flags; 5239d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 52442113a75STrond Myklebust __entry->dev = ctx->dentry->d_sb->s_dev; 52548c9579aSOlga Kornievskaia if (!IS_ERR_OR_NULL(state)) { 52642113a75STrond Myklebust inode = state->inode; 52748c9579aSOlga Kornievskaia __entry->stateid_seq = 52848c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 52948c9579aSOlga Kornievskaia __entry->stateid_hash = 53048c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 53148c9579aSOlga Kornievskaia __entry->openstateid_seq = 53248c9579aSOlga Kornievskaia be32_to_cpu(state->open_stateid.seqid); 53348c9579aSOlga Kornievskaia __entry->openstateid_hash = 53448c9579aSOlga Kornievskaia nfs_stateid_hash(&state->open_stateid); 53548c9579aSOlga Kornievskaia } else { 53648c9579aSOlga Kornievskaia __entry->stateid_seq = 0; 53748c9579aSOlga Kornievskaia __entry->stateid_hash = 0; 53848c9579aSOlga Kornievskaia __entry->openstateid_seq = 0; 53948c9579aSOlga Kornievskaia __entry->openstateid_hash = 0; 54048c9579aSOlga Kornievskaia } 54142113a75STrond Myklebust if (inode != NULL) { 54242113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 54342113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 54442113a75STrond Myklebust } else { 54542113a75STrond Myklebust __entry->fileid = 0; 54642113a75STrond Myklebust __entry->fhandle = 0; 54742113a75STrond Myklebust } 5482b0143b5SDavid Howells __entry->dir = NFS_FILEID(d_inode(ctx->dentry->d_parent)); 54942113a75STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 55042113a75STrond Myklebust ), 55142113a75STrond Myklebust 55242113a75STrond Myklebust TP_printk( 5539d2d48bbSChuck Lever "error=%ld (%s) flags=%lu (%s) fmode=%s " 55442113a75STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 55548c9579aSOlga Kornievskaia "name=%02x:%02x:%llu/%s stateid=%d:0x%08x " 55648c9579aSOlga Kornievskaia "openstateid=%d:0x%08x", 55796650e2eSChuck Lever -__entry->error, 5588791545eSChuck Lever show_nfs4_status(__entry->error), 55942113a75STrond Myklebust __entry->flags, 5609d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5619d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 56242113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 56342113a75STrond Myklebust (unsigned long long)__entry->fileid, 56442113a75STrond Myklebust __entry->fhandle, 56542113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 56642113a75STrond Myklebust (unsigned long long)__entry->dir, 56748c9579aSOlga Kornievskaia __get_str(name), 56848c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 56948c9579aSOlga Kornievskaia __entry->openstateid_seq, __entry->openstateid_hash 57042113a75STrond Myklebust ) 57142113a75STrond Myklebust ); 57242113a75STrond Myklebust 57342113a75STrond Myklebust #define DEFINE_NFS4_OPEN_EVENT(name) \ 57442113a75STrond Myklebust DEFINE_EVENT(nfs4_open_event, name, \ 57542113a75STrond Myklebust TP_PROTO( \ 57642113a75STrond Myklebust const struct nfs_open_context *ctx, \ 57742113a75STrond Myklebust int flags, \ 57842113a75STrond Myklebust int error \ 57942113a75STrond Myklebust ), \ 58042113a75STrond Myklebust TP_ARGS(ctx, flags, error)) 58142113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_reclaim); 58242113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_expired); 58342113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_file); 58442113a75STrond Myklebust 5859759b0fbSOlga Kornievskaia TRACE_EVENT(nfs4_cached_open, 5869759b0fbSOlga Kornievskaia TP_PROTO( 5879759b0fbSOlga Kornievskaia const struct nfs4_state *state 5889759b0fbSOlga Kornievskaia ), 5899759b0fbSOlga Kornievskaia TP_ARGS(state), 5909759b0fbSOlga Kornievskaia TP_STRUCT__entry( 5919759b0fbSOlga Kornievskaia __field(dev_t, dev) 5929759b0fbSOlga Kornievskaia __field(u32, fhandle) 5939759b0fbSOlga Kornievskaia __field(u64, fileid) 5949759b0fbSOlga Kornievskaia __field(unsigned int, fmode) 5959759b0fbSOlga Kornievskaia __field(int, stateid_seq) 5969759b0fbSOlga Kornievskaia __field(u32, stateid_hash) 5979759b0fbSOlga Kornievskaia ), 5989759b0fbSOlga Kornievskaia 5999759b0fbSOlga Kornievskaia TP_fast_assign( 6009759b0fbSOlga Kornievskaia const struct inode *inode = state->inode; 6019759b0fbSOlga Kornievskaia 6029759b0fbSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 6039759b0fbSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 6049759b0fbSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 6059759b0fbSOlga Kornievskaia __entry->fmode = (__force unsigned int)state->state; 6069759b0fbSOlga Kornievskaia __entry->stateid_seq = 6079759b0fbSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 6089759b0fbSOlga Kornievskaia __entry->stateid_hash = 6099759b0fbSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 6109759b0fbSOlga Kornievskaia ), 6119759b0fbSOlga Kornievskaia 6129759b0fbSOlga Kornievskaia TP_printk( 6139759b0fbSOlga Kornievskaia "fmode=%s fileid=%02x:%02x:%llu " 6149759b0fbSOlga Kornievskaia "fhandle=0x%08x stateid=%d:0x%08x", 6159d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 6169759b0fbSOlga Kornievskaia "closed", 6179759b0fbSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 6189759b0fbSOlga Kornievskaia (unsigned long long)__entry->fileid, 6199759b0fbSOlga Kornievskaia __entry->fhandle, 6209759b0fbSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 6219759b0fbSOlga Kornievskaia ) 6229759b0fbSOlga Kornievskaia ); 6239759b0fbSOlga Kornievskaia 62442113a75STrond Myklebust TRACE_EVENT(nfs4_close, 62542113a75STrond Myklebust TP_PROTO( 62642113a75STrond Myklebust const struct nfs4_state *state, 62742113a75STrond Myklebust const struct nfs_closeargs *args, 62842113a75STrond Myklebust const struct nfs_closeres *res, 62942113a75STrond Myklebust int error 63042113a75STrond Myklebust ), 63142113a75STrond Myklebust 63242113a75STrond Myklebust TP_ARGS(state, args, res, error), 63342113a75STrond Myklebust 63442113a75STrond Myklebust TP_STRUCT__entry( 63542113a75STrond Myklebust __field(dev_t, dev) 63642113a75STrond Myklebust __field(u32, fhandle) 63742113a75STrond Myklebust __field(u64, fileid) 63842113a75STrond Myklebust __field(unsigned int, fmode) 63996650e2eSChuck Lever __field(unsigned long, error) 64048c9579aSOlga Kornievskaia __field(int, stateid_seq) 64148c9579aSOlga Kornievskaia __field(u32, stateid_hash) 64242113a75STrond Myklebust ), 64342113a75STrond Myklebust 64442113a75STrond Myklebust TP_fast_assign( 64542113a75STrond Myklebust const struct inode *inode = state->inode; 64642113a75STrond Myklebust 64742113a75STrond Myklebust __entry->dev = inode->i_sb->s_dev; 64842113a75STrond Myklebust __entry->fileid = NFS_FILEID(inode); 64942113a75STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 65042113a75STrond Myklebust __entry->fmode = (__force unsigned int)state->state; 651118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 65248c9579aSOlga Kornievskaia __entry->stateid_seq = 65348c9579aSOlga Kornievskaia be32_to_cpu(args->stateid.seqid); 65448c9579aSOlga Kornievskaia __entry->stateid_hash = 65548c9579aSOlga Kornievskaia nfs_stateid_hash(&args->stateid); 65642113a75STrond Myklebust ), 65742113a75STrond Myklebust 65842113a75STrond Myklebust TP_printk( 65996650e2eSChuck Lever "error=%ld (%s) fmode=%s fileid=%02x:%02x:%llu " 66048c9579aSOlga Kornievskaia "fhandle=0x%08x openstateid=%d:0x%08x", 66196650e2eSChuck Lever -__entry->error, 6628791545eSChuck Lever show_nfs4_status(__entry->error), 6639d2d48bbSChuck Lever __entry->fmode ? show_fs_fmode_flags(__entry->fmode) : 66442113a75STrond Myklebust "closed", 66542113a75STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 66642113a75STrond Myklebust (unsigned long long)__entry->fileid, 66748c9579aSOlga Kornievskaia __entry->fhandle, 66848c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 66942113a75STrond Myklebust ) 67042113a75STrond Myklebust ); 67142113a75STrond Myklebust 672d1b748a5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_lock_event, 673d1b748a5STrond Myklebust TP_PROTO( 674d1b748a5STrond Myklebust const struct file_lock *request, 675d1b748a5STrond Myklebust const struct nfs4_state *state, 676d1b748a5STrond Myklebust int cmd, 677d1b748a5STrond Myklebust int error 678d1b748a5STrond Myklebust ), 679d1b748a5STrond Myklebust 680d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error), 681d1b748a5STrond Myklebust 682d1b748a5STrond Myklebust TP_STRUCT__entry( 68396650e2eSChuck Lever __field(unsigned long, error) 6849d2d48bbSChuck Lever __field(unsigned long, cmd) 6859d2d48bbSChuck Lever __field(unsigned long, type) 686d1b748a5STrond Myklebust __field(loff_t, start) 687d1b748a5STrond Myklebust __field(loff_t, end) 688d1b748a5STrond Myklebust __field(dev_t, dev) 689d1b748a5STrond Myklebust __field(u32, fhandle) 690d1b748a5STrond Myklebust __field(u64, fileid) 69148c9579aSOlga Kornievskaia __field(int, stateid_seq) 69248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 693d1b748a5STrond Myklebust ), 694d1b748a5STrond Myklebust 695d1b748a5STrond Myklebust TP_fast_assign( 696d1b748a5STrond Myklebust const struct inode *inode = state->inode; 697d1b748a5STrond Myklebust 698118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 699d1b748a5STrond Myklebust __entry->cmd = cmd; 700d1b748a5STrond Myklebust __entry->type = request->fl_type; 701d1b748a5STrond Myklebust __entry->start = request->fl_start; 702d1b748a5STrond Myklebust __entry->end = request->fl_end; 703d1b748a5STrond Myklebust __entry->dev = inode->i_sb->s_dev; 704d1b748a5STrond Myklebust __entry->fileid = NFS_FILEID(inode); 705d1b748a5STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 70648c9579aSOlga Kornievskaia __entry->stateid_seq = 70748c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 70848c9579aSOlga Kornievskaia __entry->stateid_hash = 70948c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 710d1b748a5STrond Myklebust ), 711d1b748a5STrond Myklebust 712d1b748a5STrond Myklebust TP_printk( 71396650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 71448c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 71548c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 71696650e2eSChuck Lever -__entry->error, 7178791545eSChuck Lever show_nfs4_status(__entry->error), 7189d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 7199d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 720d1b748a5STrond Myklebust (long long)__entry->start, 721d1b748a5STrond Myklebust (long long)__entry->end, 722d1b748a5STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 723d1b748a5STrond Myklebust (unsigned long long)__entry->fileid, 72448c9579aSOlga Kornievskaia __entry->fhandle, 72548c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 726d1b748a5STrond Myklebust ) 727d1b748a5STrond Myklebust ); 728d1b748a5STrond Myklebust 729d1b748a5STrond Myklebust #define DEFINE_NFS4_LOCK_EVENT(name) \ 730d1b748a5STrond Myklebust DEFINE_EVENT(nfs4_lock_event, name, \ 731d1b748a5STrond Myklebust TP_PROTO( \ 732d1b748a5STrond Myklebust const struct file_lock *request, \ 733d1b748a5STrond Myklebust const struct nfs4_state *state, \ 734d1b748a5STrond Myklebust int cmd, \ 735d1b748a5STrond Myklebust int error \ 736d1b748a5STrond Myklebust ), \ 737d1b748a5STrond Myklebust TP_ARGS(request, state, cmd, error)) 738d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock); 739d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_unlock); 740d1b748a5STrond Myklebust 74148c9579aSOlga Kornievskaia TRACE_EVENT(nfs4_set_lock, 74248c9579aSOlga Kornievskaia TP_PROTO( 74348c9579aSOlga Kornievskaia const struct file_lock *request, 74448c9579aSOlga Kornievskaia const struct nfs4_state *state, 74548c9579aSOlga Kornievskaia const nfs4_stateid *lockstateid, 74648c9579aSOlga Kornievskaia int cmd, 74748c9579aSOlga Kornievskaia int error 74848c9579aSOlga Kornievskaia ), 74948c9579aSOlga Kornievskaia 75048c9579aSOlga Kornievskaia TP_ARGS(request, state, lockstateid, cmd, error), 75148c9579aSOlga Kornievskaia 75248c9579aSOlga Kornievskaia TP_STRUCT__entry( 75396650e2eSChuck Lever __field(unsigned long, error) 7549d2d48bbSChuck Lever __field(unsigned long, cmd) 7559d2d48bbSChuck Lever __field(unsigned long, type) 75648c9579aSOlga Kornievskaia __field(loff_t, start) 75748c9579aSOlga Kornievskaia __field(loff_t, end) 75848c9579aSOlga Kornievskaia __field(dev_t, dev) 75948c9579aSOlga Kornievskaia __field(u32, fhandle) 76048c9579aSOlga Kornievskaia __field(u64, fileid) 76148c9579aSOlga Kornievskaia __field(int, stateid_seq) 76248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 76348c9579aSOlga Kornievskaia __field(int, lockstateid_seq) 76448c9579aSOlga Kornievskaia __field(u32, lockstateid_hash) 76548c9579aSOlga Kornievskaia ), 76648c9579aSOlga Kornievskaia 76748c9579aSOlga Kornievskaia TP_fast_assign( 76848c9579aSOlga Kornievskaia const struct inode *inode = state->inode; 76948c9579aSOlga Kornievskaia 770118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 77148c9579aSOlga Kornievskaia __entry->cmd = cmd; 77248c9579aSOlga Kornievskaia __entry->type = request->fl_type; 77348c9579aSOlga Kornievskaia __entry->start = request->fl_start; 77448c9579aSOlga Kornievskaia __entry->end = request->fl_end; 77548c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 77648c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 77748c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 77848c9579aSOlga Kornievskaia __entry->stateid_seq = 77948c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 78048c9579aSOlga Kornievskaia __entry->stateid_hash = 78148c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 78248c9579aSOlga Kornievskaia __entry->lockstateid_seq = 78348c9579aSOlga Kornievskaia be32_to_cpu(lockstateid->seqid); 78448c9579aSOlga Kornievskaia __entry->lockstateid_hash = 78548c9579aSOlga Kornievskaia nfs_stateid_hash(lockstateid); 78648c9579aSOlga Kornievskaia ), 78748c9579aSOlga Kornievskaia 78848c9579aSOlga Kornievskaia TP_printk( 78996650e2eSChuck Lever "error=%ld (%s) cmd=%s:%s range=%lld:%lld " 79048c9579aSOlga Kornievskaia "fileid=%02x:%02x:%llu fhandle=0x%08x " 79148c9579aSOlga Kornievskaia "stateid=%d:0x%08x lockstateid=%d:0x%08x", 79296650e2eSChuck Lever -__entry->error, 7938791545eSChuck Lever show_nfs4_status(__entry->error), 7949d2d48bbSChuck Lever show_fs_fcntl_cmd(__entry->cmd), 7959d2d48bbSChuck Lever show_fs_fcntl_lock_type(__entry->type), 79648c9579aSOlga Kornievskaia (long long)__entry->start, 79748c9579aSOlga Kornievskaia (long long)__entry->end, 79848c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 79948c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 80048c9579aSOlga Kornievskaia __entry->fhandle, 80148c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 80248c9579aSOlga Kornievskaia __entry->lockstateid_seq, __entry->lockstateid_hash 80348c9579aSOlga Kornievskaia ) 80448c9579aSOlga Kornievskaia ); 80548c9579aSOlga Kornievskaia 80621f86d2dSChuck Lever TRACE_DEFINE_ENUM(LK_STATE_IN_USE); 80721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_DELEGATED_STATE); 80821f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_OPEN_STATE); 80921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDONLY_STATE); 81021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_WRONLY_STATE); 81121f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDWR_STATE); 81221f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_REBOOT); 81321f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_NOGRACE); 81421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_POSIX_LOCKS); 81521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECOVERY_FAILED); 81621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_MAY_NOTIFY_LOCK); 81721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_CHANGE_WAIT); 81821f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_DST_SSC_COPY_STATE); 81921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_SRC_SSC_COPY_STATE); 82021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_SRV_SSC_COPY_STATE); 82121f86d2dSChuck Lever 82221f86d2dSChuck Lever #define show_nfs4_state_flags(flags) \ 82321f86d2dSChuck Lever __print_flags(flags, "|", \ 82421f86d2dSChuck Lever { LK_STATE_IN_USE, "IN_USE" }, \ 82521f86d2dSChuck Lever { NFS_DELEGATED_STATE, "DELEGATED" }, \ 82621f86d2dSChuck Lever { NFS_OPEN_STATE, "OPEN" }, \ 82721f86d2dSChuck Lever { NFS_O_RDONLY_STATE, "O_RDONLY" }, \ 82821f86d2dSChuck Lever { NFS_O_WRONLY_STATE, "O_WRONLY" }, \ 82921f86d2dSChuck Lever { NFS_O_RDWR_STATE, "O_RDWR" }, \ 83021f86d2dSChuck Lever { NFS_STATE_RECLAIM_REBOOT, "RECLAIM_REBOOT" }, \ 83121f86d2dSChuck Lever { NFS_STATE_RECLAIM_NOGRACE, "RECLAIM_NOGRACE" }, \ 83221f86d2dSChuck Lever { NFS_STATE_POSIX_LOCKS, "POSIX_LOCKS" }, \ 83321f86d2dSChuck Lever { NFS_STATE_RECOVERY_FAILED, "RECOVERY_FAILED" }, \ 83421f86d2dSChuck Lever { NFS_STATE_MAY_NOTIFY_LOCK, "MAY_NOTIFY_LOCK" }, \ 83521f86d2dSChuck Lever { NFS_STATE_CHANGE_WAIT, "CHANGE_WAIT" }, \ 83621f86d2dSChuck Lever { NFS_CLNT_DST_SSC_COPY_STATE, "CLNT_DST_SSC_COPY" }, \ 83721f86d2dSChuck Lever { NFS_CLNT_SRC_SSC_COPY_STATE, "CLNT_SRC_SSC_COPY" }, \ 83821f86d2dSChuck Lever { NFS_SRV_SSC_COPY_STATE, "SRV_SSC_COPY" }) 83921f86d2dSChuck Lever 84021f86d2dSChuck Lever #define show_nfs4_lock_flags(flags) \ 84121f86d2dSChuck Lever __print_flags(flags, "|", \ 84221f86d2dSChuck Lever { BIT(NFS_LOCK_INITIALIZED), "INITIALIZED" }, \ 84321f86d2dSChuck Lever { BIT(NFS_LOCK_LOST), "LOST" }) 84421f86d2dSChuck Lever 84521f86d2dSChuck Lever TRACE_EVENT(nfs4_state_lock_reclaim, 84621f86d2dSChuck Lever TP_PROTO( 84721f86d2dSChuck Lever const struct nfs4_state *state, 84821f86d2dSChuck Lever const struct nfs4_lock_state *lock 84921f86d2dSChuck Lever ), 85021f86d2dSChuck Lever 85121f86d2dSChuck Lever TP_ARGS(state, lock), 85221f86d2dSChuck Lever 85321f86d2dSChuck Lever TP_STRUCT__entry( 85421f86d2dSChuck Lever __field(dev_t, dev) 85521f86d2dSChuck Lever __field(u32, fhandle) 85621f86d2dSChuck Lever __field(u64, fileid) 85721f86d2dSChuck Lever __field(unsigned long, state_flags) 85821f86d2dSChuck Lever __field(unsigned long, lock_flags) 85921f86d2dSChuck Lever __field(int, stateid_seq) 86021f86d2dSChuck Lever __field(u32, stateid_hash) 86121f86d2dSChuck Lever ), 86221f86d2dSChuck Lever 86321f86d2dSChuck Lever TP_fast_assign( 86421f86d2dSChuck Lever const struct inode *inode = state->inode; 86521f86d2dSChuck Lever 86621f86d2dSChuck Lever __entry->dev = inode->i_sb->s_dev; 86721f86d2dSChuck Lever __entry->fileid = NFS_FILEID(inode); 86821f86d2dSChuck Lever __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 86921f86d2dSChuck Lever __entry->state_flags = state->flags; 87021f86d2dSChuck Lever __entry->lock_flags = lock->ls_flags; 87121f86d2dSChuck Lever __entry->stateid_seq = 87221f86d2dSChuck Lever be32_to_cpu(state->stateid.seqid); 87321f86d2dSChuck Lever __entry->stateid_hash = 87421f86d2dSChuck Lever nfs_stateid_hash(&state->stateid); 87521f86d2dSChuck Lever ), 87621f86d2dSChuck Lever 87721f86d2dSChuck Lever TP_printk( 87821f86d2dSChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 87921f86d2dSChuck Lever "stateid=%d:0x%08x state_flags=%s lock_flags=%s", 88021f86d2dSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 88121f86d2dSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 88221f86d2dSChuck Lever __entry->stateid_seq, __entry->stateid_hash, 88321f86d2dSChuck Lever show_nfs4_state_flags(__entry->state_flags), 88421f86d2dSChuck Lever show_nfs4_lock_flags(__entry->lock_flags) 88521f86d2dSChuck Lever ) 88621f86d2dSChuck Lever ) 88721f86d2dSChuck Lever 888ca8acf8dSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_set_delegation_event, 889ca8acf8dSTrond Myklebust TP_PROTO( 890ca8acf8dSTrond Myklebust const struct inode *inode, 891ca8acf8dSTrond Myklebust fmode_t fmode 892ca8acf8dSTrond Myklebust ), 893ca8acf8dSTrond Myklebust 894ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode), 895ca8acf8dSTrond Myklebust 896ca8acf8dSTrond Myklebust TP_STRUCT__entry( 897ca8acf8dSTrond Myklebust __field(dev_t, dev) 898ca8acf8dSTrond Myklebust __field(u32, fhandle) 899ca8acf8dSTrond Myklebust __field(u64, fileid) 900ca8acf8dSTrond Myklebust __field(unsigned int, fmode) 901ca8acf8dSTrond Myklebust ), 902ca8acf8dSTrond Myklebust 903ca8acf8dSTrond Myklebust TP_fast_assign( 904ca8acf8dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 905ca8acf8dSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 906ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 907ca8acf8dSTrond Myklebust __entry->fmode = (__force unsigned int)fmode; 908ca8acf8dSTrond Myklebust ), 909ca8acf8dSTrond Myklebust 910ca8acf8dSTrond Myklebust TP_printk( 911ca8acf8dSTrond Myklebust "fmode=%s fileid=%02x:%02x:%llu fhandle=0x%08x", 9129d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 913ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 914ca8acf8dSTrond Myklebust (unsigned long long)__entry->fileid, 915ca8acf8dSTrond Myklebust __entry->fhandle 916ca8acf8dSTrond Myklebust ) 917ca8acf8dSTrond Myklebust ); 918ca8acf8dSTrond Myklebust #define DEFINE_NFS4_SET_DELEGATION_EVENT(name) \ 919ca8acf8dSTrond Myklebust DEFINE_EVENT(nfs4_set_delegation_event, name, \ 920ca8acf8dSTrond Myklebust TP_PROTO( \ 921ca8acf8dSTrond Myklebust const struct inode *inode, \ 922ca8acf8dSTrond Myklebust fmode_t fmode \ 923ca8acf8dSTrond Myklebust ), \ 924ca8acf8dSTrond Myklebust TP_ARGS(inode, fmode)) 925ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_set_delegation); 926ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_reclaim_delegation); 927ca8acf8dSTrond Myklebust 928ca8acf8dSTrond Myklebust TRACE_EVENT(nfs4_delegreturn_exit, 929ca8acf8dSTrond Myklebust TP_PROTO( 930ca8acf8dSTrond Myklebust const struct nfs4_delegreturnargs *args, 931ca8acf8dSTrond Myklebust const struct nfs4_delegreturnres *res, 932ca8acf8dSTrond Myklebust int error 933ca8acf8dSTrond Myklebust ), 934ca8acf8dSTrond Myklebust 935ca8acf8dSTrond Myklebust TP_ARGS(args, res, error), 936ca8acf8dSTrond Myklebust 937ca8acf8dSTrond Myklebust TP_STRUCT__entry( 938ca8acf8dSTrond Myklebust __field(dev_t, dev) 939ca8acf8dSTrond Myklebust __field(u32, fhandle) 94096650e2eSChuck Lever __field(unsigned long, error) 94148c9579aSOlga Kornievskaia __field(int, stateid_seq) 94248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 943ca8acf8dSTrond Myklebust ), 944ca8acf8dSTrond Myklebust 945ca8acf8dSTrond Myklebust TP_fast_assign( 946ca8acf8dSTrond Myklebust __entry->dev = res->server->s_dev; 947ca8acf8dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(args->fhandle); 948118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 94948c9579aSOlga Kornievskaia __entry->stateid_seq = 95048c9579aSOlga Kornievskaia be32_to_cpu(args->stateid->seqid); 95148c9579aSOlga Kornievskaia __entry->stateid_hash = 95248c9579aSOlga Kornievskaia nfs_stateid_hash(args->stateid); 953ca8acf8dSTrond Myklebust ), 954ca8acf8dSTrond Myklebust 955ca8acf8dSTrond Myklebust TP_printk( 95696650e2eSChuck Lever "error=%ld (%s) dev=%02x:%02x fhandle=0x%08x " 95748c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 95896650e2eSChuck Lever -__entry->error, 9598791545eSChuck Lever show_nfs4_status(__entry->error), 960ca8acf8dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 96148c9579aSOlga Kornievskaia __entry->fhandle, 96248c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 963ca8acf8dSTrond Myklebust ) 964ca8acf8dSTrond Myklebust ); 965ca8acf8dSTrond Myklebust 96608cb47faSTrond Myklebust #ifdef CONFIG_NFS_V4_1 96708cb47faSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_test_stateid_event, 96808cb47faSTrond Myklebust TP_PROTO( 96908cb47faSTrond Myklebust const struct nfs4_state *state, 97008cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, 97108cb47faSTrond Myklebust int error 97208cb47faSTrond Myklebust ), 97308cb47faSTrond Myklebust 97408cb47faSTrond Myklebust TP_ARGS(state, lsp, error), 97508cb47faSTrond Myklebust 97608cb47faSTrond Myklebust TP_STRUCT__entry( 97796650e2eSChuck Lever __field(unsigned long, error) 97808cb47faSTrond Myklebust __field(dev_t, dev) 97908cb47faSTrond Myklebust __field(u32, fhandle) 98008cb47faSTrond Myklebust __field(u64, fileid) 98148c9579aSOlga Kornievskaia __field(int, stateid_seq) 98248c9579aSOlga Kornievskaia __field(u32, stateid_hash) 98308cb47faSTrond Myklebust ), 98408cb47faSTrond Myklebust 98508cb47faSTrond Myklebust TP_fast_assign( 98608cb47faSTrond Myklebust const struct inode *inode = state->inode; 98708cb47faSTrond Myklebust 988118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 98908cb47faSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 99008cb47faSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 99108cb47faSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 99248c9579aSOlga Kornievskaia __entry->stateid_seq = 99348c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 99448c9579aSOlga Kornievskaia __entry->stateid_hash = 99548c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 99608cb47faSTrond Myklebust ), 99708cb47faSTrond Myklebust 99808cb47faSTrond Myklebust TP_printk( 99996650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 100048c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 100196650e2eSChuck Lever -__entry->error, 10028791545eSChuck Lever show_nfs4_status(__entry->error), 100308cb47faSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 100408cb47faSTrond Myklebust (unsigned long long)__entry->fileid, 100548c9579aSOlga Kornievskaia __entry->fhandle, 100648c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 100708cb47faSTrond Myklebust ) 100808cb47faSTrond Myklebust ); 100908cb47faSTrond Myklebust 101008cb47faSTrond Myklebust #define DEFINE_NFS4_TEST_STATEID_EVENT(name) \ 101108cb47faSTrond Myklebust DEFINE_EVENT(nfs4_test_stateid_event, name, \ 101208cb47faSTrond Myklebust TP_PROTO( \ 101308cb47faSTrond Myklebust const struct nfs4_state *state, \ 101408cb47faSTrond Myklebust const struct nfs4_lock_state *lsp, \ 101508cb47faSTrond Myklebust int error \ 101608cb47faSTrond Myklebust ), \ 101708cb47faSTrond Myklebust TP_ARGS(state, lsp, error)) 101808cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid); 101908cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid); 102008cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid); 102108cb47faSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 102208cb47faSTrond Myklebust 1023078ea3dfSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_lookup_event, 1024078ea3dfSTrond Myklebust TP_PROTO( 1025078ea3dfSTrond Myklebust const struct inode *dir, 1026078ea3dfSTrond Myklebust const struct qstr *name, 1027078ea3dfSTrond Myklebust int error 1028078ea3dfSTrond Myklebust ), 1029078ea3dfSTrond Myklebust 1030078ea3dfSTrond Myklebust TP_ARGS(dir, name, error), 1031078ea3dfSTrond Myklebust 1032078ea3dfSTrond Myklebust TP_STRUCT__entry( 1033078ea3dfSTrond Myklebust __field(dev_t, dev) 103496650e2eSChuck Lever __field(unsigned long, error) 1035078ea3dfSTrond Myklebust __field(u64, dir) 1036078ea3dfSTrond Myklebust __string(name, name->name) 1037078ea3dfSTrond Myklebust ), 1038078ea3dfSTrond Myklebust 1039078ea3dfSTrond Myklebust TP_fast_assign( 1040078ea3dfSTrond Myklebust __entry->dev = dir->i_sb->s_dev; 1041078ea3dfSTrond Myklebust __entry->dir = NFS_FILEID(dir); 104296650e2eSChuck Lever __entry->error = -error; 1043078ea3dfSTrond Myklebust __assign_str(name, name->name); 1044078ea3dfSTrond Myklebust ), 1045078ea3dfSTrond Myklebust 1046078ea3dfSTrond Myklebust TP_printk( 104796650e2eSChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 104896650e2eSChuck Lever -__entry->error, 10498791545eSChuck Lever show_nfs4_status(__entry->error), 1050078ea3dfSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1051078ea3dfSTrond Myklebust (unsigned long long)__entry->dir, 1052078ea3dfSTrond Myklebust __get_str(name) 1053078ea3dfSTrond Myklebust ) 1054078ea3dfSTrond Myklebust ); 1055078ea3dfSTrond Myklebust 1056078ea3dfSTrond Myklebust #define DEFINE_NFS4_LOOKUP_EVENT(name) \ 1057078ea3dfSTrond Myklebust DEFINE_EVENT(nfs4_lookup_event, name, \ 1058078ea3dfSTrond Myklebust TP_PROTO( \ 1059078ea3dfSTrond Myklebust const struct inode *dir, \ 1060078ea3dfSTrond Myklebust const struct qstr *name, \ 1061078ea3dfSTrond Myklebust int error \ 1062078ea3dfSTrond Myklebust ), \ 1063078ea3dfSTrond Myklebust TP_ARGS(dir, name, error)) 1064078ea3dfSTrond Myklebust 1065078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_lookup); 1066078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_symlink); 1067078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mkdir); 1068078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mknod); 1069078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove); 1070078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations); 1071078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo); 1072078ea3dfSTrond Myklebust 10735b5faaf6SJeff Layton TRACE_EVENT(nfs4_lookupp, 10745b5faaf6SJeff Layton TP_PROTO( 10755b5faaf6SJeff Layton const struct inode *inode, 10765b5faaf6SJeff Layton int error 10775b5faaf6SJeff Layton ), 10785b5faaf6SJeff Layton 10795b5faaf6SJeff Layton TP_ARGS(inode, error), 10805b5faaf6SJeff Layton 10815b5faaf6SJeff Layton TP_STRUCT__entry( 10825b5faaf6SJeff Layton __field(dev_t, dev) 10835b5faaf6SJeff Layton __field(u64, ino) 108496650e2eSChuck Lever __field(unsigned long, error) 10855b5faaf6SJeff Layton ), 10865b5faaf6SJeff Layton 10875b5faaf6SJeff Layton TP_fast_assign( 10885b5faaf6SJeff Layton __entry->dev = inode->i_sb->s_dev; 10895b5faaf6SJeff Layton __entry->ino = NFS_FILEID(inode); 1090118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 10915b5faaf6SJeff Layton ), 10925b5faaf6SJeff Layton 10935b5faaf6SJeff Layton TP_printk( 109496650e2eSChuck Lever "error=%ld (%s) inode=%02x:%02x:%llu", 109596650e2eSChuck Lever -__entry->error, 10968791545eSChuck Lever show_nfs4_status(__entry->error), 10975b5faaf6SJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 10985b5faaf6SJeff Layton (unsigned long long)__entry->ino 10995b5faaf6SJeff Layton ) 11005b5faaf6SJeff Layton ); 11015b5faaf6SJeff Layton 1102fbc6f7c2STrond Myklebust TRACE_EVENT(nfs4_rename, 1103fbc6f7c2STrond Myklebust TP_PROTO( 1104fbc6f7c2STrond Myklebust const struct inode *olddir, 1105fbc6f7c2STrond Myklebust const struct qstr *oldname, 1106fbc6f7c2STrond Myklebust const struct inode *newdir, 1107fbc6f7c2STrond Myklebust const struct qstr *newname, 1108fbc6f7c2STrond Myklebust int error 1109fbc6f7c2STrond Myklebust ), 1110fbc6f7c2STrond Myklebust 1111fbc6f7c2STrond Myklebust TP_ARGS(olddir, oldname, newdir, newname, error), 1112fbc6f7c2STrond Myklebust 1113fbc6f7c2STrond Myklebust TP_STRUCT__entry( 1114fbc6f7c2STrond Myklebust __field(dev_t, dev) 111596650e2eSChuck Lever __field(unsigned long, error) 1116fbc6f7c2STrond Myklebust __field(u64, olddir) 1117fbc6f7c2STrond Myklebust __string(oldname, oldname->name) 1118fbc6f7c2STrond Myklebust __field(u64, newdir) 1119fbc6f7c2STrond Myklebust __string(newname, newname->name) 1120fbc6f7c2STrond Myklebust ), 1121fbc6f7c2STrond Myklebust 1122fbc6f7c2STrond Myklebust TP_fast_assign( 1123fbc6f7c2STrond Myklebust __entry->dev = olddir->i_sb->s_dev; 1124fbc6f7c2STrond Myklebust __entry->olddir = NFS_FILEID(olddir); 1125fbc6f7c2STrond Myklebust __entry->newdir = NFS_FILEID(newdir); 1126118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1127fbc6f7c2STrond Myklebust __assign_str(oldname, oldname->name); 1128fbc6f7c2STrond Myklebust __assign_str(newname, newname->name); 1129fbc6f7c2STrond Myklebust ), 1130fbc6f7c2STrond Myklebust 1131fbc6f7c2STrond Myklebust TP_printk( 113296650e2eSChuck Lever "error=%ld (%s) oldname=%02x:%02x:%llu/%s " 1133fbc6f7c2STrond Myklebust "newname=%02x:%02x:%llu/%s", 113496650e2eSChuck Lever -__entry->error, 11358791545eSChuck Lever show_nfs4_status(__entry->error), 1136fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1137fbc6f7c2STrond Myklebust (unsigned long long)__entry->olddir, 1138fbc6f7c2STrond Myklebust __get_str(oldname), 1139fbc6f7c2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1140fbc6f7c2STrond Myklebust (unsigned long long)__entry->newdir, 1141fbc6f7c2STrond Myklebust __get_str(newname) 1142fbc6f7c2STrond Myklebust ) 1143fbc6f7c2STrond Myklebust ); 1144fbc6f7c2STrond Myklebust 1145c1578b76STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_event, 1146c1578b76STrond Myklebust TP_PROTO( 1147c1578b76STrond Myklebust const struct inode *inode, 1148c1578b76STrond Myklebust int error 1149c1578b76STrond Myklebust ), 1150c1578b76STrond Myklebust 1151c1578b76STrond Myklebust TP_ARGS(inode, error), 1152c1578b76STrond Myklebust 1153c1578b76STrond Myklebust TP_STRUCT__entry( 1154c1578b76STrond Myklebust __field(dev_t, dev) 1155c1578b76STrond Myklebust __field(u32, fhandle) 1156c1578b76STrond Myklebust __field(u64, fileid) 115796650e2eSChuck Lever __field(unsigned long, error) 1158c1578b76STrond Myklebust ), 1159c1578b76STrond Myklebust 1160c1578b76STrond Myklebust TP_fast_assign( 1161c1578b76STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1162c1578b76STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1163c1578b76STrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 116496650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 1165c1578b76STrond Myklebust ), 1166c1578b76STrond Myklebust 1167c1578b76STrond Myklebust TP_printk( 116896650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x", 116996650e2eSChuck Lever -__entry->error, 11708791545eSChuck Lever show_nfs4_status(__entry->error), 1171c1578b76STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1172c1578b76STrond Myklebust (unsigned long long)__entry->fileid, 1173c1578b76STrond Myklebust __entry->fhandle 1174c1578b76STrond Myklebust ) 1175c1578b76STrond Myklebust ); 1176c1578b76STrond Myklebust 1177c1578b76STrond Myklebust #define DEFINE_NFS4_INODE_EVENT(name) \ 1178c1578b76STrond Myklebust DEFINE_EVENT(nfs4_inode_event, name, \ 1179c1578b76STrond Myklebust TP_PROTO( \ 1180c1578b76STrond Myklebust const struct inode *inode, \ 1181c1578b76STrond Myklebust int error \ 1182c1578b76STrond Myklebust ), \ 1183c1578b76STrond Myklebust TP_ARGS(inode, error)) 1184c1578b76STrond Myklebust 1185c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_access); 1186c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readlink); 1187c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readdir); 1188c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_acl); 1189c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_acl); 1190c1578b76STrond Myklebust #ifdef CONFIG_NFS_V4_SECURITY_LABEL 1191c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label); 1192c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label); 1193c1578b76STrond Myklebust #endif /* CONFIG_NFS_V4_SECURITY_LABEL */ 119448c9579aSOlga Kornievskaia 119548c9579aSOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_inode_stateid_event, 119648c9579aSOlga Kornievskaia TP_PROTO( 119748c9579aSOlga Kornievskaia const struct inode *inode, 119848c9579aSOlga Kornievskaia const nfs4_stateid *stateid, 119948c9579aSOlga Kornievskaia int error 120048c9579aSOlga Kornievskaia ), 120148c9579aSOlga Kornievskaia 120248c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error), 120348c9579aSOlga Kornievskaia 120448c9579aSOlga Kornievskaia TP_STRUCT__entry( 120548c9579aSOlga Kornievskaia __field(dev_t, dev) 120648c9579aSOlga Kornievskaia __field(u32, fhandle) 120748c9579aSOlga Kornievskaia __field(u64, fileid) 120896650e2eSChuck Lever __field(unsigned long, error) 120948c9579aSOlga Kornievskaia __field(int, stateid_seq) 121048c9579aSOlga Kornievskaia __field(u32, stateid_hash) 121148c9579aSOlga Kornievskaia ), 121248c9579aSOlga Kornievskaia 121348c9579aSOlga Kornievskaia TP_fast_assign( 121448c9579aSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 121548c9579aSOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 121648c9579aSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1217118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 121848c9579aSOlga Kornievskaia __entry->stateid_seq = 121948c9579aSOlga Kornievskaia be32_to_cpu(stateid->seqid); 122048c9579aSOlga Kornievskaia __entry->stateid_hash = 122148c9579aSOlga Kornievskaia nfs_stateid_hash(stateid); 122248c9579aSOlga Kornievskaia ), 122348c9579aSOlga Kornievskaia 122448c9579aSOlga Kornievskaia TP_printk( 122596650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 122648c9579aSOlga Kornievskaia "stateid=%d:0x%08x", 122796650e2eSChuck Lever -__entry->error, 12288791545eSChuck Lever show_nfs4_status(__entry->error), 122948c9579aSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 123048c9579aSOlga Kornievskaia (unsigned long long)__entry->fileid, 123148c9579aSOlga Kornievskaia __entry->fhandle, 123248c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 123348c9579aSOlga Kornievskaia ) 123448c9579aSOlga Kornievskaia ); 123548c9579aSOlga Kornievskaia 123648c9579aSOlga Kornievskaia #define DEFINE_NFS4_INODE_STATEID_EVENT(name) \ 123748c9579aSOlga Kornievskaia DEFINE_EVENT(nfs4_inode_stateid_event, name, \ 123848c9579aSOlga Kornievskaia TP_PROTO( \ 123948c9579aSOlga Kornievskaia const struct inode *inode, \ 124048c9579aSOlga Kornievskaia const nfs4_stateid *stateid, \ 124148c9579aSOlga Kornievskaia int error \ 124248c9579aSOlga Kornievskaia ), \ 124348c9579aSOlga Kornievskaia TP_ARGS(inode, stateid, error)) 124448c9579aSOlga Kornievskaia 124548c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr); 124648c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn); 1247ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update); 1248ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update_wait); 1249b4868b44SBenjamin Coddington DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_close_stateid_update_wait); 1250c1578b76STrond Myklebust 1251b5f875a9STrond Myklebust DECLARE_EVENT_CLASS(nfs4_getattr_event, 1252b5f875a9STrond Myklebust TP_PROTO( 1253b5f875a9STrond Myklebust const struct nfs_server *server, 1254b5f875a9STrond Myklebust const struct nfs_fh *fhandle, 1255b5f875a9STrond Myklebust const struct nfs_fattr *fattr, 1256b5f875a9STrond Myklebust int error 1257b5f875a9STrond Myklebust ), 1258b5f875a9STrond Myklebust 1259b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error), 1260b5f875a9STrond Myklebust 1261b5f875a9STrond Myklebust TP_STRUCT__entry( 1262b5f875a9STrond Myklebust __field(dev_t, dev) 1263b5f875a9STrond Myklebust __field(u32, fhandle) 1264b5f875a9STrond Myklebust __field(u64, fileid) 1265b5f875a9STrond Myklebust __field(unsigned int, valid) 126696650e2eSChuck Lever __field(unsigned long, error) 1267b5f875a9STrond Myklebust ), 1268b5f875a9STrond Myklebust 1269b5f875a9STrond Myklebust TP_fast_assign( 1270b5f875a9STrond Myklebust __entry->dev = server->s_dev; 1271b5f875a9STrond Myklebust __entry->valid = fattr->valid; 1272b5f875a9STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 1273b5f875a9STrond Myklebust __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0; 1274118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1275b5f875a9STrond Myklebust ), 1276b5f875a9STrond Myklebust 1277b5f875a9STrond Myklebust TP_printk( 127896650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1279b5f875a9STrond Myklebust "valid=%s", 128096650e2eSChuck Lever -__entry->error, 12818791545eSChuck Lever show_nfs4_status(__entry->error), 1282b5f875a9STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1283b5f875a9STrond Myklebust (unsigned long long)__entry->fileid, 1284b5f875a9STrond Myklebust __entry->fhandle, 1285b5f875a9STrond Myklebust show_nfs_fattr_flags(__entry->valid) 1286b5f875a9STrond Myklebust ) 1287b5f875a9STrond Myklebust ); 1288b5f875a9STrond Myklebust 1289b5f875a9STrond Myklebust #define DEFINE_NFS4_GETATTR_EVENT(name) \ 1290b5f875a9STrond Myklebust DEFINE_EVENT(nfs4_getattr_event, name, \ 1291b5f875a9STrond Myklebust TP_PROTO( \ 1292b5f875a9STrond Myklebust const struct nfs_server *server, \ 1293b5f875a9STrond Myklebust const struct nfs_fh *fhandle, \ 1294b5f875a9STrond Myklebust const struct nfs_fattr *fattr, \ 1295b5f875a9STrond Myklebust int error \ 1296b5f875a9STrond Myklebust ), \ 1297b5f875a9STrond Myklebust TP_ARGS(server, fhandle, fattr, error)) 1298b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr); 1299b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); 1300b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); 1301b5f875a9STrond Myklebust 13027cd14861STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_callback_event, 13037cd14861STrond Myklebust TP_PROTO( 13047cd14861STrond Myklebust const struct nfs_client *clp, 13057cd14861STrond Myklebust const struct nfs_fh *fhandle, 13067cd14861STrond Myklebust const struct inode *inode, 13077cd14861STrond Myklebust int error 13087cd14861STrond Myklebust ), 13097cd14861STrond Myklebust 13107cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error), 13117cd14861STrond Myklebust 13127cd14861STrond Myklebust TP_STRUCT__entry( 131396650e2eSChuck Lever __field(unsigned long, error) 13147cd14861STrond Myklebust __field(dev_t, dev) 13157cd14861STrond Myklebust __field(u32, fhandle) 13167cd14861STrond Myklebust __field(u64, fileid) 13173944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 13187cd14861STrond Myklebust ), 13197cd14861STrond Myklebust 13207cd14861STrond Myklebust TP_fast_assign( 1321118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 13227cd14861STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 13232edaead6STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 13247cd14861STrond Myklebust __entry->fileid = NFS_FILEID(inode); 13257cd14861STrond Myklebust __entry->dev = inode->i_sb->s_dev; 13267cd14861STrond Myklebust } else { 13277cd14861STrond Myklebust __entry->fileid = 0; 13287cd14861STrond Myklebust __entry->dev = 0; 13297cd14861STrond Myklebust } 133078c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 13317cd14861STrond Myklebust ), 13327cd14861STrond Myklebust 13337cd14861STrond Myklebust TP_printk( 133496650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 13357cd14861STrond Myklebust "dstaddr=%s", 133696650e2eSChuck Lever -__entry->error, 13378791545eSChuck Lever show_nfs4_status(__entry->error), 13387cd14861STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 13397cd14861STrond Myklebust (unsigned long long)__entry->fileid, 13407cd14861STrond Myklebust __entry->fhandle, 13417cd14861STrond Myklebust __get_str(dstaddr) 13427cd14861STrond Myklebust ) 13437cd14861STrond Myklebust ); 13447cd14861STrond Myklebust 13457cd14861STrond Myklebust #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \ 13467cd14861STrond Myklebust DEFINE_EVENT(nfs4_inode_callback_event, name, \ 13477cd14861STrond Myklebust TP_PROTO( \ 13487cd14861STrond Myklebust const struct nfs_client *clp, \ 13497cd14861STrond Myklebust const struct nfs_fh *fhandle, \ 13507cd14861STrond Myklebust const struct inode *inode, \ 13517cd14861STrond Myklebust int error \ 13527cd14861STrond Myklebust ), \ 13537cd14861STrond Myklebust TP_ARGS(clp, fhandle, inode, error)) 13547cd14861STrond Myklebust DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr); 13557cd14861STrond Myklebust 1356e07db907STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event, 1357e07db907STrond Myklebust TP_PROTO( 1358e07db907STrond Myklebust const struct nfs_client *clp, 1359e07db907STrond Myklebust const struct nfs_fh *fhandle, 1360e07db907STrond Myklebust const struct inode *inode, 1361e07db907STrond Myklebust const nfs4_stateid *stateid, 1362e07db907STrond Myklebust int error 1363e07db907STrond Myklebust ), 1364e07db907STrond Myklebust 1365e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error), 1366e07db907STrond Myklebust 1367e07db907STrond Myklebust TP_STRUCT__entry( 136896650e2eSChuck Lever __field(unsigned long, error) 1369e07db907STrond Myklebust __field(dev_t, dev) 1370e07db907STrond Myklebust __field(u32, fhandle) 1371e07db907STrond Myklebust __field(u64, fileid) 13723944369dSAnna Schumaker __string(dstaddr, clp ? clp->cl_hostname : "unknown") 1373e07db907STrond Myklebust __field(int, stateid_seq) 1374e07db907STrond Myklebust __field(u32, stateid_hash) 1375e07db907STrond Myklebust ), 1376e07db907STrond Myklebust 1377e07db907STrond Myklebust TP_fast_assign( 1378118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 1379e07db907STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fhandle); 13802a534a74STrond Myklebust if (!IS_ERR_OR_NULL(inode)) { 1381e07db907STrond Myklebust __entry->fileid = NFS_FILEID(inode); 1382e07db907STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1383e07db907STrond Myklebust } else { 1384e07db907STrond Myklebust __entry->fileid = 0; 1385e07db907STrond Myklebust __entry->dev = 0; 1386e07db907STrond Myklebust } 138778c14b38SJoe Perches __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown"); 1388e07db907STrond Myklebust __entry->stateid_seq = 1389e07db907STrond Myklebust be32_to_cpu(stateid->seqid); 1390e07db907STrond Myklebust __entry->stateid_hash = 1391e07db907STrond Myklebust nfs_stateid_hash(stateid); 1392e07db907STrond Myklebust ), 1393e07db907STrond Myklebust 1394e07db907STrond Myklebust TP_printk( 139596650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1396e07db907STrond Myklebust "stateid=%d:0x%08x dstaddr=%s", 139796650e2eSChuck Lever -__entry->error, 13988791545eSChuck Lever show_nfs4_status(__entry->error), 1399e07db907STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1400e07db907STrond Myklebust (unsigned long long)__entry->fileid, 1401e07db907STrond Myklebust __entry->fhandle, 1402e07db907STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 1403e07db907STrond Myklebust __get_str(dstaddr) 1404e07db907STrond Myklebust ) 1405e07db907STrond Myklebust ); 1406e07db907STrond Myklebust 1407e07db907STrond Myklebust #define DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(name) \ 1408e07db907STrond Myklebust DEFINE_EVENT(nfs4_inode_stateid_callback_event, name, \ 1409e07db907STrond Myklebust TP_PROTO( \ 1410e07db907STrond Myklebust const struct nfs_client *clp, \ 1411e07db907STrond Myklebust const struct nfs_fh *fhandle, \ 1412e07db907STrond Myklebust const struct inode *inode, \ 1413e07db907STrond Myklebust const nfs4_stateid *stateid, \ 1414e07db907STrond Myklebust int error \ 1415e07db907STrond Myklebust ), \ 1416e07db907STrond Myklebust TP_ARGS(clp, fhandle, inode, stateid, error)) 1417e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_recall); 1418e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_layoutrecall_file); 14197cd14861STrond Myklebust 14201f2d30b5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_idmap_event, 14211f2d30b5STrond Myklebust TP_PROTO( 14221f2d30b5STrond Myklebust const char *name, 14231f2d30b5STrond Myklebust int len, 14241f2d30b5STrond Myklebust u32 id, 14251f2d30b5STrond Myklebust int error 14261f2d30b5STrond Myklebust ), 14271f2d30b5STrond Myklebust 14281f2d30b5STrond Myklebust TP_ARGS(name, len, id, error), 14291f2d30b5STrond Myklebust 14301f2d30b5STrond Myklebust TP_STRUCT__entry( 143196650e2eSChuck Lever __field(unsigned long, error) 14321f2d30b5STrond Myklebust __field(u32, id) 14331f2d30b5STrond Myklebust __dynamic_array(char, name, len > 0 ? len + 1 : 1) 14341f2d30b5STrond Myklebust ), 14351f2d30b5STrond Myklebust 14361f2d30b5STrond Myklebust TP_fast_assign( 14371f2d30b5STrond Myklebust if (len < 0) 14381f2d30b5STrond Myklebust len = 0; 14391f2d30b5STrond Myklebust __entry->error = error < 0 ? error : 0; 14401f2d30b5STrond Myklebust __entry->id = id; 1441752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), name, len); 1442752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 14431f2d30b5STrond Myklebust ), 14441f2d30b5STrond Myklebust 14451f2d30b5STrond Myklebust TP_printk( 144696650e2eSChuck Lever "error=%ld (%s) id=%u name=%s", 14478791545eSChuck Lever -__entry->error, show_nfs4_status(__entry->error), 14481f2d30b5STrond Myklebust __entry->id, 14491f2d30b5STrond Myklebust __get_str(name) 14501f2d30b5STrond Myklebust ) 14511f2d30b5STrond Myklebust ); 14521f2d30b5STrond Myklebust #define DEFINE_NFS4_IDMAP_EVENT(name) \ 14531f2d30b5STrond Myklebust DEFINE_EVENT(nfs4_idmap_event, name, \ 14541f2d30b5STrond Myklebust TP_PROTO( \ 14551f2d30b5STrond Myklebust const char *name, \ 14561f2d30b5STrond Myklebust int len, \ 14571f2d30b5STrond Myklebust u32 id, \ 14581f2d30b5STrond Myklebust int error \ 14591f2d30b5STrond Myklebust ), \ 14601f2d30b5STrond Myklebust TP_ARGS(name, len, id, error)) 14611f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_name_to_uid); 14621f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid); 14631f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name); 14641f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); 14651f2d30b5STrond Myklebust 146654898f70STrond Myklebust #ifdef CONFIG_NFS_V4_1 146754898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) \ 146854898f70STrond Myklebust (lseg ? nfs_stateid_hash(&lseg->pls_layout->plh_stateid) : 0) 146954898f70STrond Myklebust #else 147054898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) (0) 147154898f70STrond Myklebust #endif 147254898f70STrond Myklebust 1473cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_read_event, 1474cc668ab3STrond Myklebust TP_PROTO( 1475d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1476cc668ab3STrond Myklebust int error 1477cc668ab3STrond Myklebust ), 1478cc668ab3STrond Myklebust 1479d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1480cc668ab3STrond Myklebust 1481cc668ab3STrond Myklebust TP_STRUCT__entry( 1482cc668ab3STrond Myklebust __field(dev_t, dev) 1483cc668ab3STrond Myklebust __field(u32, fhandle) 1484cc668ab3STrond Myklebust __field(u64, fileid) 1485cc668ab3STrond Myklebust __field(loff_t, offset) 148625925b00STrond Myklebust __field(u32, arg_count) 148725925b00STrond Myklebust __field(u32, res_count) 148896650e2eSChuck Lever __field(unsigned long, error) 148948c9579aSOlga Kornievskaia __field(int, stateid_seq) 149048c9579aSOlga Kornievskaia __field(u32, stateid_hash) 149154898f70STrond Myklebust __field(int, layoutstateid_seq) 149254898f70STrond Myklebust __field(u32, layoutstateid_hash) 1493cc668ab3STrond Myklebust ), 1494cc668ab3STrond Myklebust 1495cc668ab3STrond Myklebust TP_fast_assign( 1496d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 149725925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 149825925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 149925925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 150048c9579aSOlga Kornievskaia const struct nfs4_state *state = 150148c9579aSOlga Kornievskaia hdr->args.context->state; 150254898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 150325925b00STrond Myklebust 1504cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 150525925b00STrond Myklebust __entry->fileid = nfsi->fileid; 150625925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1507d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 150825925b00STrond Myklebust __entry->arg_count = hdr->args.count; 150925925b00STrond Myklebust __entry->res_count = hdr->res.count; 151096650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 151148c9579aSOlga Kornievskaia __entry->stateid_seq = 151248c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 151348c9579aSOlga Kornievskaia __entry->stateid_hash = 151448c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 151554898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 151654898f70STrond Myklebust __entry->layoutstateid_hash = 151754898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1518cc668ab3STrond Myklebust ), 1519cc668ab3STrond Myklebust 1520cc668ab3STrond Myklebust TP_printk( 152196650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 152254898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 152354898f70STrond Myklebust "layoutstateid=%d:0x%08x", 152496650e2eSChuck Lever -__entry->error, 15258791545eSChuck Lever show_nfs4_status(__entry->error), 1526cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1527cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1528cc668ab3STrond Myklebust __entry->fhandle, 1529cc668ab3STrond Myklebust (long long)__entry->offset, 153025925b00STrond Myklebust __entry->arg_count, __entry->res_count, 153154898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 153254898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1533cc668ab3STrond Myklebust ) 1534cc668ab3STrond Myklebust ); 1535cc668ab3STrond Myklebust #define DEFINE_NFS4_READ_EVENT(name) \ 1536cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_read_event, name, \ 1537cc668ab3STrond Myklebust TP_PROTO( \ 1538d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1539cc668ab3STrond Myklebust int error \ 1540cc668ab3STrond Myklebust ), \ 1541d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1542cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_read); 1543cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1544cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read); 1545cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1546cc668ab3STrond Myklebust 1547cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_write_event, 1548cc668ab3STrond Myklebust TP_PROTO( 1549d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, 1550cc668ab3STrond Myklebust int error 1551cc668ab3STrond Myklebust ), 1552cc668ab3STrond Myklebust 1553d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error), 1554cc668ab3STrond Myklebust 1555cc668ab3STrond Myklebust TP_STRUCT__entry( 1556cc668ab3STrond Myklebust __field(dev_t, dev) 1557cc668ab3STrond Myklebust __field(u32, fhandle) 1558cc668ab3STrond Myklebust __field(u64, fileid) 1559cc668ab3STrond Myklebust __field(loff_t, offset) 156025925b00STrond Myklebust __field(u32, arg_count) 156125925b00STrond Myklebust __field(u32, res_count) 156296650e2eSChuck Lever __field(unsigned long, error) 156348c9579aSOlga Kornievskaia __field(int, stateid_seq) 156448c9579aSOlga Kornievskaia __field(u32, stateid_hash) 156554898f70STrond Myklebust __field(int, layoutstateid_seq) 156654898f70STrond Myklebust __field(u32, layoutstateid_hash) 1567cc668ab3STrond Myklebust ), 1568cc668ab3STrond Myklebust 1569cc668ab3STrond Myklebust TP_fast_assign( 1570d45f60c6SWeston Andros Adamson const struct inode *inode = hdr->inode; 157125925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 157225925b00STrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 157325925b00STrond Myklebust hdr->args.fh : &nfsi->fh; 157448c9579aSOlga Kornievskaia const struct nfs4_state *state = 157548c9579aSOlga Kornievskaia hdr->args.context->state; 157654898f70STrond Myklebust const struct pnfs_layout_segment *lseg = hdr->lseg; 157725925b00STrond Myklebust 1578cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 157925925b00STrond Myklebust __entry->fileid = nfsi->fileid; 158025925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1581d45f60c6SWeston Andros Adamson __entry->offset = hdr->args.offset; 158225925b00STrond Myklebust __entry->arg_count = hdr->args.count; 158325925b00STrond Myklebust __entry->res_count = hdr->res.count; 158496650e2eSChuck Lever __entry->error = error < 0 ? -error : 0; 158548c9579aSOlga Kornievskaia __entry->stateid_seq = 158648c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 158748c9579aSOlga Kornievskaia __entry->stateid_hash = 158848c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 158954898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 159054898f70STrond Myklebust __entry->layoutstateid_hash = 159154898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1592cc668ab3STrond Myklebust ), 1593cc668ab3STrond Myklebust 1594cc668ab3STrond Myklebust TP_printk( 159596650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 159654898f70STrond Myklebust "offset=%lld count=%u res=%u stateid=%d:0x%08x " 159754898f70STrond Myklebust "layoutstateid=%d:0x%08x", 159896650e2eSChuck Lever -__entry->error, 15998791545eSChuck Lever show_nfs4_status(__entry->error), 1600cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1601cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1602cc668ab3STrond Myklebust __entry->fhandle, 1603cc668ab3STrond Myklebust (long long)__entry->offset, 160425925b00STrond Myklebust __entry->arg_count, __entry->res_count, 160554898f70STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 160654898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1607cc668ab3STrond Myklebust ) 1608cc668ab3STrond Myklebust ); 1609cc668ab3STrond Myklebust 1610cc668ab3STrond Myklebust #define DEFINE_NFS4_WRITE_EVENT(name) \ 1611cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_write_event, name, \ 1612cc668ab3STrond Myklebust TP_PROTO( \ 1613d45f60c6SWeston Andros Adamson const struct nfs_pgio_header *hdr, \ 1614cc668ab3STrond Myklebust int error \ 1615cc668ab3STrond Myklebust ), \ 1616d45f60c6SWeston Andros Adamson TP_ARGS(hdr, error)) 1617cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_write); 1618cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1619cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write); 1620cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 1621cc668ab3STrond Myklebust 1622cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_commit_event, 1623cc668ab3STrond Myklebust TP_PROTO( 1624cc668ab3STrond Myklebust const struct nfs_commit_data *data, 1625cc668ab3STrond Myklebust int error 1626cc668ab3STrond Myklebust ), 1627cc668ab3STrond Myklebust 1628cc668ab3STrond Myklebust TP_ARGS(data, error), 1629cc668ab3STrond Myklebust 1630cc668ab3STrond Myklebust TP_STRUCT__entry( 1631cc668ab3STrond Myklebust __field(dev_t, dev) 1632cc668ab3STrond Myklebust __field(u32, fhandle) 1633cc668ab3STrond Myklebust __field(u64, fileid) 163496650e2eSChuck Lever __field(unsigned long, error) 163525925b00STrond Myklebust __field(loff_t, offset) 163625925b00STrond Myklebust __field(u32, count) 163754898f70STrond Myklebust __field(int, layoutstateid_seq) 163854898f70STrond Myklebust __field(u32, layoutstateid_hash) 1639cc668ab3STrond Myklebust ), 1640cc668ab3STrond Myklebust 1641cc668ab3STrond Myklebust TP_fast_assign( 1642cc668ab3STrond Myklebust const struct inode *inode = data->inode; 164325925b00STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 164425925b00STrond Myklebust const struct nfs_fh *fh = data->args.fh ? 164525925b00STrond Myklebust data->args.fh : &nfsi->fh; 164654898f70STrond Myklebust const struct pnfs_layout_segment *lseg = data->lseg; 164725925b00STrond Myklebust 1648cc668ab3STrond Myklebust __entry->dev = inode->i_sb->s_dev; 164925925b00STrond Myklebust __entry->fileid = nfsi->fileid; 165025925b00STrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 1651cc668ab3STrond Myklebust __entry->offset = data->args.offset; 1652cc668ab3STrond Myklebust __entry->count = data->args.count; 165325925b00STrond Myklebust __entry->error = error < 0 ? -error : 0; 165454898f70STrond Myklebust __entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0; 165554898f70STrond Myklebust __entry->layoutstateid_hash = 165654898f70STrond Myklebust NFS4_LSEG_LAYOUT_STATEID_HASH(lseg); 1657cc668ab3STrond Myklebust ), 1658cc668ab3STrond Myklebust 1659cc668ab3STrond Myklebust TP_printk( 166096650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 166154898f70STrond Myklebust "offset=%lld count=%u layoutstateid=%d:0x%08x", 166296650e2eSChuck Lever -__entry->error, 16638791545eSChuck Lever show_nfs4_status(__entry->error), 1664cc668ab3STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1665cc668ab3STrond Myklebust (unsigned long long)__entry->fileid, 1666cc668ab3STrond Myklebust __entry->fhandle, 1667cc668ab3STrond Myklebust (long long)__entry->offset, 166854898f70STrond Myklebust __entry->count, 166954898f70STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash 1670cc668ab3STrond Myklebust ) 1671cc668ab3STrond Myklebust ); 1672cc668ab3STrond Myklebust #define DEFINE_NFS4_COMMIT_EVENT(name) \ 1673cc668ab3STrond Myklebust DEFINE_EVENT(nfs4_commit_event, name, \ 1674cc668ab3STrond Myklebust TP_PROTO( \ 1675cc668ab3STrond Myklebust const struct nfs_commit_data *data, \ 1676cc668ab3STrond Myklebust int error \ 1677cc668ab3STrond Myklebust ), \ 1678cc668ab3STrond Myklebust TP_ARGS(data, error)) 1679cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_commit); 1680cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1 1681cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds); 16821037e6eaSTrond Myklebust 16831037e6eaSTrond Myklebust TRACE_EVENT(nfs4_layoutget, 16841037e6eaSTrond Myklebust TP_PROTO( 16851037e6eaSTrond Myklebust const struct nfs_open_context *ctx, 16861037e6eaSTrond Myklebust const struct pnfs_layout_range *args, 16871037e6eaSTrond Myklebust const struct pnfs_layout_range *res, 168848c9579aSOlga Kornievskaia const nfs4_stateid *layout_stateid, 16891037e6eaSTrond Myklebust int error 16901037e6eaSTrond Myklebust ), 16911037e6eaSTrond Myklebust 169248c9579aSOlga Kornievskaia TP_ARGS(ctx, args, res, layout_stateid, error), 16931037e6eaSTrond Myklebust 16941037e6eaSTrond Myklebust TP_STRUCT__entry( 16951037e6eaSTrond Myklebust __field(dev_t, dev) 16961037e6eaSTrond Myklebust __field(u32, fhandle) 16971037e6eaSTrond Myklebust __field(u64, fileid) 16981037e6eaSTrond Myklebust __field(u32, iomode) 16991037e6eaSTrond Myklebust __field(u64, offset) 17001037e6eaSTrond Myklebust __field(u64, count) 170196650e2eSChuck Lever __field(unsigned long, error) 170248c9579aSOlga Kornievskaia __field(int, stateid_seq) 170348c9579aSOlga Kornievskaia __field(u32, stateid_hash) 170448c9579aSOlga Kornievskaia __field(int, layoutstateid_seq) 170548c9579aSOlga Kornievskaia __field(u32, layoutstateid_hash) 17061037e6eaSTrond Myklebust ), 17071037e6eaSTrond Myklebust 17081037e6eaSTrond Myklebust TP_fast_assign( 17092b0143b5SDavid Howells const struct inode *inode = d_inode(ctx->dentry); 171048c9579aSOlga Kornievskaia const struct nfs4_state *state = ctx->state; 17111037e6eaSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 17121037e6eaSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 17131037e6eaSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 17141037e6eaSTrond Myklebust __entry->iomode = args->iomode; 17151037e6eaSTrond Myklebust __entry->offset = args->offset; 17161037e6eaSTrond Myklebust __entry->count = args->length; 1717118b6292STrond Myklebust __entry->error = error < 0 ? -error : 0; 171848c9579aSOlga Kornievskaia __entry->stateid_seq = 171948c9579aSOlga Kornievskaia be32_to_cpu(state->stateid.seqid); 172048c9579aSOlga Kornievskaia __entry->stateid_hash = 172148c9579aSOlga Kornievskaia nfs_stateid_hash(&state->stateid); 172248c9579aSOlga Kornievskaia if (!error) { 172348c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 172448c9579aSOlga Kornievskaia be32_to_cpu(layout_stateid->seqid); 172548c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 172648c9579aSOlga Kornievskaia nfs_stateid_hash(layout_stateid); 172748c9579aSOlga Kornievskaia } else { 172848c9579aSOlga Kornievskaia __entry->layoutstateid_seq = 0; 172948c9579aSOlga Kornievskaia __entry->layoutstateid_hash = 0; 173048c9579aSOlga Kornievskaia } 17311037e6eaSTrond Myklebust ), 17321037e6eaSTrond Myklebust 17331037e6eaSTrond Myklebust TP_printk( 173496650e2eSChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 173548c9579aSOlga Kornievskaia "iomode=%s offset=%llu count=%llu stateid=%d:0x%08x " 173648c9579aSOlga Kornievskaia "layoutstateid=%d:0x%08x", 173796650e2eSChuck Lever -__entry->error, 17388791545eSChuck Lever show_nfs4_status(__entry->error), 17391037e6eaSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 17401037e6eaSTrond Myklebust (unsigned long long)__entry->fileid, 17411037e6eaSTrond Myklebust __entry->fhandle, 17428791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 17431037e6eaSTrond Myklebust (unsigned long long)__entry->offset, 174448c9579aSOlga Kornievskaia (unsigned long long)__entry->count, 174548c9579aSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 174648c9579aSOlga Kornievskaia __entry->layoutstateid_seq, __entry->layoutstateid_hash 17471037e6eaSTrond Myklebust ) 17481037e6eaSTrond Myklebust ); 17491037e6eaSTrond Myklebust 175048c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit); 175148c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn); 1752a19b4785STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn_on_close); 1753638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layouterror); 1754638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutstats); 17551037e6eaSTrond Myklebust 17565b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_UNKNOWN); 17575b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NO_PNFS); 17585b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RD_ZEROLEN); 17595b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_MDSTHRESH); 17605b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NOMEM); 17615b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BULK_RECALL); 17625b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_IO_TEST_FAIL); 17635b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_FOUND_CACHED); 17645b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETURN); 17655b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BLOCKED); 17665b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_INVALID_OPEN); 17675b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETRY); 17685b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET); 1769d5b9216fSTrond Myklebust TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_EXIT); 17705b2095d0SChuck Lever 17719a4bf31dSJeff Layton #define show_pnfs_update_layout_reason(reason) \ 17729a4bf31dSJeff Layton __print_symbolic(reason, \ 17739a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_UNKNOWN, "unknown" }, \ 17749a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NO_PNFS, "no pnfs" }, \ 17759a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RD_ZEROLEN, "read+zerolen" }, \ 17769a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_MDSTHRESH, "mdsthresh" }, \ 17779a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_NOMEM, "nomem" }, \ 17789a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BULK_RECALL, "bulk recall" }, \ 17799a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_IO_TEST_FAIL, "io test fail" }, \ 17809a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_FOUND_CACHED, "found cached" }, \ 17819a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_RETURN, "layoutreturn" }, \ 17829a4bf31dSJeff Layton { PNFS_UPDATE_LAYOUT_BLOCKED, "layouts blocked" }, \ 1783183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_INVALID_OPEN, "invalid open" }, \ 1784183d9e7bSJeff Layton { PNFS_UPDATE_LAYOUT_RETRY, "retrying" }, \ 1785d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET, "sent layoutget" }, \ 1786d5b9216fSTrond Myklebust { PNFS_UPDATE_LAYOUT_EXIT, "exit" }) 17879a4bf31dSJeff Layton 17889a4bf31dSJeff Layton TRACE_EVENT(pnfs_update_layout, 17899a4bf31dSJeff Layton TP_PROTO(struct inode *inode, 17909a4bf31dSJeff Layton loff_t pos, 17919a4bf31dSJeff Layton u64 count, 17929a4bf31dSJeff Layton enum pnfs_iomode iomode, 1793f4848303STrond Myklebust struct pnfs_layout_hdr *lo, 1794183d9e7bSJeff Layton struct pnfs_layout_segment *lseg, 17959a4bf31dSJeff Layton enum pnfs_update_layout_reason reason 17969a4bf31dSJeff Layton ), 1797183d9e7bSJeff Layton TP_ARGS(inode, pos, count, iomode, lo, lseg, reason), 17989a4bf31dSJeff Layton TP_STRUCT__entry( 17999a4bf31dSJeff Layton __field(dev_t, dev) 18009a4bf31dSJeff Layton __field(u64, fileid) 18019a4bf31dSJeff Layton __field(u32, fhandle) 18029a4bf31dSJeff Layton __field(loff_t, pos) 18039a4bf31dSJeff Layton __field(u64, count) 18049a4bf31dSJeff Layton __field(enum pnfs_iomode, iomode) 1805f4848303STrond Myklebust __field(int, layoutstateid_seq) 1806f4848303STrond Myklebust __field(u32, layoutstateid_hash) 1807183d9e7bSJeff Layton __field(long, lseg) 18089a4bf31dSJeff Layton __field(enum pnfs_update_layout_reason, reason) 18099a4bf31dSJeff Layton ), 18109a4bf31dSJeff Layton TP_fast_assign( 18119a4bf31dSJeff Layton __entry->dev = inode->i_sb->s_dev; 18129a4bf31dSJeff Layton __entry->fileid = NFS_FILEID(inode); 18139a4bf31dSJeff Layton __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 18149a4bf31dSJeff Layton __entry->pos = pos; 18159a4bf31dSJeff Layton __entry->count = count; 18169a4bf31dSJeff Layton __entry->iomode = iomode; 18179a4bf31dSJeff Layton __entry->reason = reason; 1818f4848303STrond Myklebust if (lo != NULL) { 1819f4848303STrond Myklebust __entry->layoutstateid_seq = 1820f4848303STrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1821f4848303STrond Myklebust __entry->layoutstateid_hash = 1822f4848303STrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1823f4848303STrond Myklebust } else { 1824f4848303STrond Myklebust __entry->layoutstateid_seq = 0; 1825f4848303STrond Myklebust __entry->layoutstateid_hash = 0; 1826f4848303STrond Myklebust } 1827183d9e7bSJeff Layton __entry->lseg = (long)lseg; 18289a4bf31dSJeff Layton ), 18299a4bf31dSJeff Layton TP_printk( 18309a4bf31dSJeff Layton "fileid=%02x:%02x:%llu fhandle=0x%08x " 1831f4848303STrond Myklebust "iomode=%s pos=%llu count=%llu " 1832183d9e7bSJeff Layton "layoutstateid=%d:0x%08x lseg=0x%lx (%s)", 18339a4bf31dSJeff Layton MAJOR(__entry->dev), MINOR(__entry->dev), 18349a4bf31dSJeff Layton (unsigned long long)__entry->fileid, 18359a4bf31dSJeff Layton __entry->fhandle, 18368791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 18379a4bf31dSJeff Layton (unsigned long long)__entry->pos, 1838f4848303STrond Myklebust (unsigned long long)__entry->count, 1839f4848303STrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1840183d9e7bSJeff Layton __entry->lseg, 18419a4bf31dSJeff Layton show_pnfs_update_layout_reason(__entry->reason) 18429a4bf31dSJeff Layton ) 18439a4bf31dSJeff Layton ); 18449a4bf31dSJeff Layton 1845d5b9216fSTrond Myklebust DECLARE_EVENT_CLASS(pnfs_layout_event, 1846d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, 1847d5b9216fSTrond Myklebust loff_t pos, 1848d5b9216fSTrond Myklebust u64 count, 1849d5b9216fSTrond Myklebust enum pnfs_iomode iomode, 1850d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, 1851d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg 1852d5b9216fSTrond Myklebust ), 1853d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg), 1854d5b9216fSTrond Myklebust TP_STRUCT__entry( 1855d5b9216fSTrond Myklebust __field(dev_t, dev) 1856d5b9216fSTrond Myklebust __field(u64, fileid) 1857d5b9216fSTrond Myklebust __field(u32, fhandle) 1858d5b9216fSTrond Myklebust __field(loff_t, pos) 1859d5b9216fSTrond Myklebust __field(u64, count) 1860d5b9216fSTrond Myklebust __field(enum pnfs_iomode, iomode) 1861d5b9216fSTrond Myklebust __field(int, layoutstateid_seq) 1862d5b9216fSTrond Myklebust __field(u32, layoutstateid_hash) 1863d5b9216fSTrond Myklebust __field(long, lseg) 1864d5b9216fSTrond Myklebust ), 1865d5b9216fSTrond Myklebust TP_fast_assign( 1866d5b9216fSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 1867d5b9216fSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 1868d5b9216fSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1869d5b9216fSTrond Myklebust __entry->pos = pos; 1870d5b9216fSTrond Myklebust __entry->count = count; 1871d5b9216fSTrond Myklebust __entry->iomode = iomode; 1872d5b9216fSTrond Myklebust if (lo != NULL) { 1873d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 1874d5b9216fSTrond Myklebust be32_to_cpu(lo->plh_stateid.seqid); 1875d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 1876d5b9216fSTrond Myklebust nfs_stateid_hash(&lo->plh_stateid); 1877d5b9216fSTrond Myklebust } else { 1878d5b9216fSTrond Myklebust __entry->layoutstateid_seq = 0; 1879d5b9216fSTrond Myklebust __entry->layoutstateid_hash = 0; 1880d5b9216fSTrond Myklebust } 1881d5b9216fSTrond Myklebust __entry->lseg = (long)lseg; 1882d5b9216fSTrond Myklebust ), 1883d5b9216fSTrond Myklebust TP_printk( 1884d5b9216fSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x " 1885d5b9216fSTrond Myklebust "iomode=%s pos=%llu count=%llu " 1886d5b9216fSTrond Myklebust "layoutstateid=%d:0x%08x lseg=0x%lx", 1887d5b9216fSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1888d5b9216fSTrond Myklebust (unsigned long long)__entry->fileid, 1889d5b9216fSTrond Myklebust __entry->fhandle, 18908791545eSChuck Lever show_pnfs_layout_iomode(__entry->iomode), 1891d5b9216fSTrond Myklebust (unsigned long long)__entry->pos, 1892d5b9216fSTrond Myklebust (unsigned long long)__entry->count, 1893d5b9216fSTrond Myklebust __entry->layoutstateid_seq, __entry->layoutstateid_hash, 1894d5b9216fSTrond Myklebust __entry->lseg 1895d5b9216fSTrond Myklebust ) 1896d5b9216fSTrond Myklebust ); 1897d5b9216fSTrond Myklebust 1898d5b9216fSTrond Myklebust #define DEFINE_PNFS_LAYOUT_EVENT(name) \ 1899d5b9216fSTrond Myklebust DEFINE_EVENT(pnfs_layout_event, name, \ 1900d5b9216fSTrond Myklebust TP_PROTO(struct inode *inode, \ 1901d5b9216fSTrond Myklebust loff_t pos, \ 1902d5b9216fSTrond Myklebust u64 count, \ 1903d5b9216fSTrond Myklebust enum pnfs_iomode iomode, \ 1904d5b9216fSTrond Myklebust struct pnfs_layout_hdr *lo, \ 1905d5b9216fSTrond Myklebust struct pnfs_layout_segment *lseg \ 1906d5b9216fSTrond Myklebust ), \ 1907d5b9216fSTrond Myklebust TP_ARGS(inode, pos, count, iomode, lo, lseg)) 1908d5b9216fSTrond Myklebust 1909d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_read); 1910d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_write); 1911d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_get_mirror_count); 1912d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_done); 1913d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_done); 1914d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_pagelist); 1915d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_pagelist); 1916d5b9216fSTrond Myklebust 1917cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_event, 1918cac1d3a2STrond Myklebust TP_PROTO( 1919cac1d3a2STrond Myklebust const struct nfs_client *clp, 1920cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid 1921cac1d3a2STrond Myklebust ), 1922cac1d3a2STrond Myklebust 1923cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid), 1924cac1d3a2STrond Myklebust 1925cac1d3a2STrond Myklebust TP_STRUCT__entry( 1926cac1d3a2STrond Myklebust __string(dstaddr, clp->cl_hostname) 1927cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1928cac1d3a2STrond Myklebust ), 1929cac1d3a2STrond Myklebust 1930cac1d3a2STrond Myklebust TP_fast_assign( 1931cac1d3a2STrond Myklebust __assign_str(dstaddr, clp->cl_hostname); 1932cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1933cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1934cac1d3a2STrond Myklebust ), 1935cac1d3a2STrond Myklebust 1936cac1d3a2STrond Myklebust TP_printk( 1937cac1d3a2STrond Myklebust "deviceid=%s, dstaddr=%s", 1938cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1939cac1d3a2STrond Myklebust __get_str(dstaddr) 1940cac1d3a2STrond Myklebust ) 1941cac1d3a2STrond Myklebust ); 1942cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_EVENT(name) \ 1943cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_event, name, \ 1944cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_client *clp, \ 1945cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid \ 1946cac1d3a2STrond Myklebust ), \ 1947cac1d3a2STrond Myklebust TP_ARGS(clp, deviceid)) 1948cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_EVENT(nfs4_deviceid_free); 1949cac1d3a2STrond Myklebust 1950cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_status, 1951cac1d3a2STrond Myklebust TP_PROTO( 1952cac1d3a2STrond Myklebust const struct nfs_server *server, 1953cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, 1954cac1d3a2STrond Myklebust int status 1955cac1d3a2STrond Myklebust ), 1956cac1d3a2STrond Myklebust 1957cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status), 1958cac1d3a2STrond Myklebust 1959cac1d3a2STrond Myklebust TP_STRUCT__entry( 1960cac1d3a2STrond Myklebust __field(dev_t, dev) 1961cac1d3a2STrond Myklebust __field(int, status) 1962cac1d3a2STrond Myklebust __string(dstaddr, server->nfs_client->cl_hostname) 1963cac1d3a2STrond Myklebust __array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE) 1964cac1d3a2STrond Myklebust ), 1965cac1d3a2STrond Myklebust 1966cac1d3a2STrond Myklebust TP_fast_assign( 1967cac1d3a2STrond Myklebust __entry->dev = server->s_dev; 1968cac1d3a2STrond Myklebust __entry->status = status; 1969cac1d3a2STrond Myklebust __assign_str(dstaddr, server->nfs_client->cl_hostname); 1970cac1d3a2STrond Myklebust memcpy(__entry->deviceid, deviceid->data, 1971cac1d3a2STrond Myklebust NFS4_DEVICEID4_SIZE); 1972cac1d3a2STrond Myklebust ), 1973cac1d3a2STrond Myklebust 1974cac1d3a2STrond Myklebust TP_printk( 1975cac1d3a2STrond Myklebust "dev=%02x:%02x: deviceid=%s, dstaddr=%s, status=%d", 1976cac1d3a2STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1977cac1d3a2STrond Myklebust __print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE), 1978cac1d3a2STrond Myklebust __get_str(dstaddr), 1979cac1d3a2STrond Myklebust __entry->status 1980cac1d3a2STrond Myklebust ) 1981cac1d3a2STrond Myklebust ); 1982cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_STATUS(name) \ 1983cac1d3a2STrond Myklebust DEFINE_EVENT(nfs4_deviceid_status, name, \ 1984cac1d3a2STrond Myklebust TP_PROTO(const struct nfs_server *server, \ 1985cac1d3a2STrond Myklebust const struct nfs4_deviceid *deviceid, \ 1986cac1d3a2STrond Myklebust int status \ 1987cac1d3a2STrond Myklebust ), \ 1988cac1d3a2STrond Myklebust TP_ARGS(server, deviceid, status)) 1989cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_getdeviceinfo); 1990cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_find_deviceid); 1991cac1d3a2STrond Myklebust 1992088f3e68STrond Myklebust DECLARE_EVENT_CLASS(nfs4_flexfiles_io_event, 1993088f3e68STrond Myklebust TP_PROTO( 1994088f3e68STrond Myklebust const struct nfs_pgio_header *hdr 1995088f3e68STrond Myklebust ), 1996088f3e68STrond Myklebust 1997088f3e68STrond Myklebust TP_ARGS(hdr), 1998088f3e68STrond Myklebust 1999088f3e68STrond Myklebust TP_STRUCT__entry( 2000088f3e68STrond Myklebust __field(unsigned long, error) 2001088f3e68STrond Myklebust __field(dev_t, dev) 2002088f3e68STrond Myklebust __field(u32, fhandle) 2003088f3e68STrond Myklebust __field(u64, fileid) 2004088f3e68STrond Myklebust __field(loff_t, offset) 2005088f3e68STrond Myklebust __field(u32, count) 2006088f3e68STrond Myklebust __field(int, stateid_seq) 2007088f3e68STrond Myklebust __field(u32, stateid_hash) 2008088f3e68STrond Myklebust __string(dstaddr, hdr->ds_clp ? 2009088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 2010088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 2011088f3e68STrond Myklebust ), 2012088f3e68STrond Myklebust 2013088f3e68STrond Myklebust TP_fast_assign( 2014088f3e68STrond Myklebust const struct inode *inode = hdr->inode; 2015088f3e68STrond Myklebust 2016088f3e68STrond Myklebust __entry->error = hdr->res.op_status; 2017088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(hdr->args.fh); 2018088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 2019088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 2020088f3e68STrond Myklebust __entry->offset = hdr->args.offset; 2021088f3e68STrond Myklebust __entry->count = hdr->args.count; 2022088f3e68STrond Myklebust __entry->stateid_seq = 2023088f3e68STrond Myklebust be32_to_cpu(hdr->args.stateid.seqid); 2024088f3e68STrond Myklebust __entry->stateid_hash = 2025088f3e68STrond Myklebust nfs_stateid_hash(&hdr->args.stateid); 2026088f3e68STrond Myklebust __assign_str(dstaddr, hdr->ds_clp ? 2027088f3e68STrond Myklebust rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient, 2028088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 2029088f3e68STrond Myklebust ), 2030088f3e68STrond Myklebust 2031088f3e68STrond Myklebust TP_printk( 2032088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2033088f3e68STrond Myklebust "offset=%llu count=%u stateid=%d:0x%08x dstaddr=%s", 2034088f3e68STrond Myklebust -__entry->error, 20358791545eSChuck Lever show_nfs4_status(__entry->error), 2036088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 2037088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 2038088f3e68STrond Myklebust __entry->fhandle, 2039088f3e68STrond Myklebust __entry->offset, __entry->count, 2040088f3e68STrond Myklebust __entry->stateid_seq, __entry->stateid_hash, 2041088f3e68STrond Myklebust __get_str(dstaddr) 2042088f3e68STrond Myklebust ) 2043088f3e68STrond Myklebust ); 2044088f3e68STrond Myklebust 2045088f3e68STrond Myklebust #define DEFINE_NFS4_FLEXFILES_IO_EVENT(name) \ 2046088f3e68STrond Myklebust DEFINE_EVENT(nfs4_flexfiles_io_event, name, \ 2047088f3e68STrond Myklebust TP_PROTO( \ 2048088f3e68STrond Myklebust const struct nfs_pgio_header *hdr \ 2049088f3e68STrond Myklebust ), \ 2050088f3e68STrond Myklebust TP_ARGS(hdr)) 2051088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_read_error); 2052088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_write_error); 2053088f3e68STrond Myklebust 2054088f3e68STrond Myklebust TRACE_EVENT(ff_layout_commit_error, 2055088f3e68STrond Myklebust TP_PROTO( 2056088f3e68STrond Myklebust const struct nfs_commit_data *data 2057088f3e68STrond Myklebust ), 2058088f3e68STrond Myklebust 2059088f3e68STrond Myklebust TP_ARGS(data), 2060088f3e68STrond Myklebust 2061088f3e68STrond Myklebust TP_STRUCT__entry( 2062088f3e68STrond Myklebust __field(unsigned long, error) 2063088f3e68STrond Myklebust __field(dev_t, dev) 2064088f3e68STrond Myklebust __field(u32, fhandle) 2065088f3e68STrond Myklebust __field(u64, fileid) 2066088f3e68STrond Myklebust __field(loff_t, offset) 2067088f3e68STrond Myklebust __field(u32, count) 2068088f3e68STrond Myklebust __string(dstaddr, data->ds_clp ? 2069088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2070088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown") 2071088f3e68STrond Myklebust ), 2072088f3e68STrond Myklebust 2073088f3e68STrond Myklebust TP_fast_assign( 2074088f3e68STrond Myklebust const struct inode *inode = data->inode; 2075088f3e68STrond Myklebust 2076088f3e68STrond Myklebust __entry->error = data->res.op_status; 2077088f3e68STrond Myklebust __entry->fhandle = nfs_fhandle_hash(data->args.fh); 2078088f3e68STrond Myklebust __entry->fileid = NFS_FILEID(inode); 2079088f3e68STrond Myklebust __entry->dev = inode->i_sb->s_dev; 2080088f3e68STrond Myklebust __entry->offset = data->args.offset; 2081088f3e68STrond Myklebust __entry->count = data->args.count; 2082088f3e68STrond Myklebust __assign_str(dstaddr, data->ds_clp ? 2083088f3e68STrond Myklebust rpc_peeraddr2str(data->ds_clp->cl_rpcclient, 2084088f3e68STrond Myklebust RPC_DISPLAY_ADDR) : "unknown"); 2085088f3e68STrond Myklebust ), 2086088f3e68STrond Myklebust 2087088f3e68STrond Myklebust TP_printk( 2088088f3e68STrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2089088f3e68STrond Myklebust "offset=%llu count=%u dstaddr=%s", 2090088f3e68STrond Myklebust -__entry->error, 20918791545eSChuck Lever show_nfs4_status(__entry->error), 2092088f3e68STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 2093088f3e68STrond Myklebust (unsigned long long)__entry->fileid, 2094088f3e68STrond Myklebust __entry->fhandle, 2095088f3e68STrond Myklebust __entry->offset, __entry->count, 2096088f3e68STrond Myklebust __get_str(dstaddr) 2097088f3e68STrond Myklebust ) 2098088f3e68STrond Myklebust ); 2099088f3e68STrond Myklebust 21003a100e4dSAnna Schumaker #ifdef CONFIG_NFS_V4_2 2101f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_DATA); 2102f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_HOLE); 2103f628d462SOlga Kornievskaia 2104f628d462SOlga Kornievskaia #define show_llseek_mode(what) \ 2105f628d462SOlga Kornievskaia __print_symbolic(what, \ 2106f628d462SOlga Kornievskaia { NFS4_CONTENT_DATA, "DATA" }, \ 2107f628d462SOlga Kornievskaia { NFS4_CONTENT_HOLE, "HOLE" }) 2108f628d462SOlga Kornievskaia 2109f628d462SOlga Kornievskaia TRACE_EVENT(nfs4_llseek, 2110f628d462SOlga Kornievskaia TP_PROTO( 2111f628d462SOlga Kornievskaia const struct inode *inode, 2112f628d462SOlga Kornievskaia const struct nfs42_seek_args *args, 2113f628d462SOlga Kornievskaia const struct nfs42_seek_res *res, 2114f628d462SOlga Kornievskaia int error 2115f628d462SOlga Kornievskaia ), 2116f628d462SOlga Kornievskaia 2117f628d462SOlga Kornievskaia TP_ARGS(inode, args, res, error), 2118f628d462SOlga Kornievskaia 2119f628d462SOlga Kornievskaia TP_STRUCT__entry( 2120f628d462SOlga Kornievskaia __field(unsigned long, error) 2121f628d462SOlga Kornievskaia __field(u32, fhandle) 2122f628d462SOlga Kornievskaia __field(u32, fileid) 2123f628d462SOlga Kornievskaia __field(dev_t, dev) 2124f628d462SOlga Kornievskaia __field(int, stateid_seq) 2125f628d462SOlga Kornievskaia __field(u32, stateid_hash) 2126f628d462SOlga Kornievskaia __field(loff_t, offset_s) 2127f628d462SOlga Kornievskaia __field(u32, what) 2128f628d462SOlga Kornievskaia __field(loff_t, offset_r) 2129f628d462SOlga Kornievskaia __field(u32, eof) 2130f628d462SOlga Kornievskaia ), 2131f628d462SOlga Kornievskaia 2132f628d462SOlga Kornievskaia TP_fast_assign( 2133f628d462SOlga Kornievskaia const struct nfs_inode *nfsi = NFS_I(inode); 2134f628d462SOlga Kornievskaia const struct nfs_fh *fh = args->sa_fh; 2135f628d462SOlga Kornievskaia 2136f628d462SOlga Kornievskaia __entry->fileid = nfsi->fileid; 2137f628d462SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 2138f628d462SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(fh); 2139f628d462SOlga Kornievskaia __entry->offset_s = args->sa_offset; 2140f628d462SOlga Kornievskaia __entry->stateid_seq = 2141f628d462SOlga Kornievskaia be32_to_cpu(args->sa_stateid.seqid); 2142f628d462SOlga Kornievskaia __entry->stateid_hash = 2143f628d462SOlga Kornievskaia nfs_stateid_hash(&args->sa_stateid); 2144f628d462SOlga Kornievskaia __entry->what = args->sa_what; 2145f628d462SOlga Kornievskaia if (error) { 2146f628d462SOlga Kornievskaia __entry->error = -error; 2147f628d462SOlga Kornievskaia __entry->offset_r = 0; 2148f628d462SOlga Kornievskaia __entry->eof = 0; 2149f628d462SOlga Kornievskaia } else { 2150f628d462SOlga Kornievskaia __entry->error = 0; 2151f628d462SOlga Kornievskaia __entry->offset_r = res->sr_offset; 2152f628d462SOlga Kornievskaia __entry->eof = res->sr_eof; 2153f628d462SOlga Kornievskaia } 2154f628d462SOlga Kornievskaia ), 2155f628d462SOlga Kornievskaia 2156f628d462SOlga Kornievskaia TP_printk( 2157f628d462SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2158f628d462SOlga Kornievskaia "stateid=%d:0x%08x offset_s=%llu what=%s " 2159f628d462SOlga Kornievskaia "offset_r=%llu eof=%u", 2160f628d462SOlga Kornievskaia -__entry->error, 2161f628d462SOlga Kornievskaia show_nfs4_status(__entry->error), 2162f628d462SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 2163f628d462SOlga Kornievskaia (unsigned long long)__entry->fileid, 2164f628d462SOlga Kornievskaia __entry->fhandle, 2165f628d462SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 2166f628d462SOlga Kornievskaia __entry->offset_s, 2167f628d462SOlga Kornievskaia show_llseek_mode(__entry->what), 2168f628d462SOlga Kornievskaia __entry->offset_r, 2169f628d462SOlga Kornievskaia __entry->eof 2170f628d462SOlga Kornievskaia ) 2171f628d462SOlga Kornievskaia ); 2172f628d462SOlga Kornievskaia 217340a82417SOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_sparse_event, 217440a82417SOlga Kornievskaia TP_PROTO( 217540a82417SOlga Kornievskaia const struct inode *inode, 217640a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, 217740a82417SOlga Kornievskaia int error 217840a82417SOlga Kornievskaia ), 217940a82417SOlga Kornievskaia 218040a82417SOlga Kornievskaia TP_ARGS(inode, args, error), 218140a82417SOlga Kornievskaia 218240a82417SOlga Kornievskaia TP_STRUCT__entry( 218340a82417SOlga Kornievskaia __field(unsigned long, error) 218440a82417SOlga Kornievskaia __field(loff_t, offset) 218540a82417SOlga Kornievskaia __field(loff_t, len) 218640a82417SOlga Kornievskaia __field(dev_t, dev) 218740a82417SOlga Kornievskaia __field(u32, fhandle) 218840a82417SOlga Kornievskaia __field(u64, fileid) 218940a82417SOlga Kornievskaia __field(int, stateid_seq) 219040a82417SOlga Kornievskaia __field(u32, stateid_hash) 219140a82417SOlga Kornievskaia ), 219240a82417SOlga Kornievskaia 219340a82417SOlga Kornievskaia TP_fast_assign( 219440a82417SOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 219540a82417SOlga Kornievskaia __entry->offset = args->falloc_offset; 219640a82417SOlga Kornievskaia __entry->len = args->falloc_length; 219740a82417SOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 219840a82417SOlga Kornievskaia __entry->fileid = NFS_FILEID(inode); 219940a82417SOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 220040a82417SOlga Kornievskaia __entry->stateid_seq = 220140a82417SOlga Kornievskaia be32_to_cpu(args->falloc_stateid.seqid); 220240a82417SOlga Kornievskaia __entry->stateid_hash = 220340a82417SOlga Kornievskaia nfs_stateid_hash(&args->falloc_stateid); 220440a82417SOlga Kornievskaia ), 220540a82417SOlga Kornievskaia 220640a82417SOlga Kornievskaia TP_printk( 220740a82417SOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 220840a82417SOlga Kornievskaia "stateid=%d:0x%08x offset=%llu len=%llu", 220940a82417SOlga Kornievskaia -__entry->error, 221040a82417SOlga Kornievskaia show_nfs4_status(__entry->error), 221140a82417SOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 221240a82417SOlga Kornievskaia (unsigned long long)__entry->fileid, 221340a82417SOlga Kornievskaia __entry->fhandle, 221440a82417SOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 221540a82417SOlga Kornievskaia (long long)__entry->offset, 221640a82417SOlga Kornievskaia (long long)__entry->len 221740a82417SOlga Kornievskaia ) 221840a82417SOlga Kornievskaia ); 221940a82417SOlga Kornievskaia #define DEFINE_NFS4_SPARSE_EVENT(name) \ 222040a82417SOlga Kornievskaia DEFINE_EVENT(nfs4_sparse_event, name, \ 222140a82417SOlga Kornievskaia TP_PROTO( \ 222240a82417SOlga Kornievskaia const struct inode *inode, \ 222340a82417SOlga Kornievskaia const struct nfs42_falloc_args *args, \ 222440a82417SOlga Kornievskaia int error \ 222540a82417SOlga Kornievskaia ), \ 222640a82417SOlga Kornievskaia TP_ARGS(inode, args, error)) 222740a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_fallocate); 222840a82417SOlga Kornievskaia DEFINE_NFS4_SPARSE_EVENT(nfs4_deallocate); 2229ce7cea1bSOlga Kornievskaia 2230ce7cea1bSOlga Kornievskaia TRACE_EVENT(nfs4_copy, 2231ce7cea1bSOlga Kornievskaia TP_PROTO( 2232ce7cea1bSOlga Kornievskaia const struct inode *src_inode, 2233ce7cea1bSOlga Kornievskaia const struct inode *dst_inode, 2234ce7cea1bSOlga Kornievskaia const struct nfs42_copy_args *args, 2235ce7cea1bSOlga Kornievskaia const struct nfs42_copy_res *res, 2236ce7cea1bSOlga Kornievskaia const struct nl4_server *nss, 2237ce7cea1bSOlga Kornievskaia int error 2238ce7cea1bSOlga Kornievskaia ), 2239ce7cea1bSOlga Kornievskaia 2240ce7cea1bSOlga Kornievskaia TP_ARGS(src_inode, dst_inode, args, res, nss, error), 2241ce7cea1bSOlga Kornievskaia 2242ce7cea1bSOlga Kornievskaia TP_STRUCT__entry( 2243ce7cea1bSOlga Kornievskaia __field(unsigned long, error) 2244ce7cea1bSOlga Kornievskaia __field(u32, src_fhandle) 2245ce7cea1bSOlga Kornievskaia __field(u32, src_fileid) 2246ce7cea1bSOlga Kornievskaia __field(u32, dst_fhandle) 2247ce7cea1bSOlga Kornievskaia __field(u32, dst_fileid) 2248ce7cea1bSOlga Kornievskaia __field(dev_t, src_dev) 2249ce7cea1bSOlga Kornievskaia __field(dev_t, dst_dev) 2250ce7cea1bSOlga Kornievskaia __field(int, src_stateid_seq) 2251ce7cea1bSOlga Kornievskaia __field(u32, src_stateid_hash) 2252ce7cea1bSOlga Kornievskaia __field(int, dst_stateid_seq) 2253ce7cea1bSOlga Kornievskaia __field(u32, dst_stateid_hash) 2254ce7cea1bSOlga Kornievskaia __field(loff_t, src_offset) 2255ce7cea1bSOlga Kornievskaia __field(loff_t, dst_offset) 2256ce7cea1bSOlga Kornievskaia __field(bool, sync) 2257ce7cea1bSOlga Kornievskaia __field(loff_t, len) 2258ce7cea1bSOlga Kornievskaia __field(int, res_stateid_seq) 2259ce7cea1bSOlga Kornievskaia __field(u32, res_stateid_hash) 2260ce7cea1bSOlga Kornievskaia __field(loff_t, res_count) 2261ce7cea1bSOlga Kornievskaia __field(bool, res_sync) 2262ce7cea1bSOlga Kornievskaia __field(bool, res_cons) 2263ce7cea1bSOlga Kornievskaia __field(bool, intra) 2264ce7cea1bSOlga Kornievskaia ), 2265ce7cea1bSOlga Kornievskaia 2266ce7cea1bSOlga Kornievskaia TP_fast_assign( 2267ce7cea1bSOlga Kornievskaia const struct nfs_inode *src_nfsi = NFS_I(src_inode); 2268ce7cea1bSOlga Kornievskaia const struct nfs_inode *dst_nfsi = NFS_I(dst_inode); 2269ce7cea1bSOlga Kornievskaia 2270ce7cea1bSOlga Kornievskaia __entry->src_fileid = src_nfsi->fileid; 2271ce7cea1bSOlga Kornievskaia __entry->src_dev = src_inode->i_sb->s_dev; 2272ce7cea1bSOlga Kornievskaia __entry->src_fhandle = nfs_fhandle_hash(args->src_fh); 2273ce7cea1bSOlga Kornievskaia __entry->src_offset = args->src_pos; 2274ce7cea1bSOlga Kornievskaia __entry->dst_fileid = dst_nfsi->fileid; 2275ce7cea1bSOlga Kornievskaia __entry->dst_dev = dst_inode->i_sb->s_dev; 2276ce7cea1bSOlga Kornievskaia __entry->dst_fhandle = nfs_fhandle_hash(args->dst_fh); 2277ce7cea1bSOlga Kornievskaia __entry->dst_offset = args->dst_pos; 2278ce7cea1bSOlga Kornievskaia __entry->len = args->count; 2279ce7cea1bSOlga Kornievskaia __entry->sync = args->sync; 2280ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq = 2281ce7cea1bSOlga Kornievskaia be32_to_cpu(args->src_stateid.seqid); 2282ce7cea1bSOlga Kornievskaia __entry->src_stateid_hash = 2283ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->src_stateid); 2284ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq = 2285ce7cea1bSOlga Kornievskaia be32_to_cpu(args->dst_stateid.seqid); 2286ce7cea1bSOlga Kornievskaia __entry->dst_stateid_hash = 2287ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&args->dst_stateid); 2288ce7cea1bSOlga Kornievskaia __entry->intra = nss ? 0 : 1; 2289ce7cea1bSOlga Kornievskaia if (error) { 2290ce7cea1bSOlga Kornievskaia __entry->error = -error; 2291ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 0; 2292ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 0; 2293ce7cea1bSOlga Kornievskaia __entry->res_count = 0; 2294ce7cea1bSOlga Kornievskaia __entry->res_sync = 0; 2295ce7cea1bSOlga Kornievskaia __entry->res_cons = 0; 2296ce7cea1bSOlga Kornievskaia } else { 2297ce7cea1bSOlga Kornievskaia __entry->error = 0; 2298ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq = 2299ce7cea1bSOlga Kornievskaia be32_to_cpu(res->write_res.stateid.seqid); 2300ce7cea1bSOlga Kornievskaia __entry->res_stateid_hash = 2301ce7cea1bSOlga Kornievskaia nfs_stateid_hash(&res->write_res.stateid); 2302ce7cea1bSOlga Kornievskaia __entry->res_count = res->write_res.count; 2303ce7cea1bSOlga Kornievskaia __entry->res_sync = res->synchronous; 2304ce7cea1bSOlga Kornievskaia __entry->res_cons = res->consecutive; 2305ce7cea1bSOlga Kornievskaia } 2306ce7cea1bSOlga Kornievskaia ), 2307ce7cea1bSOlga Kornievskaia 2308ce7cea1bSOlga Kornievskaia TP_printk( 2309ce7cea1bSOlga Kornievskaia "error=%ld (%s) intra=%d src_fileid=%02x:%02x:%llu " 2310ce7cea1bSOlga Kornievskaia "src_fhandle=0x%08x dst_fileid=%02x:%02x:%llu " 2311ce7cea1bSOlga Kornievskaia "dst_fhandle=0x%08x src_stateid=%d:0x%08x " 2312ce7cea1bSOlga Kornievskaia "dst_stateid=%d:0x%08x src_offset=%llu dst_offset=%llu " 2313ce7cea1bSOlga Kornievskaia "len=%llu sync=%d cb_stateid=%d:0x%08x res_sync=%d " 2314ce7cea1bSOlga Kornievskaia "res_cons=%d res_count=%llu", 2315ce7cea1bSOlga Kornievskaia -__entry->error, 2316ce7cea1bSOlga Kornievskaia show_nfs4_status(__entry->error), 2317ce7cea1bSOlga Kornievskaia __entry->intra, 2318ce7cea1bSOlga Kornievskaia MAJOR(__entry->src_dev), MINOR(__entry->src_dev), 2319ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->src_fileid, 2320ce7cea1bSOlga Kornievskaia __entry->src_fhandle, 2321ce7cea1bSOlga Kornievskaia MAJOR(__entry->dst_dev), MINOR(__entry->dst_dev), 2322ce7cea1bSOlga Kornievskaia (unsigned long long)__entry->dst_fileid, 2323ce7cea1bSOlga Kornievskaia __entry->dst_fhandle, 2324ce7cea1bSOlga Kornievskaia __entry->src_stateid_seq, __entry->src_stateid_hash, 2325ce7cea1bSOlga Kornievskaia __entry->dst_stateid_seq, __entry->dst_stateid_hash, 2326ce7cea1bSOlga Kornievskaia __entry->src_offset, 2327ce7cea1bSOlga Kornievskaia __entry->dst_offset, 2328ce7cea1bSOlga Kornievskaia __entry->len, 2329ce7cea1bSOlga Kornievskaia __entry->sync, 2330ce7cea1bSOlga Kornievskaia __entry->res_stateid_seq, __entry->res_stateid_hash, 2331ce7cea1bSOlga Kornievskaia __entry->res_sync, 2332ce7cea1bSOlga Kornievskaia __entry->res_cons, 2333ce7cea1bSOlga Kornievskaia __entry->res_count 2334ce7cea1bSOlga Kornievskaia ) 2335ce7cea1bSOlga Kornievskaia ); 23362a65ca8bSOlga Kornievskaia 23372a65ca8bSOlga Kornievskaia TRACE_EVENT(nfs4_clone, 23382a65ca8bSOlga Kornievskaia TP_PROTO( 23392a65ca8bSOlga Kornievskaia const struct inode *src_inode, 23402a65ca8bSOlga Kornievskaia const struct inode *dst_inode, 23412a65ca8bSOlga Kornievskaia const struct nfs42_clone_args *args, 23422a65ca8bSOlga Kornievskaia int error 23432a65ca8bSOlga Kornievskaia ), 23442a65ca8bSOlga Kornievskaia 23452a65ca8bSOlga Kornievskaia TP_ARGS(src_inode, dst_inode, args, error), 23462a65ca8bSOlga Kornievskaia 23472a65ca8bSOlga Kornievskaia TP_STRUCT__entry( 23482a65ca8bSOlga Kornievskaia __field(unsigned long, error) 23492a65ca8bSOlga Kornievskaia __field(u32, src_fhandle) 23502a65ca8bSOlga Kornievskaia __field(u32, src_fileid) 23512a65ca8bSOlga Kornievskaia __field(u32, dst_fhandle) 23522a65ca8bSOlga Kornievskaia __field(u32, dst_fileid) 23532a65ca8bSOlga Kornievskaia __field(dev_t, src_dev) 23542a65ca8bSOlga Kornievskaia __field(dev_t, dst_dev) 23552a65ca8bSOlga Kornievskaia __field(loff_t, src_offset) 23562a65ca8bSOlga Kornievskaia __field(loff_t, dst_offset) 23572a65ca8bSOlga Kornievskaia __field(int, src_stateid_seq) 23582a65ca8bSOlga Kornievskaia __field(u32, src_stateid_hash) 23592a65ca8bSOlga Kornievskaia __field(int, dst_stateid_seq) 23602a65ca8bSOlga Kornievskaia __field(u32, dst_stateid_hash) 23612a65ca8bSOlga Kornievskaia __field(loff_t, len) 23622a65ca8bSOlga Kornievskaia ), 23632a65ca8bSOlga Kornievskaia 23642a65ca8bSOlga Kornievskaia TP_fast_assign( 23652a65ca8bSOlga Kornievskaia const struct nfs_inode *src_nfsi = NFS_I(src_inode); 23662a65ca8bSOlga Kornievskaia const struct nfs_inode *dst_nfsi = NFS_I(dst_inode); 23672a65ca8bSOlga Kornievskaia 23682a65ca8bSOlga Kornievskaia __entry->src_fileid = src_nfsi->fileid; 23692a65ca8bSOlga Kornievskaia __entry->src_dev = src_inode->i_sb->s_dev; 23702a65ca8bSOlga Kornievskaia __entry->src_fhandle = nfs_fhandle_hash(args->src_fh); 23712a65ca8bSOlga Kornievskaia __entry->src_offset = args->src_offset; 23722a65ca8bSOlga Kornievskaia __entry->dst_fileid = dst_nfsi->fileid; 23732a65ca8bSOlga Kornievskaia __entry->dst_dev = dst_inode->i_sb->s_dev; 23742a65ca8bSOlga Kornievskaia __entry->dst_fhandle = nfs_fhandle_hash(args->dst_fh); 23752a65ca8bSOlga Kornievskaia __entry->dst_offset = args->dst_offset; 23762a65ca8bSOlga Kornievskaia __entry->len = args->count; 23772a65ca8bSOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 23782a65ca8bSOlga Kornievskaia __entry->src_stateid_seq = 23792a65ca8bSOlga Kornievskaia be32_to_cpu(args->src_stateid.seqid); 23802a65ca8bSOlga Kornievskaia __entry->src_stateid_hash = 23812a65ca8bSOlga Kornievskaia nfs_stateid_hash(&args->src_stateid); 23822a65ca8bSOlga Kornievskaia __entry->dst_stateid_seq = 23832a65ca8bSOlga Kornievskaia be32_to_cpu(args->dst_stateid.seqid); 23842a65ca8bSOlga Kornievskaia __entry->dst_stateid_hash = 23852a65ca8bSOlga Kornievskaia nfs_stateid_hash(&args->dst_stateid); 23862a65ca8bSOlga Kornievskaia ), 23872a65ca8bSOlga Kornievskaia 23882a65ca8bSOlga Kornievskaia TP_printk( 23892a65ca8bSOlga Kornievskaia "error=%ld (%s) src_fileid=%02x:%02x:%llu " 23902a65ca8bSOlga Kornievskaia "src_fhandle=0x%08x dst_fileid=%02x:%02x:%llu " 23912a65ca8bSOlga Kornievskaia "dst_fhandle=0x%08x src_stateid=%d:0x%08x " 23922a65ca8bSOlga Kornievskaia "dst_stateid=%d:0x%08x src_offset=%llu " 23932a65ca8bSOlga Kornievskaia "dst_offset=%llu len=%llu", 23942a65ca8bSOlga Kornievskaia -__entry->error, 23952a65ca8bSOlga Kornievskaia show_nfs4_status(__entry->error), 23962a65ca8bSOlga Kornievskaia MAJOR(__entry->src_dev), MINOR(__entry->src_dev), 23972a65ca8bSOlga Kornievskaia (unsigned long long)__entry->src_fileid, 23982a65ca8bSOlga Kornievskaia __entry->src_fhandle, 23992a65ca8bSOlga Kornievskaia MAJOR(__entry->dst_dev), MINOR(__entry->dst_dev), 24002a65ca8bSOlga Kornievskaia (unsigned long long)__entry->dst_fileid, 24012a65ca8bSOlga Kornievskaia __entry->dst_fhandle, 24022a65ca8bSOlga Kornievskaia __entry->src_stateid_seq, __entry->src_stateid_hash, 24032a65ca8bSOlga Kornievskaia __entry->dst_stateid_seq, __entry->dst_stateid_hash, 24042a65ca8bSOlga Kornievskaia __entry->src_offset, 24052a65ca8bSOlga Kornievskaia __entry->dst_offset, 24062a65ca8bSOlga Kornievskaia __entry->len 24072a65ca8bSOlga Kornievskaia ) 24082a65ca8bSOlga Kornievskaia ); 2409488b170cSOlga Kornievskaia 2410488b170cSOlga Kornievskaia TRACE_EVENT(nfs4_copy_notify, 2411488b170cSOlga Kornievskaia TP_PROTO( 2412488b170cSOlga Kornievskaia const struct inode *inode, 2413488b170cSOlga Kornievskaia const struct nfs42_copy_notify_args *args, 2414488b170cSOlga Kornievskaia const struct nfs42_copy_notify_res *res, 2415488b170cSOlga Kornievskaia int error 2416488b170cSOlga Kornievskaia ), 2417488b170cSOlga Kornievskaia 2418488b170cSOlga Kornievskaia TP_ARGS(inode, args, res, error), 2419488b170cSOlga Kornievskaia 2420488b170cSOlga Kornievskaia TP_STRUCT__entry( 2421488b170cSOlga Kornievskaia __field(unsigned long, error) 2422488b170cSOlga Kornievskaia __field(u32, fhandle) 2423488b170cSOlga Kornievskaia __field(u32, fileid) 2424488b170cSOlga Kornievskaia __field(dev_t, dev) 2425488b170cSOlga Kornievskaia __field(int, stateid_seq) 2426488b170cSOlga Kornievskaia __field(u32, stateid_hash) 2427488b170cSOlga Kornievskaia __field(int, res_stateid_seq) 2428488b170cSOlga Kornievskaia __field(u32, res_stateid_hash) 2429488b170cSOlga Kornievskaia ), 2430488b170cSOlga Kornievskaia 2431488b170cSOlga Kornievskaia TP_fast_assign( 2432488b170cSOlga Kornievskaia const struct nfs_inode *nfsi = NFS_I(inode); 2433488b170cSOlga Kornievskaia 2434488b170cSOlga Kornievskaia __entry->fileid = nfsi->fileid; 2435488b170cSOlga Kornievskaia __entry->dev = inode->i_sb->s_dev; 2436488b170cSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(args->cna_src_fh); 2437488b170cSOlga Kornievskaia __entry->stateid_seq = 2438488b170cSOlga Kornievskaia be32_to_cpu(args->cna_src_stateid.seqid); 2439488b170cSOlga Kornievskaia __entry->stateid_hash = 2440488b170cSOlga Kornievskaia nfs_stateid_hash(&args->cna_src_stateid); 2441488b170cSOlga Kornievskaia if (error) { 2442488b170cSOlga Kornievskaia __entry->error = -error; 2443488b170cSOlga Kornievskaia __entry->res_stateid_seq = 0; 2444488b170cSOlga Kornievskaia __entry->res_stateid_hash = 0; 2445488b170cSOlga Kornievskaia } else { 2446488b170cSOlga Kornievskaia __entry->error = 0; 2447488b170cSOlga Kornievskaia __entry->res_stateid_seq = 2448488b170cSOlga Kornievskaia be32_to_cpu(res->cnr_stateid.seqid); 2449488b170cSOlga Kornievskaia __entry->res_stateid_hash = 2450488b170cSOlga Kornievskaia nfs_stateid_hash(&res->cnr_stateid); 2451488b170cSOlga Kornievskaia } 2452488b170cSOlga Kornievskaia ), 2453488b170cSOlga Kornievskaia 2454488b170cSOlga Kornievskaia TP_printk( 2455488b170cSOlga Kornievskaia "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 2456488b170cSOlga Kornievskaia "stateid=%d:0x%08x res_stateid=%d:0x%08x", 2457488b170cSOlga Kornievskaia -__entry->error, 2458488b170cSOlga Kornievskaia show_nfs4_status(__entry->error), 2459488b170cSOlga Kornievskaia MAJOR(__entry->dev), MINOR(__entry->dev), 2460488b170cSOlga Kornievskaia (unsigned long long)__entry->fileid, 2461488b170cSOlga Kornievskaia __entry->fhandle, 2462488b170cSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash, 2463488b170cSOlga Kornievskaia __entry->res_stateid_seq, __entry->res_stateid_hash 2464488b170cSOlga Kornievskaia ) 2465488b170cSOlga Kornievskaia ); 2466127becabSOlga Kornievskaia 2467127becabSOlga Kornievskaia TRACE_EVENT(nfs4_offload_cancel, 2468127becabSOlga Kornievskaia TP_PROTO( 2469127becabSOlga Kornievskaia const struct nfs42_offload_status_args *args, 2470127becabSOlga Kornievskaia int error 2471127becabSOlga Kornievskaia ), 2472127becabSOlga Kornievskaia 2473127becabSOlga Kornievskaia TP_ARGS(args, error), 2474127becabSOlga Kornievskaia 2475127becabSOlga Kornievskaia TP_STRUCT__entry( 2476127becabSOlga Kornievskaia __field(unsigned long, error) 2477127becabSOlga Kornievskaia __field(u32, fhandle) 2478127becabSOlga Kornievskaia __field(int, stateid_seq) 2479127becabSOlga Kornievskaia __field(u32, stateid_hash) 2480127becabSOlga Kornievskaia ), 2481127becabSOlga Kornievskaia 2482127becabSOlga Kornievskaia TP_fast_assign( 2483127becabSOlga Kornievskaia __entry->fhandle = nfs_fhandle_hash(args->osa_src_fh); 2484127becabSOlga Kornievskaia __entry->error = error < 0 ? -error : 0; 2485127becabSOlga Kornievskaia __entry->stateid_seq = 2486127becabSOlga Kornievskaia be32_to_cpu(args->osa_stateid.seqid); 2487127becabSOlga Kornievskaia __entry->stateid_hash = 2488127becabSOlga Kornievskaia nfs_stateid_hash(&args->osa_stateid); 2489127becabSOlga Kornievskaia ), 2490127becabSOlga Kornievskaia 2491127becabSOlga Kornievskaia TP_printk( 2492127becabSOlga Kornievskaia "error=%ld (%s) fhandle=0x%08x stateid=%d:0x%08x", 2493127becabSOlga Kornievskaia -__entry->error, 2494127becabSOlga Kornievskaia show_nfs4_status(__entry->error), 2495127becabSOlga Kornievskaia __entry->fhandle, 2496127becabSOlga Kornievskaia __entry->stateid_seq, __entry->stateid_hash 2497127becabSOlga Kornievskaia ) 2498127becabSOlga Kornievskaia ); 249927ffed10SAnna Schumaker 250027ffed10SAnna Schumaker DECLARE_EVENT_CLASS(nfs4_xattr_event, 250127ffed10SAnna Schumaker TP_PROTO( 250227ffed10SAnna Schumaker const struct inode *inode, 250327ffed10SAnna Schumaker const char *name, 250427ffed10SAnna Schumaker int error 250527ffed10SAnna Schumaker ), 250627ffed10SAnna Schumaker 250727ffed10SAnna Schumaker TP_ARGS(inode, name, error), 250827ffed10SAnna Schumaker 250927ffed10SAnna Schumaker TP_STRUCT__entry( 251027ffed10SAnna Schumaker __field(unsigned long, error) 251127ffed10SAnna Schumaker __field(dev_t, dev) 251227ffed10SAnna Schumaker __field(u32, fhandle) 251327ffed10SAnna Schumaker __field(u64, fileid) 251427ffed10SAnna Schumaker __string(name, name) 251527ffed10SAnna Schumaker ), 251627ffed10SAnna Schumaker 251727ffed10SAnna Schumaker TP_fast_assign( 251827ffed10SAnna Schumaker __entry->error = error < 0 ? -error : 0; 251927ffed10SAnna Schumaker __entry->dev = inode->i_sb->s_dev; 252027ffed10SAnna Schumaker __entry->fileid = NFS_FILEID(inode); 252127ffed10SAnna Schumaker __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 252227ffed10SAnna Schumaker __assign_str(name, name); 252327ffed10SAnna Schumaker ), 252427ffed10SAnna Schumaker 252527ffed10SAnna Schumaker TP_printk( 252627ffed10SAnna Schumaker "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 252727ffed10SAnna Schumaker "name=%s", 252827ffed10SAnna Schumaker -__entry->error, show_nfs4_status(__entry->error), 252927ffed10SAnna Schumaker MAJOR(__entry->dev), MINOR(__entry->dev), 253027ffed10SAnna Schumaker (unsigned long long)__entry->fileid, 253127ffed10SAnna Schumaker __entry->fhandle, __get_str(name) 253227ffed10SAnna Schumaker ) 253327ffed10SAnna Schumaker ); 253427ffed10SAnna Schumaker #define DEFINE_NFS4_XATTR_EVENT(name) \ 253527ffed10SAnna Schumaker DEFINE_EVENT(nfs4_xattr_event, name, \ 253627ffed10SAnna Schumaker TP_PROTO( \ 253727ffed10SAnna Schumaker const struct inode *inode, \ 253827ffed10SAnna Schumaker const char *name, \ 253927ffed10SAnna Schumaker int error \ 254027ffed10SAnna Schumaker ), \ 254127ffed10SAnna Schumaker TP_ARGS(inode, name, error)) 254227ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_getxattr); 254327ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_setxattr); 254427ffed10SAnna Schumaker DEFINE_NFS4_XATTR_EVENT(nfs4_removexattr); 2545*a0b685e7SAnna Schumaker 2546*a0b685e7SAnna Schumaker DEFINE_NFS4_INODE_EVENT(nfs4_listxattr); 2547f628d462SOlga Kornievskaia #endif /* CONFIG_NFS_V4_2 */ 2548088f3e68STrond Myklebust 2549cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */ 2550cc668ab3STrond Myklebust 2551c6d01c6fSTrond Myklebust #endif /* _TRACE_NFS4_H */ 2552c6d01c6fSTrond Myklebust 2553c6d01c6fSTrond Myklebust #undef TRACE_INCLUDE_PATH 2554c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_PATH . 2555c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_FILE nfs4trace 2556c6d01c6fSTrond Myklebust /* This part must be outside protection */ 2557c6d01c6fSTrond Myklebust #include <trace/define_trace.h> 2558