1 /* 2 * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 3 */ 4 #undef TRACE_SYSTEM 5 #define TRACE_SYSTEM nfs 6 7 #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ) 8 #define _TRACE_NFS_H 9 10 #include <linux/tracepoint.h> 11 12 #define nfs_show_file_type(ftype) \ 13 __print_symbolic(ftype, \ 14 { DT_UNKNOWN, "UNKNOWN" }, \ 15 { DT_FIFO, "FIFO" }, \ 16 { DT_CHR, "CHR" }, \ 17 { DT_DIR, "DIR" }, \ 18 { DT_BLK, "BLK" }, \ 19 { DT_REG, "REG" }, \ 20 { DT_LNK, "LNK" }, \ 21 { DT_SOCK, "SOCK" }, \ 22 { DT_WHT, "WHT" }) 23 24 #define nfs_show_cache_validity(v) \ 25 __print_flags(v, "|", \ 26 { NFS_INO_INVALID_ATTR, "INVALID_ATTR" }, \ 27 { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \ 28 { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \ 29 { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \ 30 { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \ 31 { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \ 32 { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \ 33 { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }) 34 35 #define nfs_show_nfsi_flags(v) \ 36 __print_flags(v, "|", \ 37 { 1 << NFS_INO_ADVISE_RDPLUS, "ADVISE_RDPLUS" }, \ 38 { 1 << NFS_INO_STALE, "STALE" }, \ 39 { 1 << NFS_INO_FLUSHING, "FLUSHING" }, \ 40 { 1 << NFS_INO_FSCACHE, "FSCACHE" }, \ 41 { 1 << NFS_INO_COMMIT, "COMMIT" }, \ 42 { 1 << NFS_INO_LAYOUTCOMMIT, "NEED_LAYOUTCOMMIT" }, \ 43 { 1 << NFS_INO_LAYOUTCOMMITTING, "LAYOUTCOMMIT" }) 44 45 DECLARE_EVENT_CLASS(nfs_inode_event, 46 TP_PROTO( 47 const struct inode *inode 48 ), 49 50 TP_ARGS(inode), 51 52 TP_STRUCT__entry( 53 __field(dev_t, dev) 54 __field(u32, fhandle) 55 __field(u64, fileid) 56 __field(u64, version) 57 ), 58 59 TP_fast_assign( 60 const struct nfs_inode *nfsi = NFS_I(inode); 61 __entry->dev = inode->i_sb->s_dev; 62 __entry->fileid = nfsi->fileid; 63 __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 64 __entry->version = inode->i_version; 65 ), 66 67 TP_printk( 68 "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 69 MAJOR(__entry->dev), MINOR(__entry->dev), 70 (unsigned long long)__entry->fileid, 71 __entry->fhandle, 72 (unsigned long long)__entry->version 73 ) 74 ); 75 76 DECLARE_EVENT_CLASS(nfs_inode_event_done, 77 TP_PROTO( 78 const struct inode *inode, 79 int error 80 ), 81 82 TP_ARGS(inode, error), 83 84 TP_STRUCT__entry( 85 __field(int, error) 86 __field(dev_t, dev) 87 __field(u32, fhandle) 88 __field(unsigned char, type) 89 __field(u64, fileid) 90 __field(u64, version) 91 __field(loff_t, size) 92 __field(unsigned long, nfsi_flags) 93 __field(unsigned long, cache_validity) 94 ), 95 96 TP_fast_assign( 97 const struct nfs_inode *nfsi = NFS_I(inode); 98 __entry->error = error; 99 __entry->dev = inode->i_sb->s_dev; 100 __entry->fileid = nfsi->fileid; 101 __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 102 __entry->type = nfs_umode_to_dtype(inode->i_mode); 103 __entry->version = inode->i_version; 104 __entry->size = i_size_read(inode); 105 __entry->nfsi_flags = nfsi->flags; 106 __entry->cache_validity = nfsi->cache_validity; 107 ), 108 109 TP_printk( 110 "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 111 "type=%u (%s) version=%llu size=%lld " 112 "cache_validity=%lu (%s) nfs_flags=%ld (%s)", 113 __entry->error, 114 MAJOR(__entry->dev), MINOR(__entry->dev), 115 (unsigned long long)__entry->fileid, 116 __entry->fhandle, 117 __entry->type, 118 nfs_show_file_type(__entry->type), 119 (unsigned long long)__entry->version, 120 (long long)__entry->size, 121 __entry->cache_validity, 122 nfs_show_cache_validity(__entry->cache_validity), 123 __entry->nfsi_flags, 124 nfs_show_nfsi_flags(__entry->nfsi_flags) 125 ) 126 ); 127 128 #define DEFINE_NFS_INODE_EVENT(name) \ 129 DEFINE_EVENT(nfs_inode_event, name, \ 130 TP_PROTO( \ 131 const struct inode *inode \ 132 ), \ 133 TP_ARGS(inode)) 134 #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 135 DEFINE_EVENT(nfs_inode_event_done, name, \ 136 TP_PROTO( \ 137 const struct inode *inode, \ 138 int error \ 139 ), \ 140 TP_ARGS(inode, error)) 141 DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 142 DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 143 DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 144 DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 145 DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 146 DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 147 DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 148 DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 149 DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 150 DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 151 DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter); 152 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit); 153 DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 154 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 155 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 156 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 157 DEFINE_NFS_INODE_EVENT(nfs_access_enter); 158 DEFINE_NFS_INODE_EVENT_DONE(nfs_access_exit); 159 160 #define show_lookup_flags(flags) \ 161 __print_flags((unsigned long)flags, "|", \ 162 { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \ 163 { LOOKUP_DIRECTORY, "DIRECTORY" }, \ 164 { LOOKUP_OPEN, "OPEN" }, \ 165 { LOOKUP_CREATE, "CREATE" }, \ 166 { LOOKUP_EXCL, "EXCL" }) 167 168 DECLARE_EVENT_CLASS(nfs_lookup_event, 169 TP_PROTO( 170 const struct inode *dir, 171 const struct dentry *dentry, 172 unsigned int flags 173 ), 174 175 TP_ARGS(dir, dentry, flags), 176 177 TP_STRUCT__entry( 178 __field(unsigned int, flags) 179 __field(dev_t, dev) 180 __field(u64, dir) 181 __string(name, dentry->d_name.name) 182 ), 183 184 TP_fast_assign( 185 __entry->dev = dir->i_sb->s_dev; 186 __entry->dir = NFS_FILEID(dir); 187 __entry->flags = flags; 188 __assign_str(name, dentry->d_name.name); 189 ), 190 191 TP_printk( 192 "flags=%u (%s) name=%02x:%02x:%llu/%s", 193 __entry->flags, 194 show_lookup_flags(__entry->flags), 195 MAJOR(__entry->dev), MINOR(__entry->dev), 196 (unsigned long long)__entry->dir, 197 __get_str(name) 198 ) 199 ); 200 201 #define DEFINE_NFS_LOOKUP_EVENT(name) \ 202 DEFINE_EVENT(nfs_lookup_event, name, \ 203 TP_PROTO( \ 204 const struct inode *dir, \ 205 const struct dentry *dentry, \ 206 unsigned int flags \ 207 ), \ 208 TP_ARGS(dir, dentry, flags)) 209 210 DECLARE_EVENT_CLASS(nfs_lookup_event_done, 211 TP_PROTO( 212 const struct inode *dir, 213 const struct dentry *dentry, 214 unsigned int flags, 215 int error 216 ), 217 218 TP_ARGS(dir, dentry, flags, error), 219 220 TP_STRUCT__entry( 221 __field(int, error) 222 __field(unsigned int, flags) 223 __field(dev_t, dev) 224 __field(u64, dir) 225 __string(name, dentry->d_name.name) 226 ), 227 228 TP_fast_assign( 229 __entry->dev = dir->i_sb->s_dev; 230 __entry->dir = NFS_FILEID(dir); 231 __entry->error = error; 232 __entry->flags = flags; 233 __assign_str(name, dentry->d_name.name); 234 ), 235 236 TP_printk( 237 "error=%d flags=%u (%s) name=%02x:%02x:%llu/%s", 238 __entry->error, 239 __entry->flags, 240 show_lookup_flags(__entry->flags), 241 MAJOR(__entry->dev), MINOR(__entry->dev), 242 (unsigned long long)__entry->dir, 243 __get_str(name) 244 ) 245 ); 246 247 #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 248 DEFINE_EVENT(nfs_lookup_event_done, name, \ 249 TP_PROTO( \ 250 const struct inode *dir, \ 251 const struct dentry *dentry, \ 252 unsigned int flags, \ 253 int error \ 254 ), \ 255 TP_ARGS(dir, dentry, flags, error)) 256 257 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 258 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 259 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 260 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 261 262 #define show_open_flags(flags) \ 263 __print_flags((unsigned long)flags, "|", \ 264 { O_CREAT, "O_CREAT" }, \ 265 { O_EXCL, "O_EXCL" }, \ 266 { O_TRUNC, "O_TRUNC" }, \ 267 { O_APPEND, "O_APPEND" }, \ 268 { O_DSYNC, "O_DSYNC" }, \ 269 { O_DIRECT, "O_DIRECT" }, \ 270 { O_DIRECTORY, "O_DIRECTORY" }) 271 272 #define show_fmode_flags(mode) \ 273 __print_flags(mode, "|", \ 274 { ((__force unsigned long)FMODE_READ), "READ" }, \ 275 { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \ 276 { ((__force unsigned long)FMODE_EXEC), "EXEC" }) 277 278 TRACE_EVENT(nfs_atomic_open_enter, 279 TP_PROTO( 280 const struct inode *dir, 281 const struct nfs_open_context *ctx, 282 unsigned int flags 283 ), 284 285 TP_ARGS(dir, ctx, flags), 286 287 TP_STRUCT__entry( 288 __field(unsigned int, flags) 289 __field(unsigned int, fmode) 290 __field(dev_t, dev) 291 __field(u64, dir) 292 __string(name, ctx->dentry->d_name.name) 293 ), 294 295 TP_fast_assign( 296 __entry->dev = dir->i_sb->s_dev; 297 __entry->dir = NFS_FILEID(dir); 298 __entry->flags = flags; 299 __entry->fmode = (__force unsigned int)ctx->mode; 300 __assign_str(name, ctx->dentry->d_name.name); 301 ), 302 303 TP_printk( 304 "flags=%u (%s) fmode=%s name=%02x:%02x:%llu/%s", 305 __entry->flags, 306 show_open_flags(__entry->flags), 307 show_fmode_flags(__entry->fmode), 308 MAJOR(__entry->dev), MINOR(__entry->dev), 309 (unsigned long long)__entry->dir, 310 __get_str(name) 311 ) 312 ); 313 314 TRACE_EVENT(nfs_atomic_open_exit, 315 TP_PROTO( 316 const struct inode *dir, 317 const struct nfs_open_context *ctx, 318 unsigned int flags, 319 int error 320 ), 321 322 TP_ARGS(dir, ctx, flags, error), 323 324 TP_STRUCT__entry( 325 __field(int, error) 326 __field(unsigned int, flags) 327 __field(unsigned int, fmode) 328 __field(dev_t, dev) 329 __field(u64, dir) 330 __string(name, ctx->dentry->d_name.name) 331 ), 332 333 TP_fast_assign( 334 __entry->error = error; 335 __entry->dev = dir->i_sb->s_dev; 336 __entry->dir = NFS_FILEID(dir); 337 __entry->flags = flags; 338 __entry->fmode = (__force unsigned int)ctx->mode; 339 __assign_str(name, ctx->dentry->d_name.name); 340 ), 341 342 TP_printk( 343 "error=%d flags=%u (%s) fmode=%s " 344 "name=%02x:%02x:%llu/%s", 345 __entry->error, 346 __entry->flags, 347 show_open_flags(__entry->flags), 348 show_fmode_flags(__entry->fmode), 349 MAJOR(__entry->dev), MINOR(__entry->dev), 350 (unsigned long long)__entry->dir, 351 __get_str(name) 352 ) 353 ); 354 355 TRACE_EVENT(nfs_create_enter, 356 TP_PROTO( 357 const struct inode *dir, 358 const struct dentry *dentry, 359 unsigned int flags 360 ), 361 362 TP_ARGS(dir, dentry, flags), 363 364 TP_STRUCT__entry( 365 __field(unsigned int, flags) 366 __field(dev_t, dev) 367 __field(u64, dir) 368 __string(name, dentry->d_name.name) 369 ), 370 371 TP_fast_assign( 372 __entry->dev = dir->i_sb->s_dev; 373 __entry->dir = NFS_FILEID(dir); 374 __entry->flags = flags; 375 __assign_str(name, dentry->d_name.name); 376 ), 377 378 TP_printk( 379 "flags=%u (%s) name=%02x:%02x:%llu/%s", 380 __entry->flags, 381 show_open_flags(__entry->flags), 382 MAJOR(__entry->dev), MINOR(__entry->dev), 383 (unsigned long long)__entry->dir, 384 __get_str(name) 385 ) 386 ); 387 388 TRACE_EVENT(nfs_create_exit, 389 TP_PROTO( 390 const struct inode *dir, 391 const struct dentry *dentry, 392 unsigned int flags, 393 int error 394 ), 395 396 TP_ARGS(dir, dentry, flags, error), 397 398 TP_STRUCT__entry( 399 __field(int, error) 400 __field(unsigned int, flags) 401 __field(dev_t, dev) 402 __field(u64, dir) 403 __string(name, dentry->d_name.name) 404 ), 405 406 TP_fast_assign( 407 __entry->error = error; 408 __entry->dev = dir->i_sb->s_dev; 409 __entry->dir = NFS_FILEID(dir); 410 __entry->flags = flags; 411 __assign_str(name, dentry->d_name.name); 412 ), 413 414 TP_printk( 415 "error=%d flags=%u (%s) name=%02x:%02x:%llu/%s", 416 __entry->error, 417 __entry->flags, 418 show_open_flags(__entry->flags), 419 MAJOR(__entry->dev), MINOR(__entry->dev), 420 (unsigned long long)__entry->dir, 421 __get_str(name) 422 ) 423 ); 424 425 DECLARE_EVENT_CLASS(nfs_directory_event, 426 TP_PROTO( 427 const struct inode *dir, 428 const struct dentry *dentry 429 ), 430 431 TP_ARGS(dir, dentry), 432 433 TP_STRUCT__entry( 434 __field(dev_t, dev) 435 __field(u64, dir) 436 __string(name, dentry->d_name.name) 437 ), 438 439 TP_fast_assign( 440 __entry->dev = dir->i_sb->s_dev; 441 __entry->dir = NFS_FILEID(dir); 442 __assign_str(name, dentry->d_name.name); 443 ), 444 445 TP_printk( 446 "name=%02x:%02x:%llu/%s", 447 MAJOR(__entry->dev), MINOR(__entry->dev), 448 (unsigned long long)__entry->dir, 449 __get_str(name) 450 ) 451 ); 452 453 #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 454 DEFINE_EVENT(nfs_directory_event, name, \ 455 TP_PROTO( \ 456 const struct inode *dir, \ 457 const struct dentry *dentry \ 458 ), \ 459 TP_ARGS(dir, dentry)) 460 461 DECLARE_EVENT_CLASS(nfs_directory_event_done, 462 TP_PROTO( 463 const struct inode *dir, 464 const struct dentry *dentry, 465 int error 466 ), 467 468 TP_ARGS(dir, dentry, error), 469 470 TP_STRUCT__entry( 471 __field(int, error) 472 __field(dev_t, dev) 473 __field(u64, dir) 474 __string(name, dentry->d_name.name) 475 ), 476 477 TP_fast_assign( 478 __entry->dev = dir->i_sb->s_dev; 479 __entry->dir = NFS_FILEID(dir); 480 __entry->error = error; 481 __assign_str(name, dentry->d_name.name); 482 ), 483 484 TP_printk( 485 "error=%d name=%02x:%02x:%llu/%s", 486 __entry->error, 487 MAJOR(__entry->dev), MINOR(__entry->dev), 488 (unsigned long long)__entry->dir, 489 __get_str(name) 490 ) 491 ); 492 493 #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 494 DEFINE_EVENT(nfs_directory_event_done, name, \ 495 TP_PROTO( \ 496 const struct inode *dir, \ 497 const struct dentry *dentry, \ 498 int error \ 499 ), \ 500 TP_ARGS(dir, dentry, error)) 501 502 DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 503 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 504 DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 505 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 506 DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 507 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 508 DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 509 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 510 DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 511 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 512 DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 513 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 514 515 DECLARE_EVENT_CLASS(nfs_rename_event, 516 TP_PROTO( 517 const struct inode *old_dir, 518 const struct dentry *old_dentry, 519 const struct inode *new_dir, 520 const struct dentry *new_dentry 521 ), 522 523 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 524 525 TP_STRUCT__entry( 526 __field(dev_t, dev) 527 __field(u64, old_dir) 528 __field(u64, new_dir) 529 __string(old_name, old_dentry->d_name.name) 530 __string(new_name, new_dentry->d_name.name) 531 ), 532 533 TP_fast_assign( 534 __entry->dev = old_dir->i_sb->s_dev; 535 __entry->old_dir = NFS_FILEID(old_dir); 536 __entry->new_dir = NFS_FILEID(new_dir); 537 __assign_str(old_name, old_dentry->d_name.name); 538 __assign_str(new_name, new_dentry->d_name.name); 539 ), 540 541 TP_printk( 542 "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 543 MAJOR(__entry->dev), MINOR(__entry->dev), 544 (unsigned long long)__entry->old_dir, 545 __get_str(old_name), 546 MAJOR(__entry->dev), MINOR(__entry->dev), 547 (unsigned long long)__entry->new_dir, 548 __get_str(new_name) 549 ) 550 ); 551 #define DEFINE_NFS_RENAME_EVENT(name) \ 552 DEFINE_EVENT(nfs_rename_event, name, \ 553 TP_PROTO( \ 554 const struct inode *old_dir, \ 555 const struct dentry *old_dentry, \ 556 const struct inode *new_dir, \ 557 const struct dentry *new_dentry \ 558 ), \ 559 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 560 561 DECLARE_EVENT_CLASS(nfs_rename_event_done, 562 TP_PROTO( 563 const struct inode *old_dir, 564 const struct dentry *old_dentry, 565 const struct inode *new_dir, 566 const struct dentry *new_dentry, 567 int error 568 ), 569 570 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 571 572 TP_STRUCT__entry( 573 __field(dev_t, dev) 574 __field(int, error) 575 __field(u64, old_dir) 576 __string(old_name, old_dentry->d_name.name) 577 __field(u64, new_dir) 578 __string(new_name, new_dentry->d_name.name) 579 ), 580 581 TP_fast_assign( 582 __entry->dev = old_dir->i_sb->s_dev; 583 __entry->old_dir = NFS_FILEID(old_dir); 584 __entry->new_dir = NFS_FILEID(new_dir); 585 __entry->error = error; 586 __assign_str(old_name, old_dentry->d_name.name); 587 __assign_str(new_name, new_dentry->d_name.name); 588 ), 589 590 TP_printk( 591 "error=%d old_name=%02x:%02x:%llu/%s " 592 "new_name=%02x:%02x:%llu/%s", 593 __entry->error, 594 MAJOR(__entry->dev), MINOR(__entry->dev), 595 (unsigned long long)__entry->old_dir, 596 __get_str(old_name), 597 MAJOR(__entry->dev), MINOR(__entry->dev), 598 (unsigned long long)__entry->new_dir, 599 __get_str(new_name) 600 ) 601 ); 602 #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 603 DEFINE_EVENT(nfs_rename_event_done, name, \ 604 TP_PROTO( \ 605 const struct inode *old_dir, \ 606 const struct dentry *old_dentry, \ 607 const struct inode *new_dir, \ 608 const struct dentry *new_dentry, \ 609 int error \ 610 ), \ 611 TP_ARGS(old_dir, old_dentry, new_dir, \ 612 new_dentry, error)) 613 614 DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 615 DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 616 617 DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 618 619 TRACE_EVENT(nfs_sillyrename_unlink, 620 TP_PROTO( 621 const struct nfs_unlinkdata *data, 622 int error 623 ), 624 625 TP_ARGS(data, error), 626 627 TP_STRUCT__entry( 628 __field(dev_t, dev) 629 __field(int, error) 630 __field(u64, dir) 631 __dynamic_array(char, name, data->args.name.len + 1) 632 ), 633 634 TP_fast_assign( 635 struct inode *dir = data->dir; 636 size_t len = data->args.name.len; 637 __entry->dev = dir->i_sb->s_dev; 638 __entry->dir = NFS_FILEID(dir); 639 __entry->error = error; 640 memcpy(__get_dynamic_array(name), 641 data->args.name.name, len); 642 ((char *)__get_dynamic_array(name))[len] = 0; 643 ), 644 645 TP_printk( 646 "error=%d name=%02x:%02x:%llu/%s", 647 __entry->error, 648 MAJOR(__entry->dev), MINOR(__entry->dev), 649 (unsigned long long)__entry->dir, 650 __get_str(name) 651 ) 652 ); 653 #endif /* _TRACE_NFS_H */ 654 655 #undef TRACE_INCLUDE_PATH 656 #define TRACE_INCLUDE_PATH . 657 #define TRACE_INCLUDE_FILE nfstrace 658 /* This part must be outside protection */ 659 #include <trace/define_trace.h> 660