LCOV - code coverage report
Current view: top level - fs/nfs - nfstrace.h (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_qemu_modules_combined.info Lines: 22 59 37.3 %
Date: 2020-09-30 20:25:01 Functions: 22 163 13.5 %
Branches: 88 854 10.3 %

           Branch data     Line data    Source code
       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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
             #  #  #  # ]
     185   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
             #  #  #  # ]
     186   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
             #  #  #  # ]
     187   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
             #  #  #  # ]
     188   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
             #  #  #  # ]
     189   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
             #  #  #  # ]
     190   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
             #  #  #  # ]
     191   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
             #  #  #  # ]
     192   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
             #  #  #  # ]
     193   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
             #  #  #  # ]
     194   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter);
             #  #  #  # ]
     195   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit);
             #  #  #  # ]
     196   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
             #  #  #  # ]
     197   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
             #  #  #  # ]
     198   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
             #  #  #  # ]
     199   [ #  #  #  # ]:          0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
     200   [ #  #  #  #  :          0 : DEFINE_NFS_INODE_EVENT(nfs_access_enter);
             #  #  #  # ]
     201   [ #  #  #  #  :          0 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :          0 : DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
             #  #  #  # ]
     327   [ #  #  #  #  :          0 : DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
             #  #  #  # ]
     328   [ #  #  #  #  :          0 : DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
             #  #  #  # ]
     329   [ #  #  #  #  :          0 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
             #  #  #  # ]
     600   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
             #  #  #  # ]
     601   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
             #  #  #  # ]
     602   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
             #  #  #  # ]
     603   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
             #  #  #  # ]
     604   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
             #  #  #  # ]
     605   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
             #  #  #  # ]
     606   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
             #  #  #  # ]
     607   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
             #  #  #  # ]
     608   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
             #  #  #  # ]
     609   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
             #  #  #  # ]
     610   [ #  #  #  #  :          0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
             #  #  #  # ]
     611                 :            : 
     612   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :          0 : DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
             #  #  #  # ]
     782   [ #  #  #  #  :          0 : DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
             #  #  #  # ]
     783                 :            : 
     784   [ #  #  #  #  :          0 : DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename);
             #  #  #  # ]
     785                 :            : 
     786   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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   [ #  #  #  #  :        404 : 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>

Generated by: LCOV version 1.14