1 /* 2 * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 3 */ 4 #undef TRACE_SYSTEM 5 #define TRACE_SYSTEM nfs4 6 7 #if !defined(_TRACE_NFS4_H) || defined(TRACE_HEADER_MULTI_READ) 8 #define _TRACE_NFS4_H 9 10 #include <linux/tracepoint.h> 11 12 #define show_nfsv4_errors(error) \ 13 __print_symbolic(error, \ 14 { NFS4_OK, "OK" }, \ 15 /* Mapped by nfs4_stat_to_errno() */ \ 16 { -EPERM, "EPERM" }, \ 17 { -ENOENT, "ENOENT" }, \ 18 { -EIO, "EIO" }, \ 19 { -ENXIO, "ENXIO" }, \ 20 { -EACCES, "EACCES" }, \ 21 { -EEXIST, "EEXIST" }, \ 22 { -EXDEV, "EXDEV" }, \ 23 { -ENOTDIR, "ENOTDIR" }, \ 24 { -EISDIR, "EISDIR" }, \ 25 { -EFBIG, "EFBIG" }, \ 26 { -ENOSPC, "ENOSPC" }, \ 27 { -EROFS, "EROFS" }, \ 28 { -EMLINK, "EMLINK" }, \ 29 { -ENAMETOOLONG, "ENAMETOOLONG" }, \ 30 { -ENOTEMPTY, "ENOTEMPTY" }, \ 31 { -EDQUOT, "EDQUOT" }, \ 32 { -ESTALE, "ESTALE" }, \ 33 { -EBADHANDLE, "EBADHANDLE" }, \ 34 { -EBADCOOKIE, "EBADCOOKIE" }, \ 35 { -ENOTSUPP, "ENOTSUPP" }, \ 36 { -ETOOSMALL, "ETOOSMALL" }, \ 37 { -EREMOTEIO, "EREMOTEIO" }, \ 38 { -EBADTYPE, "EBADTYPE" }, \ 39 { -EAGAIN, "EAGAIN" }, \ 40 { -ELOOP, "ELOOP" }, \ 41 { -EOPNOTSUPP, "EOPNOTSUPP" }, \ 42 { -EDEADLK, "EDEADLK" }, \ 43 /* RPC errors */ \ 44 { -ENOMEM, "ENOMEM" }, \ 45 { -EKEYEXPIRED, "EKEYEXPIRED" }, \ 46 { -ETIMEDOUT, "ETIMEDOUT" }, \ 47 { -ERESTARTSYS, "ERESTARTSYS" }, \ 48 { -ECONNREFUSED, "ECONNREFUSED" }, \ 49 { -ECONNRESET, "ECONNRESET" }, \ 50 { -ENETUNREACH, "ENETUNREACH" }, \ 51 { -EHOSTUNREACH, "EHOSTUNREACH" }, \ 52 { -EHOSTDOWN, "EHOSTDOWN" }, \ 53 { -EPIPE, "EPIPE" }, \ 54 { -EPFNOSUPPORT, "EPFNOSUPPORT" }, \ 55 { -EPROTONOSUPPORT, "EPROTONOSUPPORT" }, \ 56 /* NFSv4 native errors */ \ 57 { -NFS4ERR_ACCESS, "ACCESS" }, \ 58 { -NFS4ERR_ATTRNOTSUPP, "ATTRNOTSUPP" }, \ 59 { -NFS4ERR_ADMIN_REVOKED, "ADMIN_REVOKED" }, \ 60 { -NFS4ERR_BACK_CHAN_BUSY, "BACK_CHAN_BUSY" }, \ 61 { -NFS4ERR_BADCHAR, "BADCHAR" }, \ 62 { -NFS4ERR_BADHANDLE, "BADHANDLE" }, \ 63 { -NFS4ERR_BADIOMODE, "BADIOMODE" }, \ 64 { -NFS4ERR_BADLAYOUT, "BADLAYOUT" }, \ 65 { -NFS4ERR_BADLABEL, "BADLABEL" }, \ 66 { -NFS4ERR_BADNAME, "BADNAME" }, \ 67 { -NFS4ERR_BADOWNER, "BADOWNER" }, \ 68 { -NFS4ERR_BADSESSION, "BADSESSION" }, \ 69 { -NFS4ERR_BADSLOT, "BADSLOT" }, \ 70 { -NFS4ERR_BADTYPE, "BADTYPE" }, \ 71 { -NFS4ERR_BADXDR, "BADXDR" }, \ 72 { -NFS4ERR_BAD_COOKIE, "BAD_COOKIE" }, \ 73 { -NFS4ERR_BAD_HIGH_SLOT, "BAD_HIGH_SLOT" }, \ 74 { -NFS4ERR_BAD_RANGE, "BAD_RANGE" }, \ 75 { -NFS4ERR_BAD_SEQID, "BAD_SEQID" }, \ 76 { -NFS4ERR_BAD_SESSION_DIGEST, "BAD_SESSION_DIGEST" }, \ 77 { -NFS4ERR_BAD_STATEID, "BAD_STATEID" }, \ 78 { -NFS4ERR_CB_PATH_DOWN, "CB_PATH_DOWN" }, \ 79 { -NFS4ERR_CLID_INUSE, "CLID_INUSE" }, \ 80 { -NFS4ERR_CLIENTID_BUSY, "CLIENTID_BUSY" }, \ 81 { -NFS4ERR_COMPLETE_ALREADY, "COMPLETE_ALREADY" }, \ 82 { -NFS4ERR_CONN_NOT_BOUND_TO_SESSION, \ 83 "CONN_NOT_BOUND_TO_SESSION" }, \ 84 { -NFS4ERR_DEADLOCK, "DEADLOCK" }, \ 85 { -NFS4ERR_DEADSESSION, "DEAD_SESSION" }, \ 86 { -NFS4ERR_DELAY, "DELAY" }, \ 87 { -NFS4ERR_DELEG_ALREADY_WANTED, \ 88 "DELEG_ALREADY_WANTED" }, \ 89 { -NFS4ERR_DELEG_REVOKED, "DELEG_REVOKED" }, \ 90 { -NFS4ERR_DENIED, "DENIED" }, \ 91 { -NFS4ERR_DIRDELEG_UNAVAIL, "DIRDELEG_UNAVAIL" }, \ 92 { -NFS4ERR_DQUOT, "DQUOT" }, \ 93 { -NFS4ERR_ENCR_ALG_UNSUPP, "ENCR_ALG_UNSUPP" }, \ 94 { -NFS4ERR_EXIST, "EXIST" }, \ 95 { -NFS4ERR_EXPIRED, "EXPIRED" }, \ 96 { -NFS4ERR_FBIG, "FBIG" }, \ 97 { -NFS4ERR_FHEXPIRED, "FHEXPIRED" }, \ 98 { -NFS4ERR_FILE_OPEN, "FILE_OPEN" }, \ 99 { -NFS4ERR_GRACE, "GRACE" }, \ 100 { -NFS4ERR_HASH_ALG_UNSUPP, "HASH_ALG_UNSUPP" }, \ 101 { -NFS4ERR_INVAL, "INVAL" }, \ 102 { -NFS4ERR_IO, "IO" }, \ 103 { -NFS4ERR_ISDIR, "ISDIR" }, \ 104 { -NFS4ERR_LAYOUTTRYLATER, "LAYOUTTRYLATER" }, \ 105 { -NFS4ERR_LAYOUTUNAVAILABLE, "LAYOUTUNAVAILABLE" }, \ 106 { -NFS4ERR_LEASE_MOVED, "LEASE_MOVED" }, \ 107 { -NFS4ERR_LOCKED, "LOCKED" }, \ 108 { -NFS4ERR_LOCKS_HELD, "LOCKS_HELD" }, \ 109 { -NFS4ERR_LOCK_RANGE, "LOCK_RANGE" }, \ 110 { -NFS4ERR_MINOR_VERS_MISMATCH, "MINOR_VERS_MISMATCH" }, \ 111 { -NFS4ERR_MLINK, "MLINK" }, \ 112 { -NFS4ERR_MOVED, "MOVED" }, \ 113 { -NFS4ERR_NAMETOOLONG, "NAMETOOLONG" }, \ 114 { -NFS4ERR_NOENT, "NOENT" }, \ 115 { -NFS4ERR_NOFILEHANDLE, "NOFILEHANDLE" }, \ 116 { -NFS4ERR_NOMATCHING_LAYOUT, "NOMATCHING_LAYOUT" }, \ 117 { -NFS4ERR_NOSPC, "NOSPC" }, \ 118 { -NFS4ERR_NOTDIR, "NOTDIR" }, \ 119 { -NFS4ERR_NOTEMPTY, "NOTEMPTY" }, \ 120 { -NFS4ERR_NOTSUPP, "NOTSUPP" }, \ 121 { -NFS4ERR_NOT_ONLY_OP, "NOT_ONLY_OP" }, \ 122 { -NFS4ERR_NOT_SAME, "NOT_SAME" }, \ 123 { -NFS4ERR_NO_GRACE, "NO_GRACE" }, \ 124 { -NFS4ERR_NXIO, "NXIO" }, \ 125 { -NFS4ERR_OLD_STATEID, "OLD_STATEID" }, \ 126 { -NFS4ERR_OPENMODE, "OPENMODE" }, \ 127 { -NFS4ERR_OP_ILLEGAL, "OP_ILLEGAL" }, \ 128 { -NFS4ERR_OP_NOT_IN_SESSION, "OP_NOT_IN_SESSION" }, \ 129 { -NFS4ERR_PERM, "PERM" }, \ 130 { -NFS4ERR_PNFS_IO_HOLE, "PNFS_IO_HOLE" }, \ 131 { -NFS4ERR_PNFS_NO_LAYOUT, "PNFS_NO_LAYOUT" }, \ 132 { -NFS4ERR_RECALLCONFLICT, "RECALLCONFLICT" }, \ 133 { -NFS4ERR_RECLAIM_BAD, "RECLAIM_BAD" }, \ 134 { -NFS4ERR_RECLAIM_CONFLICT, "RECLAIM_CONFLICT" }, \ 135 { -NFS4ERR_REJECT_DELEG, "REJECT_DELEG" }, \ 136 { -NFS4ERR_REP_TOO_BIG, "REP_TOO_BIG" }, \ 137 { -NFS4ERR_REP_TOO_BIG_TO_CACHE, \ 138 "REP_TOO_BIG_TO_CACHE" }, \ 139 { -NFS4ERR_REQ_TOO_BIG, "REQ_TOO_BIG" }, \ 140 { -NFS4ERR_RESOURCE, "RESOURCE" }, \ 141 { -NFS4ERR_RESTOREFH, "RESTOREFH" }, \ 142 { -NFS4ERR_RETRY_UNCACHED_REP, "RETRY_UNCACHED_REP" }, \ 143 { -NFS4ERR_RETURNCONFLICT, "RETURNCONFLICT" }, \ 144 { -NFS4ERR_ROFS, "ROFS" }, \ 145 { -NFS4ERR_SAME, "SAME" }, \ 146 { -NFS4ERR_SHARE_DENIED, "SHARE_DENIED" }, \ 147 { -NFS4ERR_SEQUENCE_POS, "SEQUENCE_POS" }, \ 148 { -NFS4ERR_SEQ_FALSE_RETRY, "SEQ_FALSE_RETRY" }, \ 149 { -NFS4ERR_SEQ_MISORDERED, "SEQ_MISORDERED" }, \ 150 { -NFS4ERR_SERVERFAULT, "SERVERFAULT" }, \ 151 { -NFS4ERR_STALE, "STALE" }, \ 152 { -NFS4ERR_STALE_CLIENTID, "STALE_CLIENTID" }, \ 153 { -NFS4ERR_STALE_STATEID, "STALE_STATEID" }, \ 154 { -NFS4ERR_SYMLINK, "SYMLINK" }, \ 155 { -NFS4ERR_TOOSMALL, "TOOSMALL" }, \ 156 { -NFS4ERR_TOO_MANY_OPS, "TOO_MANY_OPS" }, \ 157 { -NFS4ERR_UNKNOWN_LAYOUTTYPE, "UNKNOWN_LAYOUTTYPE" }, \ 158 { -NFS4ERR_UNSAFE_COMPOUND, "UNSAFE_COMPOUND" }, \ 159 { -NFS4ERR_WRONGSEC, "WRONGSEC" }, \ 160 { -NFS4ERR_WRONG_CRED, "WRONG_CRED" }, \ 161 { -NFS4ERR_WRONG_TYPE, "WRONG_TYPE" }, \ 162 { -NFS4ERR_XDEV, "XDEV" }) 163 164 #define show_open_flags(flags) \ 165 __print_flags(flags, "|", \ 166 { O_CREAT, "O_CREAT" }, \ 167 { O_EXCL, "O_EXCL" }, \ 168 { O_TRUNC, "O_TRUNC" }, \ 169 { O_DIRECT, "O_DIRECT" }) 170 171 #define show_fmode_flags(mode) \ 172 __print_flags(mode, "|", \ 173 { ((__force unsigned long)FMODE_READ), "READ" }, \ 174 { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \ 175 { ((__force unsigned long)FMODE_EXEC), "EXEC" }) 176 177 #define show_nfs_fattr_flags(valid) \ 178 __print_flags((unsigned long)valid, "|", \ 179 { NFS_ATTR_FATTR_TYPE, "TYPE" }, \ 180 { NFS_ATTR_FATTR_MODE, "MODE" }, \ 181 { NFS_ATTR_FATTR_NLINK, "NLINK" }, \ 182 { NFS_ATTR_FATTR_OWNER, "OWNER" }, \ 183 { NFS_ATTR_FATTR_GROUP, "GROUP" }, \ 184 { NFS_ATTR_FATTR_RDEV, "RDEV" }, \ 185 { NFS_ATTR_FATTR_SIZE, "SIZE" }, \ 186 { NFS_ATTR_FATTR_FSID, "FSID" }, \ 187 { NFS_ATTR_FATTR_FILEID, "FILEID" }, \ 188 { NFS_ATTR_FATTR_ATIME, "ATIME" }, \ 189 { NFS_ATTR_FATTR_MTIME, "MTIME" }, \ 190 { NFS_ATTR_FATTR_CTIME, "CTIME" }, \ 191 { NFS_ATTR_FATTR_CHANGE, "CHANGE" }, \ 192 { NFS_ATTR_FATTR_OWNER_NAME, "OWNER_NAME" }, \ 193 { NFS_ATTR_FATTR_GROUP_NAME, "GROUP_NAME" }) 194 195 DECLARE_EVENT_CLASS(nfs4_clientid_event, 196 TP_PROTO( 197 const struct nfs_client *clp, 198 int error 199 ), 200 201 TP_ARGS(clp, error), 202 203 TP_STRUCT__entry( 204 __string(dstaddr, 205 rpc_peeraddr2str(clp->cl_rpcclient, 206 RPC_DISPLAY_ADDR)) 207 __field(int, error) 208 ), 209 210 TP_fast_assign( 211 __entry->error = error; 212 __assign_str(dstaddr, 213 rpc_peeraddr2str(clp->cl_rpcclient, 214 RPC_DISPLAY_ADDR)); 215 ), 216 217 TP_printk( 218 "error=%d (%s) dstaddr=%s", 219 __entry->error, 220 show_nfsv4_errors(__entry->error), 221 __get_str(dstaddr) 222 ) 223 ); 224 #define DEFINE_NFS4_CLIENTID_EVENT(name) \ 225 DEFINE_EVENT(nfs4_clientid_event, name, \ 226 TP_PROTO( \ 227 const struct nfs_client *clp, \ 228 int error \ 229 ), \ 230 TP_ARGS(clp, error)) 231 DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid); 232 DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid_confirm); 233 DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew); 234 DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew_async); 235 #ifdef CONFIG_NFS_V4_1 236 DEFINE_NFS4_CLIENTID_EVENT(nfs4_exchange_id); 237 DEFINE_NFS4_CLIENTID_EVENT(nfs4_create_session); 238 DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_session); 239 DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_clientid); 240 DEFINE_NFS4_CLIENTID_EVENT(nfs4_bind_conn_to_session); 241 DEFINE_NFS4_CLIENTID_EVENT(nfs4_sequence); 242 DEFINE_NFS4_CLIENTID_EVENT(nfs4_reclaim_complete); 243 244 TRACE_EVENT(nfs4_setup_sequence, 245 TP_PROTO( 246 const struct nfs4_session *session, 247 const struct nfs4_sequence_args *args 248 ), 249 TP_ARGS(session, args), 250 251 TP_STRUCT__entry( 252 __field(unsigned int, session) 253 __field(unsigned int, slot_nr) 254 __field(unsigned int, seq_nr) 255 __field(unsigned int, highest_used_slotid) 256 ), 257 258 TP_fast_assign( 259 const struct nfs4_slot *sa_slot = args->sa_slot; 260 __entry->session = nfs_session_id_hash(&session->sess_id); 261 __entry->slot_nr = sa_slot->slot_nr; 262 __entry->seq_nr = sa_slot->seq_nr; 263 __entry->highest_used_slotid = 264 sa_slot->table->highest_used_slotid; 265 ), 266 TP_printk( 267 "session=0x%08x slot_nr=%u seq_nr=%u " 268 "highest_used_slotid=%u", 269 __entry->session, 270 __entry->slot_nr, 271 __entry->seq_nr, 272 __entry->highest_used_slotid 273 ) 274 ); 275 276 #define show_nfs4_sequence_status_flags(status) \ 277 __print_flags((unsigned long)status, "|", \ 278 { SEQ4_STATUS_CB_PATH_DOWN, "CB_PATH_DOWN" }, \ 279 { SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING, \ 280 "CB_GSS_CONTEXTS_EXPIRING" }, \ 281 { SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED, \ 282 "CB_GSS_CONTEXTS_EXPIRED" }, \ 283 { SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED, \ 284 "EXPIRED_ALL_STATE_REVOKED" }, \ 285 { SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED, \ 286 "EXPIRED_SOME_STATE_REVOKED" }, \ 287 { SEQ4_STATUS_ADMIN_STATE_REVOKED, \ 288 "ADMIN_STATE_REVOKED" }, \ 289 { SEQ4_STATUS_RECALLABLE_STATE_REVOKED, \ 290 "RECALLABLE_STATE_REVOKED" }, \ 291 { SEQ4_STATUS_LEASE_MOVED, "LEASE_MOVED" }, \ 292 { SEQ4_STATUS_RESTART_RECLAIM_NEEDED, \ 293 "RESTART_RECLAIM_NEEDED" }, \ 294 { SEQ4_STATUS_CB_PATH_DOWN_SESSION, \ 295 "CB_PATH_DOWN_SESSION" }, \ 296 { SEQ4_STATUS_BACKCHANNEL_FAULT, \ 297 "BACKCHANNEL_FAULT" }) 298 299 TRACE_EVENT(nfs4_sequence_done, 300 TP_PROTO( 301 const struct nfs4_session *session, 302 const struct nfs4_sequence_res *res 303 ), 304 TP_ARGS(session, res), 305 306 TP_STRUCT__entry( 307 __field(unsigned int, session) 308 __field(unsigned int, slot_nr) 309 __field(unsigned int, seq_nr) 310 __field(unsigned int, highest_slotid) 311 __field(unsigned int, target_highest_slotid) 312 __field(unsigned int, status_flags) 313 __field(int, error) 314 ), 315 316 TP_fast_assign( 317 const struct nfs4_slot *sr_slot = res->sr_slot; 318 __entry->session = nfs_session_id_hash(&session->sess_id); 319 __entry->slot_nr = sr_slot->slot_nr; 320 __entry->seq_nr = sr_slot->seq_nr; 321 __entry->highest_slotid = res->sr_highest_slotid; 322 __entry->target_highest_slotid = 323 res->sr_target_highest_slotid; 324 __entry->error = res->sr_status; 325 ), 326 TP_printk( 327 "error=%d (%s) session=0x%08x slot_nr=%u seq_nr=%u " 328 "highest_slotid=%u target_highest_slotid=%u " 329 "status_flags=%u (%s)", 330 __entry->error, 331 show_nfsv4_errors(__entry->error), 332 __entry->session, 333 __entry->slot_nr, 334 __entry->seq_nr, 335 __entry->highest_slotid, 336 __entry->target_highest_slotid, 337 __entry->status_flags, 338 show_nfs4_sequence_status_flags(__entry->status_flags) 339 ) 340 ); 341 342 struct cb_sequenceargs; 343 struct cb_sequenceres; 344 345 TRACE_EVENT(nfs4_cb_sequence, 346 TP_PROTO( 347 const struct cb_sequenceargs *args, 348 const struct cb_sequenceres *res, 349 __be32 status 350 ), 351 TP_ARGS(args, res, status), 352 353 TP_STRUCT__entry( 354 __field(unsigned int, session) 355 __field(unsigned int, slot_nr) 356 __field(unsigned int, seq_nr) 357 __field(unsigned int, highest_slotid) 358 __field(unsigned int, cachethis) 359 __field(int, error) 360 ), 361 362 TP_fast_assign( 363 __entry->session = nfs_session_id_hash(&args->csa_sessionid); 364 __entry->slot_nr = args->csa_slotid; 365 __entry->seq_nr = args->csa_sequenceid; 366 __entry->highest_slotid = args->csa_highestslotid; 367 __entry->cachethis = args->csa_cachethis; 368 __entry->error = -be32_to_cpu(status); 369 ), 370 371 TP_printk( 372 "error=%d (%s) session=0x%08x slot_nr=%u seq_nr=%u " 373 "highest_slotid=%u", 374 __entry->error, 375 show_nfsv4_errors(__entry->error), 376 __entry->session, 377 __entry->slot_nr, 378 __entry->seq_nr, 379 __entry->highest_slotid 380 ) 381 ); 382 #endif /* CONFIG_NFS_V4_1 */ 383 384 DECLARE_EVENT_CLASS(nfs4_open_event, 385 TP_PROTO( 386 const struct nfs_open_context *ctx, 387 int flags, 388 int error 389 ), 390 391 TP_ARGS(ctx, flags, error), 392 393 TP_STRUCT__entry( 394 __field(int, error) 395 __field(unsigned int, flags) 396 __field(unsigned int, fmode) 397 __field(dev_t, dev) 398 __field(u32, fhandle) 399 __field(u64, fileid) 400 __field(u64, dir) 401 __string(name, ctx->dentry->d_name.name) 402 __field(int, stateid_seq) 403 __field(u32, stateid_hash) 404 __field(int, openstateid_seq) 405 __field(u32, openstateid_hash) 406 ), 407 408 TP_fast_assign( 409 const struct nfs4_state *state = ctx->state; 410 const struct inode *inode = NULL; 411 412 __entry->error = error; 413 __entry->flags = flags; 414 __entry->fmode = (__force unsigned int)ctx->mode; 415 __entry->dev = ctx->dentry->d_sb->s_dev; 416 if (!IS_ERR_OR_NULL(state)) { 417 inode = state->inode; 418 __entry->stateid_seq = 419 be32_to_cpu(state->stateid.seqid); 420 __entry->stateid_hash = 421 nfs_stateid_hash(&state->stateid); 422 __entry->openstateid_seq = 423 be32_to_cpu(state->open_stateid.seqid); 424 __entry->openstateid_hash = 425 nfs_stateid_hash(&state->open_stateid); 426 } else { 427 __entry->stateid_seq = 0; 428 __entry->stateid_hash = 0; 429 __entry->openstateid_seq = 0; 430 __entry->openstateid_hash = 0; 431 } 432 if (inode != NULL) { 433 __entry->fileid = NFS_FILEID(inode); 434 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 435 } else { 436 __entry->fileid = 0; 437 __entry->fhandle = 0; 438 } 439 __entry->dir = NFS_FILEID(d_inode(ctx->dentry->d_parent)); 440 __assign_str(name, ctx->dentry->d_name.name); 441 ), 442 443 TP_printk( 444 "error=%d (%s) flags=%d (%s) fmode=%s " 445 "fileid=%02x:%02x:%llu fhandle=0x%08x " 446 "name=%02x:%02x:%llu/%s stateid=%d:0x%08x " 447 "openstateid=%d:0x%08x", 448 __entry->error, 449 show_nfsv4_errors(__entry->error), 450 __entry->flags, 451 show_open_flags(__entry->flags), 452 show_fmode_flags(__entry->fmode), 453 MAJOR(__entry->dev), MINOR(__entry->dev), 454 (unsigned long long)__entry->fileid, 455 __entry->fhandle, 456 MAJOR(__entry->dev), MINOR(__entry->dev), 457 (unsigned long long)__entry->dir, 458 __get_str(name), 459 __entry->stateid_seq, __entry->stateid_hash, 460 __entry->openstateid_seq, __entry->openstateid_hash 461 ) 462 ); 463 464 #define DEFINE_NFS4_OPEN_EVENT(name) \ 465 DEFINE_EVENT(nfs4_open_event, name, \ 466 TP_PROTO( \ 467 const struct nfs_open_context *ctx, \ 468 int flags, \ 469 int error \ 470 ), \ 471 TP_ARGS(ctx, flags, error)) 472 DEFINE_NFS4_OPEN_EVENT(nfs4_open_reclaim); 473 DEFINE_NFS4_OPEN_EVENT(nfs4_open_expired); 474 DEFINE_NFS4_OPEN_EVENT(nfs4_open_file); 475 476 TRACE_EVENT(nfs4_cached_open, 477 TP_PROTO( 478 const struct nfs4_state *state 479 ), 480 TP_ARGS(state), 481 TP_STRUCT__entry( 482 __field(dev_t, dev) 483 __field(u32, fhandle) 484 __field(u64, fileid) 485 __field(unsigned int, fmode) 486 __field(int, stateid_seq) 487 __field(u32, stateid_hash) 488 ), 489 490 TP_fast_assign( 491 const struct inode *inode = state->inode; 492 493 __entry->dev = inode->i_sb->s_dev; 494 __entry->fileid = NFS_FILEID(inode); 495 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 496 __entry->fmode = (__force unsigned int)state->state; 497 __entry->stateid_seq = 498 be32_to_cpu(state->stateid.seqid); 499 __entry->stateid_hash = 500 nfs_stateid_hash(&state->stateid); 501 ), 502 503 TP_printk( 504 "fmode=%s fileid=%02x:%02x:%llu " 505 "fhandle=0x%08x stateid=%d:0x%08x", 506 __entry->fmode ? show_fmode_flags(__entry->fmode) : 507 "closed", 508 MAJOR(__entry->dev), MINOR(__entry->dev), 509 (unsigned long long)__entry->fileid, 510 __entry->fhandle, 511 __entry->stateid_seq, __entry->stateid_hash 512 ) 513 ); 514 515 TRACE_EVENT(nfs4_close, 516 TP_PROTO( 517 const struct nfs4_state *state, 518 const struct nfs_closeargs *args, 519 const struct nfs_closeres *res, 520 int error 521 ), 522 523 TP_ARGS(state, args, res, error), 524 525 TP_STRUCT__entry( 526 __field(dev_t, dev) 527 __field(u32, fhandle) 528 __field(u64, fileid) 529 __field(unsigned int, fmode) 530 __field(int, error) 531 __field(int, stateid_seq) 532 __field(u32, stateid_hash) 533 ), 534 535 TP_fast_assign( 536 const struct inode *inode = state->inode; 537 538 __entry->dev = inode->i_sb->s_dev; 539 __entry->fileid = NFS_FILEID(inode); 540 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 541 __entry->fmode = (__force unsigned int)state->state; 542 __entry->error = error; 543 __entry->stateid_seq = 544 be32_to_cpu(args->stateid.seqid); 545 __entry->stateid_hash = 546 nfs_stateid_hash(&args->stateid); 547 ), 548 549 TP_printk( 550 "error=%d (%s) fmode=%s fileid=%02x:%02x:%llu " 551 "fhandle=0x%08x openstateid=%d:0x%08x", 552 __entry->error, 553 show_nfsv4_errors(__entry->error), 554 __entry->fmode ? show_fmode_flags(__entry->fmode) : 555 "closed", 556 MAJOR(__entry->dev), MINOR(__entry->dev), 557 (unsigned long long)__entry->fileid, 558 __entry->fhandle, 559 __entry->stateid_seq, __entry->stateid_hash 560 ) 561 ); 562 563 #define show_lock_cmd(type) \ 564 __print_symbolic((int)type, \ 565 { F_GETLK, "GETLK" }, \ 566 { F_SETLK, "SETLK" }, \ 567 { F_SETLKW, "SETLKW" }) 568 #define show_lock_type(type) \ 569 __print_symbolic((int)type, \ 570 { F_RDLCK, "RDLCK" }, \ 571 { F_WRLCK, "WRLCK" }, \ 572 { F_UNLCK, "UNLCK" }) 573 574 DECLARE_EVENT_CLASS(nfs4_lock_event, 575 TP_PROTO( 576 const struct file_lock *request, 577 const struct nfs4_state *state, 578 int cmd, 579 int error 580 ), 581 582 TP_ARGS(request, state, cmd, error), 583 584 TP_STRUCT__entry( 585 __field(int, error) 586 __field(int, cmd) 587 __field(char, type) 588 __field(loff_t, start) 589 __field(loff_t, end) 590 __field(dev_t, dev) 591 __field(u32, fhandle) 592 __field(u64, fileid) 593 __field(int, stateid_seq) 594 __field(u32, stateid_hash) 595 ), 596 597 TP_fast_assign( 598 const struct inode *inode = state->inode; 599 600 __entry->error = error; 601 __entry->cmd = cmd; 602 __entry->type = request->fl_type; 603 __entry->start = request->fl_start; 604 __entry->end = request->fl_end; 605 __entry->dev = inode->i_sb->s_dev; 606 __entry->fileid = NFS_FILEID(inode); 607 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 608 __entry->stateid_seq = 609 be32_to_cpu(state->stateid.seqid); 610 __entry->stateid_hash = 611 nfs_stateid_hash(&state->stateid); 612 ), 613 614 TP_printk( 615 "error=%d (%s) cmd=%s:%s range=%lld:%lld " 616 "fileid=%02x:%02x:%llu fhandle=0x%08x " 617 "stateid=%d:0x%08x", 618 __entry->error, 619 show_nfsv4_errors(__entry->error), 620 show_lock_cmd(__entry->cmd), 621 show_lock_type(__entry->type), 622 (long long)__entry->start, 623 (long long)__entry->end, 624 MAJOR(__entry->dev), MINOR(__entry->dev), 625 (unsigned long long)__entry->fileid, 626 __entry->fhandle, 627 __entry->stateid_seq, __entry->stateid_hash 628 ) 629 ); 630 631 #define DEFINE_NFS4_LOCK_EVENT(name) \ 632 DEFINE_EVENT(nfs4_lock_event, name, \ 633 TP_PROTO( \ 634 const struct file_lock *request, \ 635 const struct nfs4_state *state, \ 636 int cmd, \ 637 int error \ 638 ), \ 639 TP_ARGS(request, state, cmd, error)) 640 DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock); 641 DEFINE_NFS4_LOCK_EVENT(nfs4_unlock); 642 643 TRACE_EVENT(nfs4_set_lock, 644 TP_PROTO( 645 const struct file_lock *request, 646 const struct nfs4_state *state, 647 const nfs4_stateid *lockstateid, 648 int cmd, 649 int error 650 ), 651 652 TP_ARGS(request, state, lockstateid, cmd, error), 653 654 TP_STRUCT__entry( 655 __field(int, error) 656 __field(int, cmd) 657 __field(char, type) 658 __field(loff_t, start) 659 __field(loff_t, end) 660 __field(dev_t, dev) 661 __field(u32, fhandle) 662 __field(u64, fileid) 663 __field(int, stateid_seq) 664 __field(u32, stateid_hash) 665 __field(int, lockstateid_seq) 666 __field(u32, lockstateid_hash) 667 ), 668 669 TP_fast_assign( 670 const struct inode *inode = state->inode; 671 672 __entry->error = error; 673 __entry->cmd = cmd; 674 __entry->type = request->fl_type; 675 __entry->start = request->fl_start; 676 __entry->end = request->fl_end; 677 __entry->dev = inode->i_sb->s_dev; 678 __entry->fileid = NFS_FILEID(inode); 679 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 680 __entry->stateid_seq = 681 be32_to_cpu(state->stateid.seqid); 682 __entry->stateid_hash = 683 nfs_stateid_hash(&state->stateid); 684 __entry->lockstateid_seq = 685 be32_to_cpu(lockstateid->seqid); 686 __entry->lockstateid_hash = 687 nfs_stateid_hash(lockstateid); 688 ), 689 690 TP_printk( 691 "error=%d (%s) cmd=%s:%s range=%lld:%lld " 692 "fileid=%02x:%02x:%llu fhandle=0x%08x " 693 "stateid=%d:0x%08x lockstateid=%d:0x%08x", 694 __entry->error, 695 show_nfsv4_errors(__entry->error), 696 show_lock_cmd(__entry->cmd), 697 show_lock_type(__entry->type), 698 (long long)__entry->start, 699 (long long)__entry->end, 700 MAJOR(__entry->dev), MINOR(__entry->dev), 701 (unsigned long long)__entry->fileid, 702 __entry->fhandle, 703 __entry->stateid_seq, __entry->stateid_hash, 704 __entry->lockstateid_seq, __entry->lockstateid_hash 705 ) 706 ); 707 708 DECLARE_EVENT_CLASS(nfs4_set_delegation_event, 709 TP_PROTO( 710 const struct inode *inode, 711 fmode_t fmode 712 ), 713 714 TP_ARGS(inode, fmode), 715 716 TP_STRUCT__entry( 717 __field(dev_t, dev) 718 __field(u32, fhandle) 719 __field(u64, fileid) 720 __field(unsigned int, fmode) 721 ), 722 723 TP_fast_assign( 724 __entry->dev = inode->i_sb->s_dev; 725 __entry->fileid = NFS_FILEID(inode); 726 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 727 __entry->fmode = (__force unsigned int)fmode; 728 ), 729 730 TP_printk( 731 "fmode=%s fileid=%02x:%02x:%llu fhandle=0x%08x", 732 show_fmode_flags(__entry->fmode), 733 MAJOR(__entry->dev), MINOR(__entry->dev), 734 (unsigned long long)__entry->fileid, 735 __entry->fhandle 736 ) 737 ); 738 #define DEFINE_NFS4_SET_DELEGATION_EVENT(name) \ 739 DEFINE_EVENT(nfs4_set_delegation_event, name, \ 740 TP_PROTO( \ 741 const struct inode *inode, \ 742 fmode_t fmode \ 743 ), \ 744 TP_ARGS(inode, fmode)) 745 DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_set_delegation); 746 DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_reclaim_delegation); 747 748 TRACE_EVENT(nfs4_delegreturn_exit, 749 TP_PROTO( 750 const struct nfs4_delegreturnargs *args, 751 const struct nfs4_delegreturnres *res, 752 int error 753 ), 754 755 TP_ARGS(args, res, error), 756 757 TP_STRUCT__entry( 758 __field(dev_t, dev) 759 __field(u32, fhandle) 760 __field(int, error) 761 __field(int, stateid_seq) 762 __field(u32, stateid_hash) 763 ), 764 765 TP_fast_assign( 766 __entry->dev = res->server->s_dev; 767 __entry->fhandle = nfs_fhandle_hash(args->fhandle); 768 __entry->error = error; 769 __entry->stateid_seq = 770 be32_to_cpu(args->stateid->seqid); 771 __entry->stateid_hash = 772 nfs_stateid_hash(args->stateid); 773 ), 774 775 TP_printk( 776 "error=%d (%s) dev=%02x:%02x fhandle=0x%08x " 777 "stateid=%d:0x%08x", 778 __entry->error, 779 show_nfsv4_errors(__entry->error), 780 MAJOR(__entry->dev), MINOR(__entry->dev), 781 __entry->fhandle, 782 __entry->stateid_seq, __entry->stateid_hash 783 ) 784 ); 785 786 #ifdef CONFIG_NFS_V4_1 787 DECLARE_EVENT_CLASS(nfs4_test_stateid_event, 788 TP_PROTO( 789 const struct nfs4_state *state, 790 const struct nfs4_lock_state *lsp, 791 int error 792 ), 793 794 TP_ARGS(state, lsp, error), 795 796 TP_STRUCT__entry( 797 __field(int, error) 798 __field(dev_t, dev) 799 __field(u32, fhandle) 800 __field(u64, fileid) 801 __field(int, stateid_seq) 802 __field(u32, stateid_hash) 803 ), 804 805 TP_fast_assign( 806 const struct inode *inode = state->inode; 807 808 __entry->error = error; 809 __entry->dev = inode->i_sb->s_dev; 810 __entry->fileid = NFS_FILEID(inode); 811 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 812 __entry->stateid_seq = 813 be32_to_cpu(state->stateid.seqid); 814 __entry->stateid_hash = 815 nfs_stateid_hash(&state->stateid); 816 ), 817 818 TP_printk( 819 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 820 "stateid=%d:0x%08x", 821 __entry->error, 822 show_nfsv4_errors(__entry->error), 823 MAJOR(__entry->dev), MINOR(__entry->dev), 824 (unsigned long long)__entry->fileid, 825 __entry->fhandle, 826 __entry->stateid_seq, __entry->stateid_hash 827 ) 828 ); 829 830 #define DEFINE_NFS4_TEST_STATEID_EVENT(name) \ 831 DEFINE_EVENT(nfs4_test_stateid_event, name, \ 832 TP_PROTO( \ 833 const struct nfs4_state *state, \ 834 const struct nfs4_lock_state *lsp, \ 835 int error \ 836 ), \ 837 TP_ARGS(state, lsp, error)) 838 DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid); 839 DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid); 840 DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid); 841 #endif /* CONFIG_NFS_V4_1 */ 842 843 DECLARE_EVENT_CLASS(nfs4_lookup_event, 844 TP_PROTO( 845 const struct inode *dir, 846 const struct qstr *name, 847 int error 848 ), 849 850 TP_ARGS(dir, name, error), 851 852 TP_STRUCT__entry( 853 __field(dev_t, dev) 854 __field(int, error) 855 __field(u64, dir) 856 __string(name, name->name) 857 ), 858 859 TP_fast_assign( 860 __entry->dev = dir->i_sb->s_dev; 861 __entry->dir = NFS_FILEID(dir); 862 __entry->error = error; 863 __assign_str(name, name->name); 864 ), 865 866 TP_printk( 867 "error=%d (%s) name=%02x:%02x:%llu/%s", 868 __entry->error, 869 show_nfsv4_errors(__entry->error), 870 MAJOR(__entry->dev), MINOR(__entry->dev), 871 (unsigned long long)__entry->dir, 872 __get_str(name) 873 ) 874 ); 875 876 #define DEFINE_NFS4_LOOKUP_EVENT(name) \ 877 DEFINE_EVENT(nfs4_lookup_event, name, \ 878 TP_PROTO( \ 879 const struct inode *dir, \ 880 const struct qstr *name, \ 881 int error \ 882 ), \ 883 TP_ARGS(dir, name, error)) 884 885 DEFINE_NFS4_LOOKUP_EVENT(nfs4_lookup); 886 DEFINE_NFS4_LOOKUP_EVENT(nfs4_symlink); 887 DEFINE_NFS4_LOOKUP_EVENT(nfs4_mkdir); 888 DEFINE_NFS4_LOOKUP_EVENT(nfs4_mknod); 889 DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove); 890 DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations); 891 DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo); 892 893 TRACE_EVENT(nfs4_rename, 894 TP_PROTO( 895 const struct inode *olddir, 896 const struct qstr *oldname, 897 const struct inode *newdir, 898 const struct qstr *newname, 899 int error 900 ), 901 902 TP_ARGS(olddir, oldname, newdir, newname, error), 903 904 TP_STRUCT__entry( 905 __field(dev_t, dev) 906 __field(int, error) 907 __field(u64, olddir) 908 __string(oldname, oldname->name) 909 __field(u64, newdir) 910 __string(newname, newname->name) 911 ), 912 913 TP_fast_assign( 914 __entry->dev = olddir->i_sb->s_dev; 915 __entry->olddir = NFS_FILEID(olddir); 916 __entry->newdir = NFS_FILEID(newdir); 917 __entry->error = error; 918 __assign_str(oldname, oldname->name); 919 __assign_str(newname, newname->name); 920 ), 921 922 TP_printk( 923 "error=%d (%s) oldname=%02x:%02x:%llu/%s " 924 "newname=%02x:%02x:%llu/%s", 925 __entry->error, 926 show_nfsv4_errors(__entry->error), 927 MAJOR(__entry->dev), MINOR(__entry->dev), 928 (unsigned long long)__entry->olddir, 929 __get_str(oldname), 930 MAJOR(__entry->dev), MINOR(__entry->dev), 931 (unsigned long long)__entry->newdir, 932 __get_str(newname) 933 ) 934 ); 935 936 DECLARE_EVENT_CLASS(nfs4_inode_event, 937 TP_PROTO( 938 const struct inode *inode, 939 int error 940 ), 941 942 TP_ARGS(inode, error), 943 944 TP_STRUCT__entry( 945 __field(dev_t, dev) 946 __field(u32, fhandle) 947 __field(u64, fileid) 948 __field(int, error) 949 ), 950 951 TP_fast_assign( 952 __entry->dev = inode->i_sb->s_dev; 953 __entry->fileid = NFS_FILEID(inode); 954 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 955 __entry->error = error; 956 ), 957 958 TP_printk( 959 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x", 960 __entry->error, 961 show_nfsv4_errors(__entry->error), 962 MAJOR(__entry->dev), MINOR(__entry->dev), 963 (unsigned long long)__entry->fileid, 964 __entry->fhandle 965 ) 966 ); 967 968 #define DEFINE_NFS4_INODE_EVENT(name) \ 969 DEFINE_EVENT(nfs4_inode_event, name, \ 970 TP_PROTO( \ 971 const struct inode *inode, \ 972 int error \ 973 ), \ 974 TP_ARGS(inode, error)) 975 976 DEFINE_NFS4_INODE_EVENT(nfs4_access); 977 DEFINE_NFS4_INODE_EVENT(nfs4_readlink); 978 DEFINE_NFS4_INODE_EVENT(nfs4_readdir); 979 DEFINE_NFS4_INODE_EVENT(nfs4_get_acl); 980 DEFINE_NFS4_INODE_EVENT(nfs4_set_acl); 981 #ifdef CONFIG_NFS_V4_SECURITY_LABEL 982 DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label); 983 DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label); 984 #endif /* CONFIG_NFS_V4_SECURITY_LABEL */ 985 DEFINE_NFS4_INODE_EVENT(nfs4_recall_delegation); 986 987 DECLARE_EVENT_CLASS(nfs4_inode_stateid_event, 988 TP_PROTO( 989 const struct inode *inode, 990 const nfs4_stateid *stateid, 991 int error 992 ), 993 994 TP_ARGS(inode, stateid, error), 995 996 TP_STRUCT__entry( 997 __field(dev_t, dev) 998 __field(u32, fhandle) 999 __field(u64, fileid) 1000 __field(int, error) 1001 __field(int, stateid_seq) 1002 __field(u32, stateid_hash) 1003 ), 1004 1005 TP_fast_assign( 1006 __entry->dev = inode->i_sb->s_dev; 1007 __entry->fileid = NFS_FILEID(inode); 1008 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1009 __entry->error = error; 1010 __entry->stateid_seq = 1011 be32_to_cpu(stateid->seqid); 1012 __entry->stateid_hash = 1013 nfs_stateid_hash(stateid); 1014 ), 1015 1016 TP_printk( 1017 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1018 "stateid=%d:0x%08x", 1019 __entry->error, 1020 show_nfsv4_errors(__entry->error), 1021 MAJOR(__entry->dev), MINOR(__entry->dev), 1022 (unsigned long long)__entry->fileid, 1023 __entry->fhandle, 1024 __entry->stateid_seq, __entry->stateid_hash 1025 ) 1026 ); 1027 1028 #define DEFINE_NFS4_INODE_STATEID_EVENT(name) \ 1029 DEFINE_EVENT(nfs4_inode_stateid_event, name, \ 1030 TP_PROTO( \ 1031 const struct inode *inode, \ 1032 const nfs4_stateid *stateid, \ 1033 int error \ 1034 ), \ 1035 TP_ARGS(inode, stateid, error)) 1036 1037 DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr); 1038 DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn); 1039 1040 DECLARE_EVENT_CLASS(nfs4_getattr_event, 1041 TP_PROTO( 1042 const struct nfs_server *server, 1043 const struct nfs_fh *fhandle, 1044 const struct nfs_fattr *fattr, 1045 int error 1046 ), 1047 1048 TP_ARGS(server, fhandle, fattr, error), 1049 1050 TP_STRUCT__entry( 1051 __field(dev_t, dev) 1052 __field(u32, fhandle) 1053 __field(u64, fileid) 1054 __field(unsigned int, valid) 1055 __field(int, error) 1056 ), 1057 1058 TP_fast_assign( 1059 __entry->dev = server->s_dev; 1060 __entry->valid = fattr->valid; 1061 __entry->fhandle = nfs_fhandle_hash(fhandle); 1062 __entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0; 1063 __entry->error = error; 1064 ), 1065 1066 TP_printk( 1067 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1068 "valid=%s", 1069 __entry->error, 1070 show_nfsv4_errors(__entry->error), 1071 MAJOR(__entry->dev), MINOR(__entry->dev), 1072 (unsigned long long)__entry->fileid, 1073 __entry->fhandle, 1074 show_nfs_fattr_flags(__entry->valid) 1075 ) 1076 ); 1077 1078 #define DEFINE_NFS4_GETATTR_EVENT(name) \ 1079 DEFINE_EVENT(nfs4_getattr_event, name, \ 1080 TP_PROTO( \ 1081 const struct nfs_server *server, \ 1082 const struct nfs_fh *fhandle, \ 1083 const struct nfs_fattr *fattr, \ 1084 int error \ 1085 ), \ 1086 TP_ARGS(server, fhandle, fattr, error)) 1087 DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr); 1088 DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root); 1089 DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo); 1090 1091 DECLARE_EVENT_CLASS(nfs4_inode_callback_event, 1092 TP_PROTO( 1093 const struct nfs_client *clp, 1094 const struct nfs_fh *fhandle, 1095 const struct inode *inode, 1096 int error 1097 ), 1098 1099 TP_ARGS(clp, fhandle, inode, error), 1100 1101 TP_STRUCT__entry( 1102 __field(int, error) 1103 __field(dev_t, dev) 1104 __field(u32, fhandle) 1105 __field(u64, fileid) 1106 __string(dstaddr, clp ? 1107 rpc_peeraddr2str(clp->cl_rpcclient, 1108 RPC_DISPLAY_ADDR) : "unknown") 1109 ), 1110 1111 TP_fast_assign( 1112 __entry->error = error; 1113 __entry->fhandle = nfs_fhandle_hash(fhandle); 1114 if (inode != NULL) { 1115 __entry->fileid = NFS_FILEID(inode); 1116 __entry->dev = inode->i_sb->s_dev; 1117 } else { 1118 __entry->fileid = 0; 1119 __entry->dev = 0; 1120 } 1121 __assign_str(dstaddr, clp ? 1122 rpc_peeraddr2str(clp->cl_rpcclient, 1123 RPC_DISPLAY_ADDR) : "unknown") 1124 ), 1125 1126 TP_printk( 1127 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1128 "dstaddr=%s", 1129 __entry->error, 1130 show_nfsv4_errors(__entry->error), 1131 MAJOR(__entry->dev), MINOR(__entry->dev), 1132 (unsigned long long)__entry->fileid, 1133 __entry->fhandle, 1134 __get_str(dstaddr) 1135 ) 1136 ); 1137 1138 #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \ 1139 DEFINE_EVENT(nfs4_inode_callback_event, name, \ 1140 TP_PROTO( \ 1141 const struct nfs_client *clp, \ 1142 const struct nfs_fh *fhandle, \ 1143 const struct inode *inode, \ 1144 int error \ 1145 ), \ 1146 TP_ARGS(clp, fhandle, inode, error)) 1147 DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr); 1148 DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_layoutrecall_inode); 1149 1150 1151 DECLARE_EVENT_CLASS(nfs4_idmap_event, 1152 TP_PROTO( 1153 const char *name, 1154 int len, 1155 u32 id, 1156 int error 1157 ), 1158 1159 TP_ARGS(name, len, id, error), 1160 1161 TP_STRUCT__entry( 1162 __field(int, error) 1163 __field(u32, id) 1164 __dynamic_array(char, name, len > 0 ? len + 1 : 1) 1165 ), 1166 1167 TP_fast_assign( 1168 if (len < 0) 1169 len = 0; 1170 __entry->error = error < 0 ? error : 0; 1171 __entry->id = id; 1172 memcpy(__get_dynamic_array(name), name, len); 1173 ((char *)__get_dynamic_array(name))[len] = 0; 1174 ), 1175 1176 TP_printk( 1177 "error=%d id=%u name=%s", 1178 __entry->error, 1179 __entry->id, 1180 __get_str(name) 1181 ) 1182 ); 1183 #define DEFINE_NFS4_IDMAP_EVENT(name) \ 1184 DEFINE_EVENT(nfs4_idmap_event, name, \ 1185 TP_PROTO( \ 1186 const char *name, \ 1187 int len, \ 1188 u32 id, \ 1189 int error \ 1190 ), \ 1191 TP_ARGS(name, len, id, error)) 1192 DEFINE_NFS4_IDMAP_EVENT(nfs4_map_name_to_uid); 1193 DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid); 1194 DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name); 1195 DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); 1196 1197 DECLARE_EVENT_CLASS(nfs4_read_event, 1198 TP_PROTO( 1199 const struct nfs_pgio_header *hdr, 1200 int error 1201 ), 1202 1203 TP_ARGS(hdr, error), 1204 1205 TP_STRUCT__entry( 1206 __field(dev_t, dev) 1207 __field(u32, fhandle) 1208 __field(u64, fileid) 1209 __field(loff_t, offset) 1210 __field(size_t, count) 1211 __field(int, error) 1212 __field(int, stateid_seq) 1213 __field(u32, stateid_hash) 1214 ), 1215 1216 TP_fast_assign( 1217 const struct inode *inode = hdr->inode; 1218 const struct nfs4_state *state = 1219 hdr->args.context->state; 1220 __entry->dev = inode->i_sb->s_dev; 1221 __entry->fileid = NFS_FILEID(inode); 1222 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1223 __entry->offset = hdr->args.offset; 1224 __entry->count = hdr->args.count; 1225 __entry->error = error; 1226 __entry->stateid_seq = 1227 be32_to_cpu(state->stateid.seqid); 1228 __entry->stateid_hash = 1229 nfs_stateid_hash(&state->stateid); 1230 ), 1231 1232 TP_printk( 1233 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1234 "offset=%lld count=%zu stateid=%d:0x%08x", 1235 __entry->error, 1236 show_nfsv4_errors(__entry->error), 1237 MAJOR(__entry->dev), MINOR(__entry->dev), 1238 (unsigned long long)__entry->fileid, 1239 __entry->fhandle, 1240 (long long)__entry->offset, 1241 __entry->count, 1242 __entry->stateid_seq, __entry->stateid_hash 1243 ) 1244 ); 1245 #define DEFINE_NFS4_READ_EVENT(name) \ 1246 DEFINE_EVENT(nfs4_read_event, name, \ 1247 TP_PROTO( \ 1248 const struct nfs_pgio_header *hdr, \ 1249 int error \ 1250 ), \ 1251 TP_ARGS(hdr, error)) 1252 DEFINE_NFS4_READ_EVENT(nfs4_read); 1253 #ifdef CONFIG_NFS_V4_1 1254 DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read); 1255 #endif /* CONFIG_NFS_V4_1 */ 1256 1257 DECLARE_EVENT_CLASS(nfs4_write_event, 1258 TP_PROTO( 1259 const struct nfs_pgio_header *hdr, 1260 int error 1261 ), 1262 1263 TP_ARGS(hdr, error), 1264 1265 TP_STRUCT__entry( 1266 __field(dev_t, dev) 1267 __field(u32, fhandle) 1268 __field(u64, fileid) 1269 __field(loff_t, offset) 1270 __field(size_t, count) 1271 __field(int, error) 1272 __field(int, stateid_seq) 1273 __field(u32, stateid_hash) 1274 ), 1275 1276 TP_fast_assign( 1277 const struct inode *inode = hdr->inode; 1278 const struct nfs4_state *state = 1279 hdr->args.context->state; 1280 __entry->dev = inode->i_sb->s_dev; 1281 __entry->fileid = NFS_FILEID(inode); 1282 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1283 __entry->offset = hdr->args.offset; 1284 __entry->count = hdr->args.count; 1285 __entry->error = error; 1286 __entry->stateid_seq = 1287 be32_to_cpu(state->stateid.seqid); 1288 __entry->stateid_hash = 1289 nfs_stateid_hash(&state->stateid); 1290 ), 1291 1292 TP_printk( 1293 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1294 "offset=%lld count=%zu stateid=%d:0x%08x", 1295 __entry->error, 1296 show_nfsv4_errors(__entry->error), 1297 MAJOR(__entry->dev), MINOR(__entry->dev), 1298 (unsigned long long)__entry->fileid, 1299 __entry->fhandle, 1300 (long long)__entry->offset, 1301 __entry->count, 1302 __entry->stateid_seq, __entry->stateid_hash 1303 ) 1304 ); 1305 1306 #define DEFINE_NFS4_WRITE_EVENT(name) \ 1307 DEFINE_EVENT(nfs4_write_event, name, \ 1308 TP_PROTO( \ 1309 const struct nfs_pgio_header *hdr, \ 1310 int error \ 1311 ), \ 1312 TP_ARGS(hdr, error)) 1313 DEFINE_NFS4_WRITE_EVENT(nfs4_write); 1314 #ifdef CONFIG_NFS_V4_1 1315 DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write); 1316 #endif /* CONFIG_NFS_V4_1 */ 1317 1318 DECLARE_EVENT_CLASS(nfs4_commit_event, 1319 TP_PROTO( 1320 const struct nfs_commit_data *data, 1321 int error 1322 ), 1323 1324 TP_ARGS(data, error), 1325 1326 TP_STRUCT__entry( 1327 __field(dev_t, dev) 1328 __field(u32, fhandle) 1329 __field(u64, fileid) 1330 __field(loff_t, offset) 1331 __field(size_t, count) 1332 __field(int, error) 1333 ), 1334 1335 TP_fast_assign( 1336 const struct inode *inode = data->inode; 1337 __entry->dev = inode->i_sb->s_dev; 1338 __entry->fileid = NFS_FILEID(inode); 1339 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1340 __entry->offset = data->args.offset; 1341 __entry->count = data->args.count; 1342 __entry->error = error; 1343 ), 1344 1345 TP_printk( 1346 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1347 "offset=%lld count=%zu", 1348 __entry->error, 1349 show_nfsv4_errors(__entry->error), 1350 MAJOR(__entry->dev), MINOR(__entry->dev), 1351 (unsigned long long)__entry->fileid, 1352 __entry->fhandle, 1353 (long long)__entry->offset, 1354 __entry->count 1355 ) 1356 ); 1357 #define DEFINE_NFS4_COMMIT_EVENT(name) \ 1358 DEFINE_EVENT(nfs4_commit_event, name, \ 1359 TP_PROTO( \ 1360 const struct nfs_commit_data *data, \ 1361 int error \ 1362 ), \ 1363 TP_ARGS(data, error)) 1364 DEFINE_NFS4_COMMIT_EVENT(nfs4_commit); 1365 #ifdef CONFIG_NFS_V4_1 1366 DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds); 1367 1368 #define show_pnfs_iomode(iomode) \ 1369 __print_symbolic(iomode, \ 1370 { IOMODE_READ, "READ" }, \ 1371 { IOMODE_RW, "RW" }, \ 1372 { IOMODE_ANY, "ANY" }) 1373 1374 TRACE_EVENT(nfs4_layoutget, 1375 TP_PROTO( 1376 const struct nfs_open_context *ctx, 1377 const struct pnfs_layout_range *args, 1378 const struct pnfs_layout_range *res, 1379 const nfs4_stateid *layout_stateid, 1380 int error 1381 ), 1382 1383 TP_ARGS(ctx, args, res, layout_stateid, error), 1384 1385 TP_STRUCT__entry( 1386 __field(dev_t, dev) 1387 __field(u32, fhandle) 1388 __field(u64, fileid) 1389 __field(u32, iomode) 1390 __field(u64, offset) 1391 __field(u64, count) 1392 __field(int, error) 1393 __field(int, stateid_seq) 1394 __field(u32, stateid_hash) 1395 __field(int, layoutstateid_seq) 1396 __field(u32, layoutstateid_hash) 1397 ), 1398 1399 TP_fast_assign( 1400 const struct inode *inode = d_inode(ctx->dentry); 1401 const struct nfs4_state *state = ctx->state; 1402 __entry->dev = inode->i_sb->s_dev; 1403 __entry->fileid = NFS_FILEID(inode); 1404 __entry->fhandle = nfs_fhandle_hash(NFS_FH(inode)); 1405 __entry->iomode = args->iomode; 1406 __entry->offset = args->offset; 1407 __entry->count = args->length; 1408 __entry->error = error; 1409 __entry->stateid_seq = 1410 be32_to_cpu(state->stateid.seqid); 1411 __entry->stateid_hash = 1412 nfs_stateid_hash(&state->stateid); 1413 if (!error) { 1414 __entry->layoutstateid_seq = 1415 be32_to_cpu(layout_stateid->seqid); 1416 __entry->layoutstateid_hash = 1417 nfs_stateid_hash(layout_stateid); 1418 } else { 1419 __entry->layoutstateid_seq = 0; 1420 __entry->layoutstateid_hash = 0; 1421 } 1422 ), 1423 1424 TP_printk( 1425 "error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 1426 "iomode=%s offset=%llu count=%llu stateid=%d:0x%08x " 1427 "layoutstateid=%d:0x%08x", 1428 __entry->error, 1429 show_nfsv4_errors(__entry->error), 1430 MAJOR(__entry->dev), MINOR(__entry->dev), 1431 (unsigned long long)__entry->fileid, 1432 __entry->fhandle, 1433 show_pnfs_iomode(__entry->iomode), 1434 (unsigned long long)__entry->offset, 1435 (unsigned long long)__entry->count, 1436 __entry->stateid_seq, __entry->stateid_hash, 1437 __entry->layoutstateid_seq, __entry->layoutstateid_hash 1438 ) 1439 ); 1440 1441 DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit); 1442 DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn); 1443 DEFINE_NFS4_INODE_EVENT(nfs4_layoutreturn_on_close); 1444 1445 #endif /* CONFIG_NFS_V4_1 */ 1446 1447 #endif /* _TRACE_NFS4_H */ 1448 1449 #undef TRACE_INCLUDE_PATH 1450 #define TRACE_INCLUDE_PATH . 1451 #define TRACE_INCLUDE_FILE nfs4trace 1452 /* This part must be outside protection */ 1453 #include <trace/define_trace.h> 1454