root/fs/nfs/nfstrace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
   4  */
   5 #undef TRACE_SYSTEM
   6 #define TRACE_SYSTEM nfs
   7 
   8 #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ)
   9 #define _TRACE_NFS_H
  10 
  11 #include <linux/tracepoint.h>
  12 #include <linux/iversion.h>
  13 
  14 TRACE_DEFINE_ENUM(DT_UNKNOWN);
  15 TRACE_DEFINE_ENUM(DT_FIFO);
  16 TRACE_DEFINE_ENUM(DT_CHR);
  17 TRACE_DEFINE_ENUM(DT_DIR);
  18 TRACE_DEFINE_ENUM(DT_BLK);
  19 TRACE_DEFINE_ENUM(DT_REG);
  20 TRACE_DEFINE_ENUM(DT_LNK);
  21 TRACE_DEFINE_ENUM(DT_SOCK);
  22 TRACE_DEFINE_ENUM(DT_WHT);
  23 
  24 #define nfs_show_file_type(ftype) \
  25         __print_symbolic(ftype, \
  26                         { DT_UNKNOWN, "UNKNOWN" }, \
  27                         { DT_FIFO, "FIFO" }, \
  28                         { DT_CHR, "CHR" }, \
  29                         { DT_DIR, "DIR" }, \
  30                         { DT_BLK, "BLK" }, \
  31                         { DT_REG, "REG" }, \
  32                         { DT_LNK, "LNK" }, \
  33                         { DT_SOCK, "SOCK" }, \
  34                         { DT_WHT, "WHT" })
  35 
  36 TRACE_DEFINE_ENUM(NFS_INO_INVALID_DATA);
  37 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ATIME);
  38 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACCESS);
  39 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACL);
  40 TRACE_DEFINE_ENUM(NFS_INO_REVAL_PAGECACHE);
  41 TRACE_DEFINE_ENUM(NFS_INO_REVAL_FORCED);
  42 TRACE_DEFINE_ENUM(NFS_INO_INVALID_LABEL);
  43 TRACE_DEFINE_ENUM(NFS_INO_INVALID_CHANGE);
  44 TRACE_DEFINE_ENUM(NFS_INO_INVALID_CTIME);
  45 TRACE_DEFINE_ENUM(NFS_INO_INVALID_MTIME);
  46 TRACE_DEFINE_ENUM(NFS_INO_INVALID_SIZE);
  47 TRACE_DEFINE_ENUM(NFS_INO_INVALID_OTHER);
  48 
  49 #define nfs_show_cache_validity(v) \
  50         __print_flags(v, "|", \
  51                         { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \
  52                         { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \
  53                         { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \
  54                         { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \
  55                         { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \
  56                         { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
  57                         { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
  58                         { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
  59                         { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
  60                         { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
  61                         { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
  62                         { NFS_INO_INVALID_OTHER, "INVALID_OTHER" })
  63 
  64 TRACE_DEFINE_ENUM(NFS_INO_ADVISE_RDPLUS);
  65 TRACE_DEFINE_ENUM(NFS_INO_STALE);
  66 TRACE_DEFINE_ENUM(NFS_INO_ACL_LRU_SET);
  67 TRACE_DEFINE_ENUM(NFS_INO_INVALIDATING);
  68 TRACE_DEFINE_ENUM(NFS_INO_FSCACHE);
  69 TRACE_DEFINE_ENUM(NFS_INO_FSCACHE_LOCK);
  70 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMIT);
  71 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMITTING);
  72 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTSTATS);
  73 TRACE_DEFINE_ENUM(NFS_INO_ODIRECT);
  74 
  75 #define nfs_show_nfsi_flags(v) \
  76         __print_flags(v, "|", \
  77                         { BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \
  78                         { BIT(NFS_INO_STALE), "STALE" }, \
  79                         { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
  80                         { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
  81                         { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \
  82                         { BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \
  83                         { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
  84                         { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
  85                         { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
  86                         { BIT(NFS_INO_ODIRECT), "ODIRECT" })
  87 
  88 DECLARE_EVENT_CLASS(nfs_inode_event,
  89                 TP_PROTO(
  90                         const struct inode *inode
  91                 ),
  92 
  93                 TP_ARGS(inode),
  94 
  95                 TP_STRUCT__entry(
  96                         __field(dev_t, dev)
  97                         __field(u32, fhandle)
  98                         __field(u64, fileid)
  99                         __field(u64, version)
 100                 ),
 101 
 102                 TP_fast_assign(
 103                         const struct nfs_inode *nfsi = NFS_I(inode);
 104                         __entry->dev = inode->i_sb->s_dev;
 105                         __entry->fileid = nfsi->fileid;
 106                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 107                         __entry->version = inode_peek_iversion_raw(inode);
 108                 ),
 109 
 110                 TP_printk(
 111                         "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ",
 112                         MAJOR(__entry->dev), MINOR(__entry->dev),
 113                         (unsigned long long)__entry->fileid,
 114                         __entry->fhandle,
 115                         (unsigned long long)__entry->version
 116                 )
 117 );
 118 
 119 DECLARE_EVENT_CLASS(nfs_inode_event_done,
 120                 TP_PROTO(
 121                         const struct inode *inode,
 122                         int error
 123                 ),
 124 
 125                 TP_ARGS(inode, error),
 126 
 127                 TP_STRUCT__entry(
 128                         __field(unsigned long, error)
 129                         __field(dev_t, dev)
 130                         __field(u32, fhandle)
 131                         __field(unsigned char, type)
 132                         __field(u64, fileid)
 133                         __field(u64, version)
 134                         __field(loff_t, size)
 135                         __field(unsigned long, nfsi_flags)
 136                         __field(unsigned long, cache_validity)
 137                 ),
 138 
 139                 TP_fast_assign(
 140                         const struct nfs_inode *nfsi = NFS_I(inode);
 141                         __entry->error = error < 0 ? -error : 0;
 142                         __entry->dev = inode->i_sb->s_dev;
 143                         __entry->fileid = nfsi->fileid;
 144                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 145                         __entry->type = nfs_umode_to_dtype(inode->i_mode);
 146                         __entry->version = inode_peek_iversion_raw(inode);
 147                         __entry->size = i_size_read(inode);
 148                         __entry->nfsi_flags = nfsi->flags;
 149                         __entry->cache_validity = nfsi->cache_validity;
 150                 ),
 151 
 152                 TP_printk(
 153                         "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 154                         "type=%u (%s) version=%llu size=%lld "
 155                         "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
 156                         -__entry->error, nfs_show_status(__entry->error),
 157                         MAJOR(__entry->dev), MINOR(__entry->dev),
 158                         (unsigned long long)__entry->fileid,
 159                         __entry->fhandle,
 160                         __entry->type,
 161                         nfs_show_file_type(__entry->type),
 162                         (unsigned long long)__entry->version,
 163                         (long long)__entry->size,
 164                         __entry->cache_validity,
 165                         nfs_show_cache_validity(__entry->cache_validity),
 166                         __entry->nfsi_flags,
 167                         nfs_show_nfsi_flags(__entry->nfsi_flags)
 168                 )
 169 );
 170 
 171 #define DEFINE_NFS_INODE_EVENT(name) \
 172         DEFINE_EVENT(nfs_inode_event, name, \
 173                         TP_PROTO( \
 174                                 const struct inode *inode \
 175                         ), \
 176                         TP_ARGS(inode))
 177 #define DEFINE_NFS_INODE_EVENT_DONE(name) \
 178         DEFINE_EVENT(nfs_inode_event_done, name, \
 179                         TP_PROTO( \
 180                                 const struct inode *inode, \
 181                                 int error \
 182                         ), \
 183                         TP_ARGS(inode, error))
 184 DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
 185 DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
 186 DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
 187 DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
 188 DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
 189 DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
 190 DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
 191 DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
 192 DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
 193 DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
 194 DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter);
 195 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit);
 196 DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
 197 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
 198 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
 199 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
 200 DEFINE_NFS_INODE_EVENT(nfs_access_enter);
 201 DEFINE_NFS_INODE_EVENT_DONE(nfs_access_exit);
 202 
 203 TRACE_DEFINE_ENUM(LOOKUP_FOLLOW);
 204 TRACE_DEFINE_ENUM(LOOKUP_DIRECTORY);
 205 TRACE_DEFINE_ENUM(LOOKUP_AUTOMOUNT);
 206 TRACE_DEFINE_ENUM(LOOKUP_PARENT);
 207 TRACE_DEFINE_ENUM(LOOKUP_REVAL);
 208 TRACE_DEFINE_ENUM(LOOKUP_RCU);
 209 TRACE_DEFINE_ENUM(LOOKUP_NO_REVAL);
 210 TRACE_DEFINE_ENUM(LOOKUP_OPEN);
 211 TRACE_DEFINE_ENUM(LOOKUP_CREATE);
 212 TRACE_DEFINE_ENUM(LOOKUP_EXCL);
 213 TRACE_DEFINE_ENUM(LOOKUP_RENAME_TARGET);
 214 TRACE_DEFINE_ENUM(LOOKUP_JUMPED);
 215 TRACE_DEFINE_ENUM(LOOKUP_ROOT);
 216 TRACE_DEFINE_ENUM(LOOKUP_EMPTY);
 217 TRACE_DEFINE_ENUM(LOOKUP_DOWN);
 218 
 219 #define show_lookup_flags(flags) \
 220         __print_flags(flags, "|", \
 221                         { LOOKUP_FOLLOW, "FOLLOW" }, \
 222                         { LOOKUP_DIRECTORY, "DIRECTORY" }, \
 223                         { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \
 224                         { LOOKUP_PARENT, "PARENT" }, \
 225                         { LOOKUP_REVAL, "REVAL" }, \
 226                         { LOOKUP_RCU, "RCU" }, \
 227                         { LOOKUP_NO_REVAL, "NO_REVAL" }, \
 228                         { LOOKUP_OPEN, "OPEN" }, \
 229                         { LOOKUP_CREATE, "CREATE" }, \
 230                         { LOOKUP_EXCL, "EXCL" }, \
 231                         { LOOKUP_RENAME_TARGET, "RENAME_TARGET" }, \
 232                         { LOOKUP_JUMPED, "JUMPED" }, \
 233                         { LOOKUP_ROOT, "ROOT" }, \
 234                         { LOOKUP_EMPTY, "EMPTY" }, \
 235                         { LOOKUP_DOWN, "DOWN" })
 236 
 237 DECLARE_EVENT_CLASS(nfs_lookup_event,
 238                 TP_PROTO(
 239                         const struct inode *dir,
 240                         const struct dentry *dentry,
 241                         unsigned int flags
 242                 ),
 243 
 244                 TP_ARGS(dir, dentry, flags),
 245 
 246                 TP_STRUCT__entry(
 247                         __field(unsigned long, flags)
 248                         __field(dev_t, dev)
 249                         __field(u64, dir)
 250                         __string(name, dentry->d_name.name)
 251                 ),
 252 
 253                 TP_fast_assign(
 254                         __entry->dev = dir->i_sb->s_dev;
 255                         __entry->dir = NFS_FILEID(dir);
 256                         __entry->flags = flags;
 257                         __assign_str(name, dentry->d_name.name);
 258                 ),
 259 
 260                 TP_printk(
 261                         "flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
 262                         __entry->flags,
 263                         show_lookup_flags(__entry->flags),
 264                         MAJOR(__entry->dev), MINOR(__entry->dev),
 265                         (unsigned long long)__entry->dir,
 266                         __get_str(name)
 267                 )
 268 );
 269 
 270 #define DEFINE_NFS_LOOKUP_EVENT(name) \
 271         DEFINE_EVENT(nfs_lookup_event, name, \
 272                         TP_PROTO( \
 273                                 const struct inode *dir, \
 274                                 const struct dentry *dentry, \
 275                                 unsigned int flags \
 276                         ), \
 277                         TP_ARGS(dir, dentry, flags))
 278 
 279 DECLARE_EVENT_CLASS(nfs_lookup_event_done,
 280                 TP_PROTO(
 281                         const struct inode *dir,
 282                         const struct dentry *dentry,
 283                         unsigned int flags,
 284                         int error
 285                 ),
 286 
 287                 TP_ARGS(dir, dentry, flags, error),
 288 
 289                 TP_STRUCT__entry(
 290                         __field(unsigned long, error)
 291                         __field(unsigned long, flags)
 292                         __field(dev_t, dev)
 293                         __field(u64, dir)
 294                         __string(name, dentry->d_name.name)
 295                 ),
 296 
 297                 TP_fast_assign(
 298                         __entry->dev = dir->i_sb->s_dev;
 299                         __entry->dir = NFS_FILEID(dir);
 300                         __entry->error = error < 0 ? -error : 0;
 301                         __entry->flags = flags;
 302                         __assign_str(name, dentry->d_name.name);
 303                 ),
 304 
 305                 TP_printk(
 306                         "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
 307                         -__entry->error, nfs_show_status(__entry->error),
 308                         __entry->flags,
 309                         show_lookup_flags(__entry->flags),
 310                         MAJOR(__entry->dev), MINOR(__entry->dev),
 311                         (unsigned long long)__entry->dir,
 312                         __get_str(name)
 313                 )
 314 );
 315 
 316 #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
 317         DEFINE_EVENT(nfs_lookup_event_done, name, \
 318                         TP_PROTO( \
 319                                 const struct inode *dir, \
 320                                 const struct dentry *dentry, \
 321                                 unsigned int flags, \
 322                                 int error \
 323                         ), \
 324                         TP_ARGS(dir, dentry, flags, error))
 325 
 326 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
 327 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
 328 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
 329 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
 330 
 331 TRACE_DEFINE_ENUM(O_WRONLY);
 332 TRACE_DEFINE_ENUM(O_RDWR);
 333 TRACE_DEFINE_ENUM(O_CREAT);
 334 TRACE_DEFINE_ENUM(O_EXCL);
 335 TRACE_DEFINE_ENUM(O_NOCTTY);
 336 TRACE_DEFINE_ENUM(O_TRUNC);
 337 TRACE_DEFINE_ENUM(O_APPEND);
 338 TRACE_DEFINE_ENUM(O_NONBLOCK);
 339 TRACE_DEFINE_ENUM(O_DSYNC);
 340 TRACE_DEFINE_ENUM(O_DIRECT);
 341 TRACE_DEFINE_ENUM(O_LARGEFILE);
 342 TRACE_DEFINE_ENUM(O_DIRECTORY);
 343 TRACE_DEFINE_ENUM(O_NOFOLLOW);
 344 TRACE_DEFINE_ENUM(O_NOATIME);
 345 TRACE_DEFINE_ENUM(O_CLOEXEC);
 346 
 347 #define show_open_flags(flags) \
 348         __print_flags(flags, "|", \
 349                 { O_WRONLY, "O_WRONLY" }, \
 350                 { O_RDWR, "O_RDWR" }, \
 351                 { O_CREAT, "O_CREAT" }, \
 352                 { O_EXCL, "O_EXCL" }, \
 353                 { O_NOCTTY, "O_NOCTTY" }, \
 354                 { O_TRUNC, "O_TRUNC" }, \
 355                 { O_APPEND, "O_APPEND" }, \
 356                 { O_NONBLOCK, "O_NONBLOCK" }, \
 357                 { O_DSYNC, "O_DSYNC" }, \
 358                 { O_DIRECT, "O_DIRECT" }, \
 359                 { O_LARGEFILE, "O_LARGEFILE" }, \
 360                 { O_DIRECTORY, "O_DIRECTORY" }, \
 361                 { O_NOFOLLOW, "O_NOFOLLOW" }, \
 362                 { O_NOATIME, "O_NOATIME" }, \
 363                 { O_CLOEXEC, "O_CLOEXEC" })
 364 
 365 TRACE_DEFINE_ENUM(FMODE_READ);
 366 TRACE_DEFINE_ENUM(FMODE_WRITE);
 367 TRACE_DEFINE_ENUM(FMODE_EXEC);
 368 
 369 #define show_fmode_flags(mode) \
 370         __print_flags(mode, "|", \
 371                 { ((__force unsigned long)FMODE_READ), "READ" }, \
 372                 { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \
 373                 { ((__force unsigned long)FMODE_EXEC), "EXEC" })
 374 
 375 TRACE_EVENT(nfs_atomic_open_enter,
 376                 TP_PROTO(
 377                         const struct inode *dir,
 378                         const struct nfs_open_context *ctx,
 379                         unsigned int flags
 380                 ),
 381 
 382                 TP_ARGS(dir, ctx, flags),
 383 
 384                 TP_STRUCT__entry(
 385                         __field(unsigned long, flags)
 386                         __field(unsigned int, fmode)
 387                         __field(dev_t, dev)
 388                         __field(u64, dir)
 389                         __string(name, ctx->dentry->d_name.name)
 390                 ),
 391 
 392                 TP_fast_assign(
 393                         __entry->dev = dir->i_sb->s_dev;
 394                         __entry->dir = NFS_FILEID(dir);
 395                         __entry->flags = flags;
 396                         __entry->fmode = (__force unsigned int)ctx->mode;
 397                         __assign_str(name, ctx->dentry->d_name.name);
 398                 ),
 399 
 400                 TP_printk(
 401                         "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
 402                         __entry->flags,
 403                         show_open_flags(__entry->flags),
 404                         show_fmode_flags(__entry->fmode),
 405                         MAJOR(__entry->dev), MINOR(__entry->dev),
 406                         (unsigned long long)__entry->dir,
 407                         __get_str(name)
 408                 )
 409 );
 410 
 411 TRACE_EVENT(nfs_atomic_open_exit,
 412                 TP_PROTO(
 413                         const struct inode *dir,
 414                         const struct nfs_open_context *ctx,
 415                         unsigned int flags,
 416                         int error
 417                 ),
 418 
 419                 TP_ARGS(dir, ctx, flags, error),
 420 
 421                 TP_STRUCT__entry(
 422                         __field(unsigned long, error)
 423                         __field(unsigned long, flags)
 424                         __field(unsigned int, fmode)
 425                         __field(dev_t, dev)
 426                         __field(u64, dir)
 427                         __string(name, ctx->dentry->d_name.name)
 428                 ),
 429 
 430                 TP_fast_assign(
 431                         __entry->error = -error;
 432                         __entry->dev = dir->i_sb->s_dev;
 433                         __entry->dir = NFS_FILEID(dir);
 434                         __entry->flags = flags;
 435                         __entry->fmode = (__force unsigned int)ctx->mode;
 436                         __assign_str(name, ctx->dentry->d_name.name);
 437                 ),
 438 
 439                 TP_printk(
 440                         "error=%ld (%s) flags=0x%lx (%s) fmode=%s "
 441                         "name=%02x:%02x:%llu/%s",
 442                         -__entry->error, nfs_show_status(__entry->error),
 443                         __entry->flags,
 444                         show_open_flags(__entry->flags),
 445                         show_fmode_flags(__entry->fmode),
 446                         MAJOR(__entry->dev), MINOR(__entry->dev),
 447                         (unsigned long long)__entry->dir,
 448                         __get_str(name)
 449                 )
 450 );
 451 
 452 TRACE_EVENT(nfs_create_enter,
 453                 TP_PROTO(
 454                         const struct inode *dir,
 455                         const struct dentry *dentry,
 456                         unsigned int flags
 457                 ),
 458 
 459                 TP_ARGS(dir, dentry, flags),
 460 
 461                 TP_STRUCT__entry(
 462                         __field(unsigned long, flags)
 463                         __field(dev_t, dev)
 464                         __field(u64, dir)
 465                         __string(name, dentry->d_name.name)
 466                 ),
 467 
 468                 TP_fast_assign(
 469                         __entry->dev = dir->i_sb->s_dev;
 470                         __entry->dir = NFS_FILEID(dir);
 471                         __entry->flags = flags;
 472                         __assign_str(name, dentry->d_name.name);
 473                 ),
 474 
 475                 TP_printk(
 476                         "flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
 477                         __entry->flags,
 478                         show_open_flags(__entry->flags),
 479                         MAJOR(__entry->dev), MINOR(__entry->dev),
 480                         (unsigned long long)__entry->dir,
 481                         __get_str(name)
 482                 )
 483 );
 484 
 485 TRACE_EVENT(nfs_create_exit,
 486                 TP_PROTO(
 487                         const struct inode *dir,
 488                         const struct dentry *dentry,
 489                         unsigned int flags,
 490                         int error
 491                 ),
 492 
 493                 TP_ARGS(dir, dentry, flags, error),
 494 
 495                 TP_STRUCT__entry(
 496                         __field(unsigned long, error)
 497                         __field(unsigned long, flags)
 498                         __field(dev_t, dev)
 499                         __field(u64, dir)
 500                         __string(name, dentry->d_name.name)
 501                 ),
 502 
 503                 TP_fast_assign(
 504                         __entry->error = -error;
 505                         __entry->dev = dir->i_sb->s_dev;
 506                         __entry->dir = NFS_FILEID(dir);
 507                         __entry->flags = flags;
 508                         __assign_str(name, dentry->d_name.name);
 509                 ),
 510 
 511                 TP_printk(
 512                         "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
 513                         -__entry->error, nfs_show_status(__entry->error),
 514                         __entry->flags,
 515                         show_open_flags(__entry->flags),
 516                         MAJOR(__entry->dev), MINOR(__entry->dev),
 517                         (unsigned long long)__entry->dir,
 518                         __get_str(name)
 519                 )
 520 );
 521 
 522 DECLARE_EVENT_CLASS(nfs_directory_event,
 523                 TP_PROTO(
 524                         const struct inode *dir,
 525                         const struct dentry *dentry
 526                 ),
 527 
 528                 TP_ARGS(dir, dentry),
 529 
 530                 TP_STRUCT__entry(
 531                         __field(dev_t, dev)
 532                         __field(u64, dir)
 533                         __string(name, dentry->d_name.name)
 534                 ),
 535 
 536                 TP_fast_assign(
 537                         __entry->dev = dir->i_sb->s_dev;
 538                         __entry->dir = NFS_FILEID(dir);
 539                         __assign_str(name, dentry->d_name.name);
 540                 ),
 541 
 542                 TP_printk(
 543                         "name=%02x:%02x:%llu/%s",
 544                         MAJOR(__entry->dev), MINOR(__entry->dev),
 545                         (unsigned long long)__entry->dir,
 546                         __get_str(name)
 547                 )
 548 );
 549 
 550 #define DEFINE_NFS_DIRECTORY_EVENT(name) \
 551         DEFINE_EVENT(nfs_directory_event, name, \
 552                         TP_PROTO( \
 553                                 const struct inode *dir, \
 554                                 const struct dentry *dentry \
 555                         ), \
 556                         TP_ARGS(dir, dentry))
 557 
 558 DECLARE_EVENT_CLASS(nfs_directory_event_done,
 559                 TP_PROTO(
 560                         const struct inode *dir,
 561                         const struct dentry *dentry,
 562                         int error
 563                 ),
 564 
 565                 TP_ARGS(dir, dentry, error),
 566 
 567                 TP_STRUCT__entry(
 568                         __field(unsigned long, error)
 569                         __field(dev_t, dev)
 570                         __field(u64, dir)
 571                         __string(name, dentry->d_name.name)
 572                 ),
 573 
 574                 TP_fast_assign(
 575                         __entry->dev = dir->i_sb->s_dev;
 576                         __entry->dir = NFS_FILEID(dir);
 577                         __entry->error = error < 0 ? -error : 0;
 578                         __assign_str(name, dentry->d_name.name);
 579                 ),
 580 
 581                 TP_printk(
 582                         "error=%ld (%s) name=%02x:%02x:%llu/%s",
 583                         -__entry->error, nfs_show_status(__entry->error),
 584                         MAJOR(__entry->dev), MINOR(__entry->dev),
 585                         (unsigned long long)__entry->dir,
 586                         __get_str(name)
 587                 )
 588 );
 589 
 590 #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
 591         DEFINE_EVENT(nfs_directory_event_done, name, \
 592                         TP_PROTO( \
 593                                 const struct inode *dir, \
 594                                 const struct dentry *dentry, \
 595                                 int error \
 596                         ), \
 597                         TP_ARGS(dir, dentry, error))
 598 
 599 DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
 600 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
 601 DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
 602 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
 603 DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
 604 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
 605 DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
 606 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
 607 DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
 608 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
 609 DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
 610 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
 611 
 612 TRACE_EVENT(nfs_link_enter,
 613                 TP_PROTO(
 614                         const struct inode *inode,
 615                         const struct inode *dir,
 616                         const struct dentry *dentry
 617                 ),
 618 
 619                 TP_ARGS(inode, dir, dentry),
 620 
 621                 TP_STRUCT__entry(
 622                         __field(dev_t, dev)
 623                         __field(u64, fileid)
 624                         __field(u64, dir)
 625                         __string(name, dentry->d_name.name)
 626                 ),
 627 
 628                 TP_fast_assign(
 629                         __entry->dev = inode->i_sb->s_dev;
 630                         __entry->fileid = NFS_FILEID(inode);
 631                         __entry->dir = NFS_FILEID(dir);
 632                         __assign_str(name, dentry->d_name.name);
 633                 ),
 634 
 635                 TP_printk(
 636                         "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
 637                         MAJOR(__entry->dev), MINOR(__entry->dev),
 638                         __entry->fileid,
 639                         MAJOR(__entry->dev), MINOR(__entry->dev),
 640                         (unsigned long long)__entry->dir,
 641                         __get_str(name)
 642                 )
 643 );
 644 
 645 TRACE_EVENT(nfs_link_exit,
 646                 TP_PROTO(
 647                         const struct inode *inode,
 648                         const struct inode *dir,
 649                         const struct dentry *dentry,
 650                         int error
 651                 ),
 652 
 653                 TP_ARGS(inode, dir, dentry, error),
 654 
 655                 TP_STRUCT__entry(
 656                         __field(unsigned long, error)
 657                         __field(dev_t, dev)
 658                         __field(u64, fileid)
 659                         __field(u64, dir)
 660                         __string(name, dentry->d_name.name)
 661                 ),
 662 
 663                 TP_fast_assign(
 664                         __entry->dev = inode->i_sb->s_dev;
 665                         __entry->fileid = NFS_FILEID(inode);
 666                         __entry->dir = NFS_FILEID(dir);
 667                         __entry->error = error < 0 ? -error : 0;
 668                         __assign_str(name, dentry->d_name.name);
 669                 ),
 670 
 671                 TP_printk(
 672                         "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
 673                         -__entry->error, nfs_show_status(__entry->error),
 674                         MAJOR(__entry->dev), MINOR(__entry->dev),
 675                         __entry->fileid,
 676                         MAJOR(__entry->dev), MINOR(__entry->dev),
 677                         (unsigned long long)__entry->dir,
 678                         __get_str(name)
 679                 )
 680 );
 681 
 682 DECLARE_EVENT_CLASS(nfs_rename_event,
 683                 TP_PROTO(
 684                         const struct inode *old_dir,
 685                         const struct dentry *old_dentry,
 686                         const struct inode *new_dir,
 687                         const struct dentry *new_dentry
 688                 ),
 689 
 690                 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
 691 
 692                 TP_STRUCT__entry(
 693                         __field(dev_t, dev)
 694                         __field(u64, old_dir)
 695                         __field(u64, new_dir)
 696                         __string(old_name, old_dentry->d_name.name)
 697                         __string(new_name, new_dentry->d_name.name)
 698                 ),
 699 
 700                 TP_fast_assign(
 701                         __entry->dev = old_dir->i_sb->s_dev;
 702                         __entry->old_dir = NFS_FILEID(old_dir);
 703                         __entry->new_dir = NFS_FILEID(new_dir);
 704                         __assign_str(old_name, old_dentry->d_name.name);
 705                         __assign_str(new_name, new_dentry->d_name.name);
 706                 ),
 707 
 708                 TP_printk(
 709                         "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
 710                         MAJOR(__entry->dev), MINOR(__entry->dev),
 711                         (unsigned long long)__entry->old_dir,
 712                         __get_str(old_name),
 713                         MAJOR(__entry->dev), MINOR(__entry->dev),
 714                         (unsigned long long)__entry->new_dir,
 715                         __get_str(new_name)
 716                 )
 717 );
 718 #define DEFINE_NFS_RENAME_EVENT(name) \
 719         DEFINE_EVENT(nfs_rename_event, name, \
 720                         TP_PROTO( \
 721                                 const struct inode *old_dir, \
 722                                 const struct dentry *old_dentry, \
 723                                 const struct inode *new_dir, \
 724                                 const struct dentry *new_dentry \
 725                         ), \
 726                         TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
 727 
 728 DECLARE_EVENT_CLASS(nfs_rename_event_done,
 729                 TP_PROTO(
 730                         const struct inode *old_dir,
 731                         const struct dentry *old_dentry,
 732                         const struct inode *new_dir,
 733                         const struct dentry *new_dentry,
 734                         int error
 735                 ),
 736 
 737                 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
 738 
 739                 TP_STRUCT__entry(
 740                         __field(dev_t, dev)
 741                         __field(unsigned long, error)
 742                         __field(u64, old_dir)
 743                         __string(old_name, old_dentry->d_name.name)
 744                         __field(u64, new_dir)
 745                         __string(new_name, new_dentry->d_name.name)
 746                 ),
 747 
 748                 TP_fast_assign(
 749                         __entry->dev = old_dir->i_sb->s_dev;
 750                         __entry->error = -error;
 751                         __entry->old_dir = NFS_FILEID(old_dir);
 752                         __entry->new_dir = NFS_FILEID(new_dir);
 753                         __assign_str(old_name, old_dentry->d_name.name);
 754                         __assign_str(new_name, new_dentry->d_name.name);
 755                 ),
 756 
 757                 TP_printk(
 758                         "error=%ld (%s) old_name=%02x:%02x:%llu/%s "
 759                         "new_name=%02x:%02x:%llu/%s",
 760                         -__entry->error, nfs_show_status(__entry->error),
 761                         MAJOR(__entry->dev), MINOR(__entry->dev),
 762                         (unsigned long long)__entry->old_dir,
 763                         __get_str(old_name),
 764                         MAJOR(__entry->dev), MINOR(__entry->dev),
 765                         (unsigned long long)__entry->new_dir,
 766                         __get_str(new_name)
 767                 )
 768 );
 769 #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
 770         DEFINE_EVENT(nfs_rename_event_done, name, \
 771                         TP_PROTO( \
 772                                 const struct inode *old_dir, \
 773                                 const struct dentry *old_dentry, \
 774                                 const struct inode *new_dir, \
 775                                 const struct dentry *new_dentry, \
 776                                 int error \
 777                         ), \
 778                         TP_ARGS(old_dir, old_dentry, new_dir, \
 779                                 new_dentry, error))
 780 
 781 DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
 782 DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
 783 
 784 DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename);
 785 
 786 TRACE_EVENT(nfs_sillyrename_unlink,
 787                 TP_PROTO(
 788                         const struct nfs_unlinkdata *data,
 789                         int error
 790                 ),
 791 
 792                 TP_ARGS(data, error),
 793 
 794                 TP_STRUCT__entry(
 795                         __field(dev_t, dev)
 796                         __field(unsigned long, error)
 797                         __field(u64, dir)
 798                         __dynamic_array(char, name, data->args.name.len + 1)
 799                 ),
 800 
 801                 TP_fast_assign(
 802                         struct inode *dir = d_inode(data->dentry->d_parent);
 803                         size_t len = data->args.name.len;
 804                         __entry->dev = dir->i_sb->s_dev;
 805                         __entry->dir = NFS_FILEID(dir);
 806                         __entry->error = -error;
 807                         memcpy(__get_str(name),
 808                                 data->args.name.name, len);
 809                         __get_str(name)[len] = 0;
 810                 ),
 811 
 812                 TP_printk(
 813                         "error=%ld (%s) name=%02x:%02x:%llu/%s",
 814                         -__entry->error, nfs_show_status(__entry->error),
 815                         MAJOR(__entry->dev), MINOR(__entry->dev),
 816                         (unsigned long long)__entry->dir,
 817                         __get_str(name)
 818                 )
 819 );
 820 
 821 TRACE_EVENT(nfs_initiate_read,
 822                 TP_PROTO(
 823                         const struct inode *inode,
 824                         loff_t offset, unsigned long count
 825                 ),
 826 
 827                 TP_ARGS(inode, offset, count),
 828 
 829                 TP_STRUCT__entry(
 830                         __field(loff_t, offset)
 831                         __field(unsigned long, count)
 832                         __field(dev_t, dev)
 833                         __field(u32, fhandle)
 834                         __field(u64, fileid)
 835                 ),
 836 
 837                 TP_fast_assign(
 838                         const struct nfs_inode *nfsi = NFS_I(inode);
 839 
 840                         __entry->offset = offset;
 841                         __entry->count = count;
 842                         __entry->dev = inode->i_sb->s_dev;
 843                         __entry->fileid = nfsi->fileid;
 844                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 845                 ),
 846 
 847                 TP_printk(
 848                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
 849                         "offset=%lld count=%lu",
 850                         MAJOR(__entry->dev), MINOR(__entry->dev),
 851                         (unsigned long long)__entry->fileid,
 852                         __entry->fhandle,
 853                         __entry->offset, __entry->count
 854                 )
 855 );
 856 
 857 TRACE_EVENT(nfs_readpage_done,
 858                 TP_PROTO(
 859                         const struct inode *inode,
 860                         int status, loff_t offset, bool eof
 861                 ),
 862 
 863                 TP_ARGS(inode, status, offset, eof),
 864 
 865                 TP_STRUCT__entry(
 866                         __field(int, status)
 867                         __field(loff_t, offset)
 868                         __field(bool, eof)
 869                         __field(dev_t, dev)
 870                         __field(u32, fhandle)
 871                         __field(u64, fileid)
 872                 ),
 873 
 874                 TP_fast_assign(
 875                         const struct nfs_inode *nfsi = NFS_I(inode);
 876 
 877                         __entry->status = status;
 878                         __entry->offset = offset;
 879                         __entry->eof = eof;
 880                         __entry->dev = inode->i_sb->s_dev;
 881                         __entry->fileid = nfsi->fileid;
 882                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 883                 ),
 884 
 885                 TP_printk(
 886                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
 887                         "offset=%lld status=%d%s",
 888                         MAJOR(__entry->dev), MINOR(__entry->dev),
 889                         (unsigned long long)__entry->fileid,
 890                         __entry->fhandle,
 891                         __entry->offset, __entry->status,
 892                         __entry->eof ? " eof" : ""
 893                 )
 894 );
 895 
 896 TRACE_DEFINE_ENUM(NFS_UNSTABLE);
 897 TRACE_DEFINE_ENUM(NFS_DATA_SYNC);
 898 TRACE_DEFINE_ENUM(NFS_FILE_SYNC);
 899 
 900 #define nfs_show_stable(stable) \
 901         __print_symbolic(stable, \
 902                         { NFS_UNSTABLE, "UNSTABLE" }, \
 903                         { NFS_DATA_SYNC, "DATA_SYNC" }, \
 904                         { NFS_FILE_SYNC, "FILE_SYNC" })
 905 
 906 TRACE_EVENT(nfs_initiate_write,
 907                 TP_PROTO(
 908                         const struct inode *inode,
 909                         loff_t offset, unsigned long count,
 910                         enum nfs3_stable_how stable
 911                 ),
 912 
 913                 TP_ARGS(inode, offset, count, stable),
 914 
 915                 TP_STRUCT__entry(
 916                         __field(loff_t, offset)
 917                         __field(unsigned long, count)
 918                         __field(enum nfs3_stable_how, stable)
 919                         __field(dev_t, dev)
 920                         __field(u32, fhandle)
 921                         __field(u64, fileid)
 922                 ),
 923 
 924                 TP_fast_assign(
 925                         const struct nfs_inode *nfsi = NFS_I(inode);
 926 
 927                         __entry->offset = offset;
 928                         __entry->count = count;
 929                         __entry->stable = stable;
 930                         __entry->dev = inode->i_sb->s_dev;
 931                         __entry->fileid = nfsi->fileid;
 932                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 933                 ),
 934 
 935                 TP_printk(
 936                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
 937                         "offset=%lld count=%lu stable=%s",
 938                         MAJOR(__entry->dev), MINOR(__entry->dev),
 939                         (unsigned long long)__entry->fileid,
 940                         __entry->fhandle,
 941                         __entry->offset, __entry->count,
 942                         nfs_show_stable(__entry->stable)
 943                 )
 944 );
 945 
 946 TRACE_EVENT(nfs_writeback_done,
 947                 TP_PROTO(
 948                         const struct inode *inode,
 949                         int status,
 950                         loff_t offset,
 951                         struct nfs_writeverf *writeverf
 952                 ),
 953 
 954                 TP_ARGS(inode, status, offset, writeverf),
 955 
 956                 TP_STRUCT__entry(
 957                         __field(int, status)
 958                         __field(loff_t, offset)
 959                         __field(enum nfs3_stable_how, stable)
 960                         __field(unsigned long long, verifier)
 961                         __field(dev_t, dev)
 962                         __field(u32, fhandle)
 963                         __field(u64, fileid)
 964                 ),
 965 
 966                 TP_fast_assign(
 967                         const struct nfs_inode *nfsi = NFS_I(inode);
 968 
 969                         __entry->status = status;
 970                         __entry->offset = offset;
 971                         __entry->stable = writeverf->committed;
 972                         memcpy(&__entry->verifier, &writeverf->verifier,
 973                                sizeof(__entry->verifier));
 974                         __entry->dev = inode->i_sb->s_dev;
 975                         __entry->fileid = nfsi->fileid;
 976                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
 977                 ),
 978 
 979                 TP_printk(
 980                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
 981                         "offset=%lld status=%d stable=%s "
 982                         "verifier 0x%016llx",
 983                         MAJOR(__entry->dev), MINOR(__entry->dev),
 984                         (unsigned long long)__entry->fileid,
 985                         __entry->fhandle,
 986                         __entry->offset, __entry->status,
 987                         nfs_show_stable(__entry->stable),
 988                         __entry->verifier
 989                 )
 990 );
 991 
 992 TRACE_EVENT(nfs_initiate_commit,
 993                 TP_PROTO(
 994                         const struct nfs_commit_data *data
 995                 ),
 996 
 997                 TP_ARGS(data),
 998 
 999                 TP_STRUCT__entry(
1000                         __field(loff_t, offset)
1001                         __field(unsigned long, count)
1002                         __field(dev_t, dev)
1003                         __field(u32, fhandle)
1004                         __field(u64, fileid)
1005                 ),
1006 
1007                 TP_fast_assign(
1008                         const struct inode *inode = data->inode;
1009                         const struct nfs_inode *nfsi = NFS_I(inode);
1010 
1011                         __entry->offset = data->args.offset;
1012                         __entry->count = data->args.count;
1013                         __entry->dev = inode->i_sb->s_dev;
1014                         __entry->fileid = nfsi->fileid;
1015                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1016                 ),
1017 
1018                 TP_printk(
1019                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
1020                         "offset=%lld count=%lu",
1021                         MAJOR(__entry->dev), MINOR(__entry->dev),
1022                         (unsigned long long)__entry->fileid,
1023                         __entry->fhandle,
1024                         __entry->offset, __entry->count
1025                 )
1026 );
1027 
1028 TRACE_EVENT(nfs_commit_done,
1029                 TP_PROTO(
1030                         const struct nfs_commit_data *data
1031                 ),
1032 
1033                 TP_ARGS(data),
1034 
1035                 TP_STRUCT__entry(
1036                         __field(int, status)
1037                         __field(loff_t, offset)
1038                         __field(unsigned long long, verifier)
1039                         __field(dev_t, dev)
1040                         __field(u32, fhandle)
1041                         __field(u64, fileid)
1042                 ),
1043 
1044                 TP_fast_assign(
1045                         const struct inode *inode = data->inode;
1046                         const struct nfs_inode *nfsi = NFS_I(inode);
1047 
1048                         __entry->status = data->res.op_status;
1049                         __entry->offset = data->args.offset;
1050                         memcpy(&__entry->verifier, &data->verf.verifier,
1051                                sizeof(__entry->verifier));
1052                         __entry->dev = inode->i_sb->s_dev;
1053                         __entry->fileid = nfsi->fileid;
1054                         __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1055                 ),
1056 
1057                 TP_printk(
1058                         "fileid=%02x:%02x:%llu fhandle=0x%08x "
1059                         "offset=%lld status=%d verifier 0x%016llx",
1060                         MAJOR(__entry->dev), MINOR(__entry->dev),
1061                         (unsigned long long)__entry->fileid,
1062                         __entry->fhandle,
1063                         __entry->offset, __entry->status,
1064                         __entry->verifier
1065                 )
1066 );
1067 
1068 TRACE_DEFINE_ENUM(NFS_OK);
1069 TRACE_DEFINE_ENUM(NFSERR_PERM);
1070 TRACE_DEFINE_ENUM(NFSERR_NOENT);
1071 TRACE_DEFINE_ENUM(NFSERR_IO);
1072 TRACE_DEFINE_ENUM(NFSERR_NXIO);
1073 TRACE_DEFINE_ENUM(ECHILD);
1074 TRACE_DEFINE_ENUM(NFSERR_EAGAIN);
1075 TRACE_DEFINE_ENUM(NFSERR_ACCES);
1076 TRACE_DEFINE_ENUM(NFSERR_EXIST);
1077 TRACE_DEFINE_ENUM(NFSERR_XDEV);
1078 TRACE_DEFINE_ENUM(NFSERR_NODEV);
1079 TRACE_DEFINE_ENUM(NFSERR_NOTDIR);
1080 TRACE_DEFINE_ENUM(NFSERR_ISDIR);
1081 TRACE_DEFINE_ENUM(NFSERR_INVAL);
1082 TRACE_DEFINE_ENUM(NFSERR_FBIG);
1083 TRACE_DEFINE_ENUM(NFSERR_NOSPC);
1084 TRACE_DEFINE_ENUM(NFSERR_ROFS);
1085 TRACE_DEFINE_ENUM(NFSERR_MLINK);
1086 TRACE_DEFINE_ENUM(NFSERR_OPNOTSUPP);
1087 TRACE_DEFINE_ENUM(NFSERR_NAMETOOLONG);
1088 TRACE_DEFINE_ENUM(NFSERR_NOTEMPTY);
1089 TRACE_DEFINE_ENUM(NFSERR_DQUOT);
1090 TRACE_DEFINE_ENUM(NFSERR_STALE);
1091 TRACE_DEFINE_ENUM(NFSERR_REMOTE);
1092 TRACE_DEFINE_ENUM(NFSERR_WFLUSH);
1093 TRACE_DEFINE_ENUM(NFSERR_BADHANDLE);
1094 TRACE_DEFINE_ENUM(NFSERR_NOT_SYNC);
1095 TRACE_DEFINE_ENUM(NFSERR_BAD_COOKIE);
1096 TRACE_DEFINE_ENUM(NFSERR_NOTSUPP);
1097 TRACE_DEFINE_ENUM(NFSERR_TOOSMALL);
1098 TRACE_DEFINE_ENUM(NFSERR_SERVERFAULT);
1099 TRACE_DEFINE_ENUM(NFSERR_BADTYPE);
1100 TRACE_DEFINE_ENUM(NFSERR_JUKEBOX);
1101 
1102 #define nfs_show_status(x) \
1103         __print_symbolic(x, \
1104                         { NFS_OK, "OK" }, \
1105                         { NFSERR_PERM, "PERM" }, \
1106                         { NFSERR_NOENT, "NOENT" }, \
1107                         { NFSERR_IO, "IO" }, \
1108                         { NFSERR_NXIO, "NXIO" }, \
1109                         { ECHILD, "CHILD" }, \
1110                         { NFSERR_EAGAIN, "AGAIN" }, \
1111                         { NFSERR_ACCES, "ACCES" }, \
1112                         { NFSERR_EXIST, "EXIST" }, \
1113                         { NFSERR_XDEV, "XDEV" }, \
1114                         { NFSERR_NODEV, "NODEV" }, \
1115                         { NFSERR_NOTDIR, "NOTDIR" }, \
1116                         { NFSERR_ISDIR, "ISDIR" }, \
1117                         { NFSERR_INVAL, "INVAL" }, \
1118                         { NFSERR_FBIG, "FBIG" }, \
1119                         { NFSERR_NOSPC, "NOSPC" }, \
1120                         { NFSERR_ROFS, "ROFS" }, \
1121                         { NFSERR_MLINK, "MLINK" }, \
1122                         { NFSERR_OPNOTSUPP, "OPNOTSUPP" }, \
1123                         { NFSERR_NAMETOOLONG, "NAMETOOLONG" }, \
1124                         { NFSERR_NOTEMPTY, "NOTEMPTY" }, \
1125                         { NFSERR_DQUOT, "DQUOT" }, \
1126                         { NFSERR_STALE, "STALE" }, \
1127                         { NFSERR_REMOTE, "REMOTE" }, \
1128                         { NFSERR_WFLUSH, "WFLUSH" }, \
1129                         { NFSERR_BADHANDLE, "BADHANDLE" }, \
1130                         { NFSERR_NOT_SYNC, "NOTSYNC" }, \
1131                         { NFSERR_BAD_COOKIE, "BADCOOKIE" }, \
1132                         { NFSERR_NOTSUPP, "NOTSUPP" }, \
1133                         { NFSERR_TOOSMALL, "TOOSMALL" }, \
1134                         { NFSERR_SERVERFAULT, "REMOTEIO" }, \
1135                         { NFSERR_BADTYPE, "BADTYPE" }, \
1136                         { NFSERR_JUKEBOX, "JUKEBOX" })
1137 
1138 TRACE_EVENT(nfs_xdr_status,
1139                 TP_PROTO(
1140                         const struct xdr_stream *xdr,
1141                         int error
1142                 ),
1143 
1144                 TP_ARGS(xdr, error),
1145 
1146                 TP_STRUCT__entry(
1147                         __field(unsigned int, task_id)
1148                         __field(unsigned int, client_id)
1149                         __field(u32, xid)
1150                         __field(unsigned long, error)
1151                 ),
1152 
1153                 TP_fast_assign(
1154                         const struct rpc_rqst *rqstp = xdr->rqst;
1155                         const struct rpc_task *task = rqstp->rq_task;
1156 
1157                         __entry->task_id = task->tk_pid;
1158                         __entry->client_id = task->tk_client->cl_clid;
1159                         __entry->xid = be32_to_cpu(rqstp->rq_xid);
1160                         __entry->error = error;
1161                 ),
1162 
1163                 TP_printk(
1164                         "task:%u@%d xid=0x%08x error=%ld (%s)",
1165                         __entry->task_id, __entry->client_id, __entry->xid,
1166                         -__entry->error, nfs_show_status(__entry->error)
1167                 )
1168 );
1169 
1170 #endif /* _TRACE_NFS_H */
1171 
1172 #undef TRACE_INCLUDE_PATH
1173 #define TRACE_INCLUDE_PATH .
1174 #define TRACE_INCLUDE_FILE nfstrace
1175 /* This part must be outside protection */
1176 #include <trace/define_trace.h>

/* [<][>][^][v][top][bottom][index][help] */