tizen: Use unique directory prefix for baselibs packages
[platform/kernel/linux-rpi.git] / fs / nfsd / trace.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2014 Christoph Hellwig.
4  */
5 #undef TRACE_SYSTEM
6 #define TRACE_SYSTEM nfsd
7
8 #if !defined(_NFSD_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
9 #define _NFSD_TRACE_H
10
11 #include <linux/tracepoint.h>
12 #include <linux/sunrpc/xprt.h>
13 #include <trace/misc/nfs.h>
14
15 #include "export.h"
16 #include "nfsfh.h"
17 #include "xdr4.h"
18
19 #define NFSD_TRACE_PROC_RES_FIELDS \
20                 __field(unsigned int, netns_ino) \
21                 __field(u32, xid) \
22                 __field(unsigned long, status) \
23                 __array(unsigned char, server, sizeof(struct sockaddr_in6)) \
24                 __array(unsigned char, client, sizeof(struct sockaddr_in6))
25
26 #define NFSD_TRACE_PROC_RES_ASSIGNMENTS(error) \
27                 do { \
28                         __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \
29                         __entry->xid = be32_to_cpu(rqstp->rq_xid); \
30                         __entry->status = be32_to_cpu(error); \
31                         memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \
32                                rqstp->rq_xprt->xpt_locallen); \
33                         memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \
34                                rqstp->rq_xprt->xpt_remotelen); \
35                 } while (0);
36
37 DECLARE_EVENT_CLASS(nfsd_xdr_err_class,
38         TP_PROTO(
39                 const struct svc_rqst *rqstp
40         ),
41         TP_ARGS(rqstp),
42         TP_STRUCT__entry(
43                 __field(unsigned int, netns_ino)
44                 __field(u32, xid)
45                 __field(u32, vers)
46                 __field(u32, proc)
47                 __sockaddr(server, rqstp->rq_xprt->xpt_locallen)
48                 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
49         ),
50         TP_fast_assign(
51                 const struct svc_xprt *xprt = rqstp->rq_xprt;
52
53                 __entry->netns_ino = xprt->xpt_net->ns.inum;
54                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
55                 __entry->vers = rqstp->rq_vers;
56                 __entry->proc = rqstp->rq_proc;
57                 __assign_sockaddr(server, &xprt->xpt_local, xprt->xpt_locallen);
58                 __assign_sockaddr(client, &xprt->xpt_remote, xprt->xpt_remotelen);
59         ),
60         TP_printk("xid=0x%08x vers=%u proc=%u",
61                 __entry->xid, __entry->vers, __entry->proc
62         )
63 );
64
65 #define DEFINE_NFSD_XDR_ERR_EVENT(name) \
66 DEFINE_EVENT(nfsd_xdr_err_class, nfsd_##name##_err, \
67         TP_PROTO(const struct svc_rqst *rqstp), \
68         TP_ARGS(rqstp))
69
70 DEFINE_NFSD_XDR_ERR_EVENT(garbage_args);
71 DEFINE_NFSD_XDR_ERR_EVENT(cant_encode);
72
73 #define show_nfsd_may_flags(x)                                          \
74         __print_flags(x, "|",                                           \
75                 { NFSD_MAY_EXEC,                "EXEC" },               \
76                 { NFSD_MAY_WRITE,               "WRITE" },              \
77                 { NFSD_MAY_READ,                "READ" },               \
78                 { NFSD_MAY_SATTR,               "SATTR" },              \
79                 { NFSD_MAY_TRUNC,               "TRUNC" },              \
80                 { NFSD_MAY_LOCK,                "LOCK" },               \
81                 { NFSD_MAY_OWNER_OVERRIDE,      "OWNER_OVERRIDE" },     \
82                 { NFSD_MAY_LOCAL_ACCESS,        "LOCAL_ACCESS" },       \
83                 { NFSD_MAY_BYPASS_GSS_ON_ROOT,  "BYPASS_GSS_ON_ROOT" }, \
84                 { NFSD_MAY_NOT_BREAK_LEASE,     "NOT_BREAK_LEASE" },    \
85                 { NFSD_MAY_BYPASS_GSS,          "BYPASS_GSS" },         \
86                 { NFSD_MAY_READ_IF_EXEC,        "READ_IF_EXEC" },       \
87                 { NFSD_MAY_64BIT_COOKIE,        "64BIT_COOKIE" })
88
89 TRACE_EVENT(nfsd_compound,
90         TP_PROTO(
91                 const struct svc_rqst *rqst,
92                 const char *tag,
93                 u32 taglen,
94                 u32 opcnt
95         ),
96         TP_ARGS(rqst, tag, taglen, opcnt),
97         TP_STRUCT__entry(
98                 __field(u32, xid)
99                 __field(u32, opcnt)
100                 __string_len(tag, tag, taglen)
101         ),
102         TP_fast_assign(
103                 __entry->xid = be32_to_cpu(rqst->rq_xid);
104                 __entry->opcnt = opcnt;
105                 __assign_str_len(tag, tag, taglen);
106         ),
107         TP_printk("xid=0x%08x opcnt=%u tag=%s",
108                 __entry->xid, __entry->opcnt, __get_str(tag)
109         )
110 )
111
112 TRACE_EVENT(nfsd_compound_status,
113         TP_PROTO(u32 args_opcnt,
114                  u32 resp_opcnt,
115                  __be32 status,
116                  const char *name),
117         TP_ARGS(args_opcnt, resp_opcnt, status, name),
118         TP_STRUCT__entry(
119                 __field(u32, args_opcnt)
120                 __field(u32, resp_opcnt)
121                 __field(int, status)
122                 __string(name, name)
123         ),
124         TP_fast_assign(
125                 __entry->args_opcnt = args_opcnt;
126                 __entry->resp_opcnt = resp_opcnt;
127                 __entry->status = be32_to_cpu(status);
128                 __assign_str(name, name);
129         ),
130         TP_printk("op=%u/%u %s status=%d",
131                 __entry->resp_opcnt, __entry->args_opcnt,
132                 __get_str(name), __entry->status)
133 )
134
135 TRACE_EVENT(nfsd_compound_decode_err,
136         TP_PROTO(
137                 const struct svc_rqst *rqstp,
138                 u32 args_opcnt,
139                 u32 resp_opcnt,
140                 u32 opnum,
141                 __be32 status
142         ),
143         TP_ARGS(rqstp, args_opcnt, resp_opcnt, opnum, status),
144         TP_STRUCT__entry(
145                 NFSD_TRACE_PROC_RES_FIELDS
146
147                 __field(u32, args_opcnt)
148                 __field(u32, resp_opcnt)
149                 __field(u32, opnum)
150         ),
151         TP_fast_assign(
152                 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
153
154                 __entry->args_opcnt = args_opcnt;
155                 __entry->resp_opcnt = resp_opcnt;
156                 __entry->opnum = opnum;
157         ),
158         TP_printk("op=%u/%u opnum=%u status=%lu",
159                 __entry->resp_opcnt, __entry->args_opcnt,
160                 __entry->opnum, __entry->status)
161 );
162
163 TRACE_EVENT(nfsd_compound_encode_err,
164         TP_PROTO(
165                 const struct svc_rqst *rqstp,
166                 u32 opnum,
167                 __be32 status
168         ),
169         TP_ARGS(rqstp, opnum, status),
170         TP_STRUCT__entry(
171                 NFSD_TRACE_PROC_RES_FIELDS
172
173                 __field(u32, opnum)
174         ),
175         TP_fast_assign(
176                 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
177
178                 __entry->opnum = opnum;
179         ),
180         TP_printk("opnum=%u status=%lu",
181                 __entry->opnum, __entry->status)
182 );
183
184 #define show_fs_file_type(x) \
185         __print_symbolic(x, \
186                 { S_IFLNK,              "LNK" }, \
187                 { S_IFREG,              "REG" }, \
188                 { S_IFDIR,              "DIR" }, \
189                 { S_IFCHR,              "CHR" }, \
190                 { S_IFBLK,              "BLK" }, \
191                 { S_IFIFO,              "FIFO" }, \
192                 { S_IFSOCK,             "SOCK" })
193
194 TRACE_EVENT(nfsd_fh_verify,
195         TP_PROTO(
196                 const struct svc_rqst *rqstp,
197                 const struct svc_fh *fhp,
198                 umode_t type,
199                 int access
200         ),
201         TP_ARGS(rqstp, fhp, type, access),
202         TP_STRUCT__entry(
203                 __field(unsigned int, netns_ino)
204                 __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
205                 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
206                 __field(u32, xid)
207                 __field(u32, fh_hash)
208                 __field(const void *, inode)
209                 __field(unsigned long, type)
210                 __field(unsigned long, access)
211         ),
212         TP_fast_assign(
213                 __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
214                 __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
215                        rqstp->rq_xprt->xpt_locallen);
216                 __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
217                                   rqstp->rq_xprt->xpt_remotelen);
218                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
219                 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
220                 __entry->inode = d_inode(fhp->fh_dentry);
221                 __entry->type = type;
222                 __entry->access = access;
223         ),
224         TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s",
225                 __entry->xid, __entry->fh_hash,
226                 show_fs_file_type(__entry->type),
227                 show_nfsd_may_flags(__entry->access)
228         )
229 );
230
231 TRACE_EVENT_CONDITION(nfsd_fh_verify_err,
232         TP_PROTO(
233                 const struct svc_rqst *rqstp,
234                 const struct svc_fh *fhp,
235                 umode_t type,
236                 int access,
237                 __be32 error
238         ),
239         TP_ARGS(rqstp, fhp, type, access, error),
240         TP_CONDITION(error),
241         TP_STRUCT__entry(
242                 __field(unsigned int, netns_ino)
243                 __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
244                 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
245                 __field(u32, xid)
246                 __field(u32, fh_hash)
247                 __field(const void *, inode)
248                 __field(unsigned long, type)
249                 __field(unsigned long, access)
250                 __field(int, error)
251         ),
252         TP_fast_assign(
253                 __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
254                 __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
255                        rqstp->rq_xprt->xpt_locallen);
256                 __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
257                                   rqstp->rq_xprt->xpt_remotelen);
258                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
259                 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
260                 if (fhp->fh_dentry)
261                         __entry->inode = d_inode(fhp->fh_dentry);
262                 else
263                         __entry->inode = NULL;
264                 __entry->type = type;
265                 __entry->access = access;
266                 __entry->error = be32_to_cpu(error);
267         ),
268         TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s error=%d",
269                 __entry->xid, __entry->fh_hash,
270                 show_fs_file_type(__entry->type),
271                 show_nfsd_may_flags(__entry->access),
272                 __entry->error
273         )
274 );
275
276 DECLARE_EVENT_CLASS(nfsd_fh_err_class,
277         TP_PROTO(struct svc_rqst *rqstp,
278                  struct svc_fh  *fhp,
279                  int            status),
280         TP_ARGS(rqstp, fhp, status),
281         TP_STRUCT__entry(
282                 __field(u32, xid)
283                 __field(u32, fh_hash)
284                 __field(int, status)
285         ),
286         TP_fast_assign(
287                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
288                 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
289                 __entry->status = status;
290         ),
291         TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
292                   __entry->xid, __entry->fh_hash,
293                   __entry->status)
294 )
295
296 #define DEFINE_NFSD_FH_ERR_EVENT(name)          \
297 DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name,    \
298         TP_PROTO(struct svc_rqst *rqstp,        \
299                  struct svc_fh  *fhp,           \
300                  int            status),        \
301         TP_ARGS(rqstp, fhp, status))
302
303 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
304 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
305
306 TRACE_EVENT(nfsd_exp_find_key,
307         TP_PROTO(const struct svc_expkey *key,
308                  int status),
309         TP_ARGS(key, status),
310         TP_STRUCT__entry(
311                 __field(int, fsidtype)
312                 __array(u32, fsid, 6)
313                 __string(auth_domain, key->ek_client->name)
314                 __field(int, status)
315         ),
316         TP_fast_assign(
317                 __entry->fsidtype = key->ek_fsidtype;
318                 memcpy(__entry->fsid, key->ek_fsid, 4*6);
319                 __assign_str(auth_domain, key->ek_client->name);
320                 __entry->status = status;
321         ),
322         TP_printk("fsid=%x::%s domain=%s status=%d",
323                 __entry->fsidtype,
324                 __print_array(__entry->fsid, 6, 4),
325                 __get_str(auth_domain),
326                 __entry->status
327         )
328 );
329
330 TRACE_EVENT(nfsd_expkey_update,
331         TP_PROTO(const struct svc_expkey *key, const char *exp_path),
332         TP_ARGS(key, exp_path),
333         TP_STRUCT__entry(
334                 __field(int, fsidtype)
335                 __array(u32, fsid, 6)
336                 __string(auth_domain, key->ek_client->name)
337                 __string(path, exp_path)
338                 __field(bool, cache)
339         ),
340         TP_fast_assign(
341                 __entry->fsidtype = key->ek_fsidtype;
342                 memcpy(__entry->fsid, key->ek_fsid, 4*6);
343                 __assign_str(auth_domain, key->ek_client->name);
344                 __assign_str(path, exp_path);
345                 __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
346         ),
347         TP_printk("fsid=%x::%s domain=%s path=%s cache=%s",
348                 __entry->fsidtype,
349                 __print_array(__entry->fsid, 6, 4),
350                 __get_str(auth_domain),
351                 __get_str(path),
352                 __entry->cache ? "pos" : "neg"
353         )
354 );
355
356 TRACE_EVENT(nfsd_exp_get_by_name,
357         TP_PROTO(const struct svc_export *key,
358                  int status),
359         TP_ARGS(key, status),
360         TP_STRUCT__entry(
361                 __string(path, key->ex_path.dentry->d_name.name)
362                 __string(auth_domain, key->ex_client->name)
363                 __field(int, status)
364         ),
365         TP_fast_assign(
366                 __assign_str(path, key->ex_path.dentry->d_name.name);
367                 __assign_str(auth_domain, key->ex_client->name);
368                 __entry->status = status;
369         ),
370         TP_printk("path=%s domain=%s status=%d",
371                 __get_str(path),
372                 __get_str(auth_domain),
373                 __entry->status
374         )
375 );
376
377 TRACE_EVENT(nfsd_export_update,
378         TP_PROTO(const struct svc_export *key),
379         TP_ARGS(key),
380         TP_STRUCT__entry(
381                 __string(path, key->ex_path.dentry->d_name.name)
382                 __string(auth_domain, key->ex_client->name)
383                 __field(bool, cache)
384         ),
385         TP_fast_assign(
386                 __assign_str(path, key->ex_path.dentry->d_name.name);
387                 __assign_str(auth_domain, key->ex_client->name);
388                 __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
389         ),
390         TP_printk("path=%s domain=%s cache=%s",
391                 __get_str(path),
392                 __get_str(auth_domain),
393                 __entry->cache ? "pos" : "neg"
394         )
395 );
396
397 DECLARE_EVENT_CLASS(nfsd_io_class,
398         TP_PROTO(struct svc_rqst *rqstp,
399                  struct svc_fh  *fhp,
400                  u64            offset,
401                  u32            len),
402         TP_ARGS(rqstp, fhp, offset, len),
403         TP_STRUCT__entry(
404                 __field(u32, xid)
405                 __field(u32, fh_hash)
406                 __field(u64, offset)
407                 __field(u32, len)
408         ),
409         TP_fast_assign(
410                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
411                 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
412                 __entry->offset = offset;
413                 __entry->len = len;
414         ),
415         TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u",
416                   __entry->xid, __entry->fh_hash,
417                   __entry->offset, __entry->len)
418 )
419
420 #define DEFINE_NFSD_IO_EVENT(name)              \
421 DEFINE_EVENT(nfsd_io_class, nfsd_##name,        \
422         TP_PROTO(struct svc_rqst *rqstp,        \
423                  struct svc_fh  *fhp,           \
424                  u64            offset,         \
425                  u32            len),           \
426         TP_ARGS(rqstp, fhp, offset, len))
427
428 DEFINE_NFSD_IO_EVENT(read_start);
429 DEFINE_NFSD_IO_EVENT(read_splice);
430 DEFINE_NFSD_IO_EVENT(read_vector);
431 DEFINE_NFSD_IO_EVENT(read_io_done);
432 DEFINE_NFSD_IO_EVENT(read_done);
433 DEFINE_NFSD_IO_EVENT(write_start);
434 DEFINE_NFSD_IO_EVENT(write_opened);
435 DEFINE_NFSD_IO_EVENT(write_io_done);
436 DEFINE_NFSD_IO_EVENT(write_done);
437
438 DECLARE_EVENT_CLASS(nfsd_err_class,
439         TP_PROTO(struct svc_rqst *rqstp,
440                  struct svc_fh  *fhp,
441                  loff_t         offset,
442                  int            status),
443         TP_ARGS(rqstp, fhp, offset, status),
444         TP_STRUCT__entry(
445                 __field(u32, xid)
446                 __field(u32, fh_hash)
447                 __field(loff_t, offset)
448                 __field(int, status)
449         ),
450         TP_fast_assign(
451                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
452                 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
453                 __entry->offset = offset;
454                 __entry->status = status;
455         ),
456         TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d",
457                   __entry->xid, __entry->fh_hash,
458                   __entry->offset, __entry->status)
459 )
460
461 #define DEFINE_NFSD_ERR_EVENT(name)             \
462 DEFINE_EVENT(nfsd_err_class, nfsd_##name,       \
463         TP_PROTO(struct svc_rqst *rqstp,        \
464                  struct svc_fh  *fhp,           \
465                  loff_t         offset,         \
466                  int            len),           \
467         TP_ARGS(rqstp, fhp, offset, len))
468
469 DEFINE_NFSD_ERR_EVENT(read_err);
470 DEFINE_NFSD_ERR_EVENT(write_err);
471
472 TRACE_EVENT(nfsd_dirent,
473         TP_PROTO(struct svc_fh *fhp,
474                  u64 ino,
475                  const char *name,
476                  int namlen),
477         TP_ARGS(fhp, ino, name, namlen),
478         TP_STRUCT__entry(
479                 __field(u32, fh_hash)
480                 __field(u64, ino)
481                 __string_len(name, name, namlen)
482         ),
483         TP_fast_assign(
484                 __entry->fh_hash = fhp ? knfsd_fh_hash(&fhp->fh_handle) : 0;
485                 __entry->ino = ino;
486                 __assign_str_len(name, name, namlen)
487         ),
488         TP_printk("fh_hash=0x%08x ino=%llu name=%s",
489                 __entry->fh_hash, __entry->ino, __get_str(name)
490         )
491 )
492
493 DECLARE_EVENT_CLASS(nfsd_copy_err_class,
494         TP_PROTO(struct svc_rqst *rqstp,
495                  struct svc_fh  *src_fhp,
496                  loff_t         src_offset,
497                  struct svc_fh  *dst_fhp,
498                  loff_t         dst_offset,
499                  u64            count,
500                  int            status),
501         TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, count, status),
502         TP_STRUCT__entry(
503                 __field(u32, xid)
504                 __field(u32, src_fh_hash)
505                 __field(loff_t, src_offset)
506                 __field(u32, dst_fh_hash)
507                 __field(loff_t, dst_offset)
508                 __field(u64, count)
509                 __field(int, status)
510         ),
511         TP_fast_assign(
512                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
513                 __entry->src_fh_hash = knfsd_fh_hash(&src_fhp->fh_handle);
514                 __entry->src_offset = src_offset;
515                 __entry->dst_fh_hash = knfsd_fh_hash(&dst_fhp->fh_handle);
516                 __entry->dst_offset = dst_offset;
517                 __entry->count = count;
518                 __entry->status = status;
519         ),
520         TP_printk("xid=0x%08x src_fh_hash=0x%08x src_offset=%lld "
521                         "dst_fh_hash=0x%08x dst_offset=%lld "
522                         "count=%llu status=%d",
523                   __entry->xid, __entry->src_fh_hash, __entry->src_offset,
524                   __entry->dst_fh_hash, __entry->dst_offset,
525                   (unsigned long long)__entry->count,
526                   __entry->status)
527 )
528
529 #define DEFINE_NFSD_COPY_ERR_EVENT(name)                \
530 DEFINE_EVENT(nfsd_copy_err_class, nfsd_##name,          \
531         TP_PROTO(struct svc_rqst        *rqstp,         \
532                  struct svc_fh          *src_fhp,       \
533                  loff_t                 src_offset,     \
534                  struct svc_fh          *dst_fhp,       \
535                  loff_t                 dst_offset,     \
536                  u64                    count,          \
537                  int                    status),        \
538         TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, \
539                 count, status))
540
541 DEFINE_NFSD_COPY_ERR_EVENT(clone_file_range_err);
542
543 #include "state.h"
544 #include "filecache.h"
545 #include "vfs.h"
546
547 TRACE_EVENT(nfsd_delegret_wakeup,
548         TP_PROTO(
549                 const struct svc_rqst *rqstp,
550                 const struct inode *inode,
551                 long timeo
552         ),
553         TP_ARGS(rqstp, inode, timeo),
554         TP_STRUCT__entry(
555                 __field(u32, xid)
556                 __field(const void *, inode)
557                 __field(long, timeo)
558         ),
559         TP_fast_assign(
560                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
561                 __entry->inode = inode;
562                 __entry->timeo = timeo;
563         ),
564         TP_printk("xid=0x%08x inode=%p%s",
565                   __entry->xid, __entry->inode,
566                   __entry->timeo == 0 ? " (timed out)" : ""
567         )
568 );
569
570 DECLARE_EVENT_CLASS(nfsd_stateid_class,
571         TP_PROTO(stateid_t *stp),
572         TP_ARGS(stp),
573         TP_STRUCT__entry(
574                 __field(u32, cl_boot)
575                 __field(u32, cl_id)
576                 __field(u32, si_id)
577                 __field(u32, si_generation)
578         ),
579         TP_fast_assign(
580                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
581                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
582                 __entry->si_id = stp->si_opaque.so_id;
583                 __entry->si_generation = stp->si_generation;
584         ),
585         TP_printk("client %08x:%08x stateid %08x:%08x",
586                 __entry->cl_boot,
587                 __entry->cl_id,
588                 __entry->si_id,
589                 __entry->si_generation)
590 )
591
592 #define DEFINE_STATEID_EVENT(name) \
593 DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \
594         TP_PROTO(stateid_t *stp), \
595         TP_ARGS(stp))
596
597 DEFINE_STATEID_EVENT(layoutstate_alloc);
598 DEFINE_STATEID_EVENT(layoutstate_unhash);
599 DEFINE_STATEID_EVENT(layoutstate_free);
600 DEFINE_STATEID_EVENT(layout_get_lookup_fail);
601 DEFINE_STATEID_EVENT(layout_commit_lookup_fail);
602 DEFINE_STATEID_EVENT(layout_return_lookup_fail);
603 DEFINE_STATEID_EVENT(layout_recall);
604 DEFINE_STATEID_EVENT(layout_recall_done);
605 DEFINE_STATEID_EVENT(layout_recall_fail);
606 DEFINE_STATEID_EVENT(layout_recall_release);
607
608 DEFINE_STATEID_EVENT(open);
609 DEFINE_STATEID_EVENT(deleg_read);
610 DEFINE_STATEID_EVENT(deleg_write);
611 DEFINE_STATEID_EVENT(deleg_return);
612 DEFINE_STATEID_EVENT(deleg_recall);
613
614 DECLARE_EVENT_CLASS(nfsd_stateseqid_class,
615         TP_PROTO(u32 seqid, const stateid_t *stp),
616         TP_ARGS(seqid, stp),
617         TP_STRUCT__entry(
618                 __field(u32, seqid)
619                 __field(u32, cl_boot)
620                 __field(u32, cl_id)
621                 __field(u32, si_id)
622                 __field(u32, si_generation)
623         ),
624         TP_fast_assign(
625                 __entry->seqid = seqid;
626                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
627                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
628                 __entry->si_id = stp->si_opaque.so_id;
629                 __entry->si_generation = stp->si_generation;
630         ),
631         TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x",
632                 __entry->seqid, __entry->cl_boot, __entry->cl_id,
633                 __entry->si_id, __entry->si_generation)
634 )
635
636 #define DEFINE_STATESEQID_EVENT(name) \
637 DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \
638         TP_PROTO(u32 seqid, const stateid_t *stp), \
639         TP_ARGS(seqid, stp))
640
641 DEFINE_STATESEQID_EVENT(preprocess);
642 DEFINE_STATESEQID_EVENT(open_confirm);
643
644 TRACE_DEFINE_ENUM(NFS4_OPEN_STID);
645 TRACE_DEFINE_ENUM(NFS4_LOCK_STID);
646 TRACE_DEFINE_ENUM(NFS4_DELEG_STID);
647 TRACE_DEFINE_ENUM(NFS4_CLOSED_STID);
648 TRACE_DEFINE_ENUM(NFS4_REVOKED_DELEG_STID);
649 TRACE_DEFINE_ENUM(NFS4_CLOSED_DELEG_STID);
650 TRACE_DEFINE_ENUM(NFS4_LAYOUT_STID);
651
652 #define show_stid_type(x)                                               \
653         __print_flags(x, "|",                                           \
654                 { NFS4_OPEN_STID,               "OPEN" },               \
655                 { NFS4_LOCK_STID,               "LOCK" },               \
656                 { NFS4_DELEG_STID,              "DELEG" },              \
657                 { NFS4_CLOSED_STID,             "CLOSED" },             \
658                 { NFS4_REVOKED_DELEG_STID,      "REVOKED" },            \
659                 { NFS4_CLOSED_DELEG_STID,       "CLOSED_DELEG" },       \
660                 { NFS4_LAYOUT_STID,             "LAYOUT" })
661
662 DECLARE_EVENT_CLASS(nfsd_stid_class,
663         TP_PROTO(
664                 const struct nfs4_stid *stid
665         ),
666         TP_ARGS(stid),
667         TP_STRUCT__entry(
668                 __field(unsigned long, sc_type)
669                 __field(int, sc_count)
670                 __field(u32, cl_boot)
671                 __field(u32, cl_id)
672                 __field(u32, si_id)
673                 __field(u32, si_generation)
674         ),
675         TP_fast_assign(
676                 const stateid_t *stp = &stid->sc_stateid;
677
678                 __entry->sc_type = stid->sc_type;
679                 __entry->sc_count = refcount_read(&stid->sc_count);
680                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
681                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
682                 __entry->si_id = stp->si_opaque.so_id;
683                 __entry->si_generation = stp->si_generation;
684         ),
685         TP_printk("client %08x:%08x stateid %08x:%08x ref=%d type=%s",
686                 __entry->cl_boot, __entry->cl_id,
687                 __entry->si_id, __entry->si_generation,
688                 __entry->sc_count, show_stid_type(__entry->sc_type)
689         )
690 );
691
692 #define DEFINE_STID_EVENT(name)                                 \
693 DEFINE_EVENT(nfsd_stid_class, nfsd_stid_##name,                 \
694         TP_PROTO(const struct nfs4_stid *stid),                 \
695         TP_ARGS(stid))
696
697 DEFINE_STID_EVENT(revoke);
698
699 DECLARE_EVENT_CLASS(nfsd_clientid_class,
700         TP_PROTO(const clientid_t *clid),
701         TP_ARGS(clid),
702         TP_STRUCT__entry(
703                 __field(u32, cl_boot)
704                 __field(u32, cl_id)
705         ),
706         TP_fast_assign(
707                 __entry->cl_boot = clid->cl_boot;
708                 __entry->cl_id = clid->cl_id;
709         ),
710         TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
711 )
712
713 #define DEFINE_CLIENTID_EVENT(name) \
714 DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \
715         TP_PROTO(const clientid_t *clid), \
716         TP_ARGS(clid))
717
718 DEFINE_CLIENTID_EVENT(expire_unconf);
719 DEFINE_CLIENTID_EVENT(reclaim_complete);
720 DEFINE_CLIENTID_EVENT(confirmed);
721 DEFINE_CLIENTID_EVENT(destroyed);
722 DEFINE_CLIENTID_EVENT(admin_expired);
723 DEFINE_CLIENTID_EVENT(replaced);
724 DEFINE_CLIENTID_EVENT(purged);
725 DEFINE_CLIENTID_EVENT(renew);
726 DEFINE_CLIENTID_EVENT(stale);
727
728 DECLARE_EVENT_CLASS(nfsd_net_class,
729         TP_PROTO(const struct nfsd_net *nn),
730         TP_ARGS(nn),
731         TP_STRUCT__entry(
732                 __field(unsigned long long, boot_time)
733         ),
734         TP_fast_assign(
735                 __entry->boot_time = nn->boot_time;
736         ),
737         TP_printk("boot_time=%16llx", __entry->boot_time)
738 )
739
740 #define DEFINE_NET_EVENT(name) \
741 DEFINE_EVENT(nfsd_net_class, nfsd_##name, \
742         TP_PROTO(const struct nfsd_net *nn), \
743         TP_ARGS(nn))
744
745 DEFINE_NET_EVENT(grace_start);
746 DEFINE_NET_EVENT(grace_complete);
747
748 TRACE_EVENT(nfsd_writeverf_reset,
749         TP_PROTO(
750                 const struct nfsd_net *nn,
751                 const struct svc_rqst *rqstp,
752                 int error
753         ),
754         TP_ARGS(nn, rqstp, error),
755         TP_STRUCT__entry(
756                 __field(unsigned long long, boot_time)
757                 __field(u32, xid)
758                 __field(int, error)
759                 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
760         ),
761         TP_fast_assign(
762                 __entry->boot_time = nn->boot_time;
763                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
764                 __entry->error = error;
765
766                 /* avoid seqlock inside TP_fast_assign */
767                 memcpy(__entry->verifier, nn->writeverf,
768                        NFS4_VERIFIER_SIZE);
769         ),
770         TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s",
771                 __entry->boot_time, __entry->xid, __entry->error,
772                 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
773         )
774 );
775
776 TRACE_EVENT(nfsd_clid_cred_mismatch,
777         TP_PROTO(
778                 const struct nfs4_client *clp,
779                 const struct svc_rqst *rqstp
780         ),
781         TP_ARGS(clp, rqstp),
782         TP_STRUCT__entry(
783                 __field(u32, cl_boot)
784                 __field(u32, cl_id)
785                 __field(unsigned long, cl_flavor)
786                 __field(unsigned long, new_flavor)
787                 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
788         ),
789         TP_fast_assign(
790                 __entry->cl_boot = clp->cl_clientid.cl_boot;
791                 __entry->cl_id = clp->cl_clientid.cl_id;
792                 __entry->cl_flavor = clp->cl_cred.cr_flavor;
793                 __entry->new_flavor = rqstp->rq_cred.cr_flavor;
794                 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
795                                   rqstp->rq_xprt->xpt_remotelen);
796         ),
797         TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc",
798                 __entry->cl_boot, __entry->cl_id,
799                 show_nfsd_authflavor(__entry->cl_flavor),
800                 show_nfsd_authflavor(__entry->new_flavor),
801                 __get_sockaddr(addr)
802         )
803 )
804
805 TRACE_EVENT(nfsd_clid_verf_mismatch,
806         TP_PROTO(
807                 const struct nfs4_client *clp,
808                 const struct svc_rqst *rqstp,
809                 const nfs4_verifier *verf
810         ),
811         TP_ARGS(clp, rqstp, verf),
812         TP_STRUCT__entry(
813                 __field(u32, cl_boot)
814                 __field(u32, cl_id)
815                 __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE)
816                 __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE)
817                 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
818         ),
819         TP_fast_assign(
820                 __entry->cl_boot = clp->cl_clientid.cl_boot;
821                 __entry->cl_id = clp->cl_clientid.cl_id;
822                 memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier,
823                        NFS4_VERIFIER_SIZE);
824                 memcpy(__entry->new_verifier, (void *)verf,
825                        NFS4_VERIFIER_SIZE);
826                 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
827                                   rqstp->rq_xprt->xpt_remotelen);
828         ),
829         TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc",
830                 __entry->cl_boot, __entry->cl_id,
831                 __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE),
832                 __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE),
833                 __get_sockaddr(addr)
834         )
835 );
836
837 DECLARE_EVENT_CLASS(nfsd_clid_class,
838         TP_PROTO(const struct nfs4_client *clp),
839         TP_ARGS(clp),
840         TP_STRUCT__entry(
841                 __field(u32, cl_boot)
842                 __field(u32, cl_id)
843                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
844                 __field(unsigned long, flavor)
845                 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
846                 __string_len(name, name, clp->cl_name.len)
847         ),
848         TP_fast_assign(
849                 __entry->cl_boot = clp->cl_clientid.cl_boot;
850                 __entry->cl_id = clp->cl_clientid.cl_id;
851                 memcpy(__entry->addr, &clp->cl_addr,
852                         sizeof(struct sockaddr_in6));
853                 __entry->flavor = clp->cl_cred.cr_flavor;
854                 memcpy(__entry->verifier, (void *)&clp->cl_verifier,
855                        NFS4_VERIFIER_SIZE);
856                 __assign_str_len(name, clp->cl_name.data, clp->cl_name.len);
857         ),
858         TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x",
859                 __entry->addr, __get_str(name),
860                 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE),
861                 show_nfsd_authflavor(__entry->flavor),
862                 __entry->cl_boot, __entry->cl_id)
863 );
864
865 #define DEFINE_CLID_EVENT(name) \
866 DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \
867         TP_PROTO(const struct nfs4_client *clp), \
868         TP_ARGS(clp))
869
870 DEFINE_CLID_EVENT(fresh);
871 DEFINE_CLID_EVENT(confirmed_r);
872
873 /*
874  * from fs/nfsd/filecache.h
875  */
876 #define show_nf_flags(val)                                              \
877         __print_flags(val, "|",                                         \
878                 { 1 << NFSD_FILE_HASHED,        "HASHED" },             \
879                 { 1 << NFSD_FILE_PENDING,       "PENDING" },            \
880                 { 1 << NFSD_FILE_REFERENCED,    "REFERENCED" },         \
881                 { 1 << NFSD_FILE_GC,            "GC" })
882
883 DECLARE_EVENT_CLASS(nfsd_file_class,
884         TP_PROTO(struct nfsd_file *nf),
885         TP_ARGS(nf),
886         TP_STRUCT__entry(
887                 __field(void *, nf_inode)
888                 __field(int, nf_ref)
889                 __field(unsigned long, nf_flags)
890                 __field(unsigned char, nf_may)
891                 __field(struct file *, nf_file)
892         ),
893         TP_fast_assign(
894                 __entry->nf_inode = nf->nf_inode;
895                 __entry->nf_ref = refcount_read(&nf->nf_ref);
896                 __entry->nf_flags = nf->nf_flags;
897                 __entry->nf_may = nf->nf_may;
898                 __entry->nf_file = nf->nf_file;
899         ),
900         TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p",
901                 __entry->nf_inode,
902                 __entry->nf_ref,
903                 show_nf_flags(__entry->nf_flags),
904                 show_nfsd_may_flags(__entry->nf_may),
905                 __entry->nf_file)
906 )
907
908 #define DEFINE_NFSD_FILE_EVENT(name) \
909 DEFINE_EVENT(nfsd_file_class, name, \
910         TP_PROTO(struct nfsd_file *nf), \
911         TP_ARGS(nf))
912
913 DEFINE_NFSD_FILE_EVENT(nfsd_file_free);
914 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash);
915 DEFINE_NFSD_FILE_EVENT(nfsd_file_put);
916 DEFINE_NFSD_FILE_EVENT(nfsd_file_closing);
917 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_queue);
918
919 TRACE_EVENT(nfsd_file_alloc,
920         TP_PROTO(
921                 const struct nfsd_file *nf
922         ),
923         TP_ARGS(nf),
924         TP_STRUCT__entry(
925                 __field(const void *, nf_inode)
926                 __field(unsigned long, nf_flags)
927                 __field(unsigned long, nf_may)
928                 __field(unsigned int, nf_ref)
929         ),
930         TP_fast_assign(
931                 __entry->nf_inode = nf->nf_inode;
932                 __entry->nf_flags = nf->nf_flags;
933                 __entry->nf_ref = refcount_read(&nf->nf_ref);
934                 __entry->nf_may = nf->nf_may;
935         ),
936         TP_printk("inode=%p ref=%u flags=%s may=%s",
937                 __entry->nf_inode, __entry->nf_ref,
938                 show_nf_flags(__entry->nf_flags),
939                 show_nfsd_may_flags(__entry->nf_may)
940         )
941 );
942
943 TRACE_EVENT(nfsd_file_acquire,
944         TP_PROTO(
945                 const struct svc_rqst *rqstp,
946                 const struct inode *inode,
947                 unsigned int may_flags,
948                 const struct nfsd_file *nf,
949                 __be32 status
950         ),
951
952         TP_ARGS(rqstp, inode, may_flags, nf, status),
953
954         TP_STRUCT__entry(
955                 __field(u32, xid)
956                 __field(const void *, inode)
957                 __field(unsigned long, may_flags)
958                 __field(unsigned int, nf_ref)
959                 __field(unsigned long, nf_flags)
960                 __field(unsigned long, nf_may)
961                 __field(const void *, nf_file)
962                 __field(u32, status)
963         ),
964
965         TP_fast_assign(
966                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
967                 __entry->inode = inode;
968                 __entry->may_flags = may_flags;
969                 __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0;
970                 __entry->nf_flags = nf ? nf->nf_flags : 0;
971                 __entry->nf_may = nf ? nf->nf_may : 0;
972                 __entry->nf_file = nf ? nf->nf_file : NULL;
973                 __entry->status = be32_to_cpu(status);
974         ),
975
976         TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u",
977                         __entry->xid, __entry->inode,
978                         show_nfsd_may_flags(__entry->may_flags),
979                         __entry->nf_ref, show_nf_flags(__entry->nf_flags),
980                         show_nfsd_may_flags(__entry->nf_may),
981                         __entry->nf_file, __entry->status
982         )
983 );
984
985 TRACE_EVENT(nfsd_file_insert_err,
986         TP_PROTO(
987                 const struct svc_rqst *rqstp,
988                 const struct inode *inode,
989                 unsigned int may_flags,
990                 long error
991         ),
992         TP_ARGS(rqstp, inode, may_flags, error),
993         TP_STRUCT__entry(
994                 __field(u32, xid)
995                 __field(const void *, inode)
996                 __field(unsigned long, may_flags)
997                 __field(long, error)
998         ),
999         TP_fast_assign(
1000                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
1001                 __entry->inode = inode;
1002                 __entry->may_flags = may_flags;
1003                 __entry->error = error;
1004         ),
1005         TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld",
1006                 __entry->xid, __entry->inode,
1007                 show_nfsd_may_flags(__entry->may_flags),
1008                 __entry->error
1009         )
1010 );
1011
1012 TRACE_EVENT(nfsd_file_cons_err,
1013         TP_PROTO(
1014                 const struct svc_rqst *rqstp,
1015                 const struct inode *inode,
1016                 unsigned int may_flags,
1017                 const struct nfsd_file *nf
1018         ),
1019         TP_ARGS(rqstp, inode, may_flags, nf),
1020         TP_STRUCT__entry(
1021                 __field(u32, xid)
1022                 __field(const void *, inode)
1023                 __field(unsigned long, may_flags)
1024                 __field(unsigned int, nf_ref)
1025                 __field(unsigned long, nf_flags)
1026                 __field(unsigned long, nf_may)
1027                 __field(const void *, nf_file)
1028         ),
1029         TP_fast_assign(
1030                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
1031                 __entry->inode = inode;
1032                 __entry->may_flags = may_flags;
1033                 __entry->nf_ref = refcount_read(&nf->nf_ref);
1034                 __entry->nf_flags = nf->nf_flags;
1035                 __entry->nf_may = nf->nf_may;
1036                 __entry->nf_file = nf->nf_file;
1037         ),
1038         TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p",
1039                 __entry->xid, __entry->inode,
1040                 show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref,
1041                 show_nf_flags(__entry->nf_flags),
1042                 show_nfsd_may_flags(__entry->nf_may), __entry->nf_file
1043         )
1044 );
1045
1046 DECLARE_EVENT_CLASS(nfsd_file_open_class,
1047         TP_PROTO(const struct nfsd_file *nf, __be32 status),
1048         TP_ARGS(nf, status),
1049         TP_STRUCT__entry(
1050                 __field(void *, nf_inode)       /* cannot be dereferenced */
1051                 __field(int, nf_ref)
1052                 __field(unsigned long, nf_flags)
1053                 __field(unsigned long, nf_may)
1054                 __field(void *, nf_file)        /* cannot be dereferenced */
1055         ),
1056         TP_fast_assign(
1057                 __entry->nf_inode = nf->nf_inode;
1058                 __entry->nf_ref = refcount_read(&nf->nf_ref);
1059                 __entry->nf_flags = nf->nf_flags;
1060                 __entry->nf_may = nf->nf_may;
1061                 __entry->nf_file = nf->nf_file;
1062         ),
1063         TP_printk("inode=%p ref=%d flags=%s may=%s file=%p",
1064                 __entry->nf_inode,
1065                 __entry->nf_ref,
1066                 show_nf_flags(__entry->nf_flags),
1067                 show_nfsd_may_flags(__entry->nf_may),
1068                 __entry->nf_file)
1069 )
1070
1071 #define DEFINE_NFSD_FILE_OPEN_EVENT(name)                                       \
1072 DEFINE_EVENT(nfsd_file_open_class, name,                                        \
1073         TP_PROTO(                                                       \
1074                 const struct nfsd_file *nf,                             \
1075                 __be32 status                                           \
1076         ),                                                              \
1077         TP_ARGS(nf, status))
1078
1079 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_open);
1080 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_opened);
1081
1082 TRACE_EVENT(nfsd_file_is_cached,
1083         TP_PROTO(
1084                 const struct inode *inode,
1085                 int found
1086         ),
1087         TP_ARGS(inode, found),
1088         TP_STRUCT__entry(
1089                 __field(const struct inode *, inode)
1090                 __field(int, found)
1091         ),
1092         TP_fast_assign(
1093                 __entry->inode = inode;
1094                 __entry->found = found;
1095         ),
1096         TP_printk("inode=%p is %scached",
1097                 __entry->inode,
1098                 __entry->found ? "" : "not "
1099         )
1100 );
1101
1102 TRACE_EVENT(nfsd_file_fsnotify_handle_event,
1103         TP_PROTO(struct inode *inode, u32 mask),
1104         TP_ARGS(inode, mask),
1105         TP_STRUCT__entry(
1106                 __field(struct inode *, inode)
1107                 __field(unsigned int, nlink)
1108                 __field(umode_t, mode)
1109                 __field(u32, mask)
1110         ),
1111         TP_fast_assign(
1112                 __entry->inode = inode;
1113                 __entry->nlink = inode->i_nlink;
1114                 __entry->mode = inode->i_mode;
1115                 __entry->mask = mask;
1116         ),
1117         TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode,
1118                         __entry->nlink, __entry->mode, __entry->mask)
1119 );
1120
1121 DECLARE_EVENT_CLASS(nfsd_file_gc_class,
1122         TP_PROTO(
1123                 const struct nfsd_file *nf
1124         ),
1125         TP_ARGS(nf),
1126         TP_STRUCT__entry(
1127                 __field(void *, nf_inode)
1128                 __field(void *, nf_file)
1129                 __field(int, nf_ref)
1130                 __field(unsigned long, nf_flags)
1131         ),
1132         TP_fast_assign(
1133                 __entry->nf_inode = nf->nf_inode;
1134                 __entry->nf_file = nf->nf_file;
1135                 __entry->nf_ref = refcount_read(&nf->nf_ref);
1136                 __entry->nf_flags = nf->nf_flags;
1137         ),
1138         TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p",
1139                 __entry->nf_inode, __entry->nf_ref,
1140                 show_nf_flags(__entry->nf_flags),
1141                 __entry->nf_file
1142         )
1143 );
1144
1145 #define DEFINE_NFSD_FILE_GC_EVENT(name)                                 \
1146 DEFINE_EVENT(nfsd_file_gc_class, name,                                  \
1147         TP_PROTO(                                                       \
1148                 const struct nfsd_file *nf                              \
1149         ),                                                              \
1150         TP_ARGS(nf))
1151
1152 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add);
1153 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed);
1154 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del);
1155 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed);
1156 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use);
1157 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback);
1158 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced);
1159 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed);
1160
1161 DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class,
1162         TP_PROTO(
1163                 unsigned long removed,
1164                 unsigned long remaining
1165         ),
1166         TP_ARGS(removed, remaining),
1167         TP_STRUCT__entry(
1168                 __field(unsigned long, removed)
1169                 __field(unsigned long, remaining)
1170         ),
1171         TP_fast_assign(
1172                 __entry->removed = removed;
1173                 __entry->remaining = remaining;
1174         ),
1175         TP_printk("%lu entries removed, %lu remaining",
1176                 __entry->removed, __entry->remaining)
1177 );
1178
1179 #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name)                            \
1180 DEFINE_EVENT(nfsd_file_lruwalk_class, name,                             \
1181         TP_PROTO(                                                       \
1182                 unsigned long removed,                                  \
1183                 unsigned long remaining                                 \
1184         ),                                                              \
1185         TP_ARGS(removed, remaining))
1186
1187 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed);
1188 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed);
1189
1190 TRACE_EVENT(nfsd_file_close,
1191         TP_PROTO(
1192                 const struct inode *inode
1193         ),
1194         TP_ARGS(inode),
1195         TP_STRUCT__entry(
1196                 __field(const void *, inode)
1197         ),
1198         TP_fast_assign(
1199                 __entry->inode = inode;
1200         ),
1201         TP_printk("inode=%p",
1202                 __entry->inode
1203         )
1204 );
1205
1206 #include "cache.h"
1207
1208 TRACE_DEFINE_ENUM(RC_DROPIT);
1209 TRACE_DEFINE_ENUM(RC_REPLY);
1210 TRACE_DEFINE_ENUM(RC_DOIT);
1211
1212 #define show_drc_retval(x)                                              \
1213         __print_symbolic(x,                                             \
1214                 { RC_DROPIT, "DROPIT" },                                \
1215                 { RC_REPLY, "REPLY" },                                  \
1216                 { RC_DOIT, "DOIT" })
1217
1218 TRACE_EVENT(nfsd_drc_found,
1219         TP_PROTO(
1220                 const struct nfsd_net *nn,
1221                 const struct svc_rqst *rqstp,
1222                 int result
1223         ),
1224         TP_ARGS(nn, rqstp, result),
1225         TP_STRUCT__entry(
1226                 __field(unsigned long long, boot_time)
1227                 __field(unsigned long, result)
1228                 __field(u32, xid)
1229         ),
1230         TP_fast_assign(
1231                 __entry->boot_time = nn->boot_time;
1232                 __entry->result = result;
1233                 __entry->xid = be32_to_cpu(rqstp->rq_xid);
1234         ),
1235         TP_printk("boot_time=%16llx xid=0x%08x result=%s",
1236                 __entry->boot_time, __entry->xid,
1237                 show_drc_retval(__entry->result))
1238
1239 );
1240
1241 TRACE_EVENT(nfsd_drc_mismatch,
1242         TP_PROTO(
1243                 const struct nfsd_net *nn,
1244                 const struct nfsd_cacherep *key,
1245                 const struct nfsd_cacherep *rp
1246         ),
1247         TP_ARGS(nn, key, rp),
1248         TP_STRUCT__entry(
1249                 __field(unsigned long long, boot_time)
1250                 __field(u32, xid)
1251                 __field(u32, cached)
1252                 __field(u32, ingress)
1253         ),
1254         TP_fast_assign(
1255                 __entry->boot_time = nn->boot_time;
1256                 __entry->xid = be32_to_cpu(key->c_key.k_xid);
1257                 __entry->cached = (__force u32)key->c_key.k_csum;
1258                 __entry->ingress = (__force u32)rp->c_key.k_csum;
1259         ),
1260         TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x",
1261                 __entry->boot_time, __entry->xid, __entry->cached,
1262                 __entry->ingress)
1263 );
1264
1265 TRACE_EVENT_CONDITION(nfsd_drc_gc,
1266         TP_PROTO(
1267                 const struct nfsd_net *nn,
1268                 unsigned long freed
1269         ),
1270         TP_ARGS(nn, freed),
1271         TP_CONDITION(freed > 0),
1272         TP_STRUCT__entry(
1273                 __field(unsigned long long, boot_time)
1274                 __field(unsigned long, freed)
1275                 __field(int, total)
1276         ),
1277         TP_fast_assign(
1278                 __entry->boot_time = nn->boot_time;
1279                 __entry->freed = freed;
1280                 __entry->total = atomic_read(&nn->num_drc_entries);
1281         ),
1282         TP_printk("boot_time=%16llx total=%d freed=%lu",
1283                 __entry->boot_time, __entry->total, __entry->freed
1284         )
1285 );
1286
1287 TRACE_EVENT(nfsd_cb_args,
1288         TP_PROTO(
1289                 const struct nfs4_client *clp,
1290                 const struct nfs4_cb_conn *conn
1291         ),
1292         TP_ARGS(clp, conn),
1293         TP_STRUCT__entry(
1294                 __field(u32, cl_boot)
1295                 __field(u32, cl_id)
1296                 __field(u32, prog)
1297                 __field(u32, ident)
1298                 __sockaddr(addr, conn->cb_addrlen)
1299         ),
1300         TP_fast_assign(
1301                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1302                 __entry->cl_id = clp->cl_clientid.cl_id;
1303                 __entry->prog = conn->cb_prog;
1304                 __entry->ident = conn->cb_ident;
1305                 __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen);
1306         ),
1307         TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u",
1308                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1309                 __entry->prog, __entry->ident)
1310 );
1311
1312 TRACE_EVENT(nfsd_cb_nodelegs,
1313         TP_PROTO(const struct nfs4_client *clp),
1314         TP_ARGS(clp),
1315         TP_STRUCT__entry(
1316                 __field(u32, cl_boot)
1317                 __field(u32, cl_id)
1318         ),
1319         TP_fast_assign(
1320                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1321                 __entry->cl_id = clp->cl_clientid.cl_id;
1322         ),
1323         TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
1324 )
1325
1326 #define show_cb_state(val)                                              \
1327         __print_symbolic(val,                                           \
1328                 { NFSD4_CB_UP,          "UP" },                         \
1329                 { NFSD4_CB_UNKNOWN,     "UNKNOWN" },                    \
1330                 { NFSD4_CB_DOWN,        "DOWN" },                       \
1331                 { NFSD4_CB_FAULT,       "FAULT"})
1332
1333 DECLARE_EVENT_CLASS(nfsd_cb_class,
1334         TP_PROTO(const struct nfs4_client *clp),
1335         TP_ARGS(clp),
1336         TP_STRUCT__entry(
1337                 __field(unsigned long, state)
1338                 __field(u32, cl_boot)
1339                 __field(u32, cl_id)
1340                 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1341         ),
1342         TP_fast_assign(
1343                 __entry->state = clp->cl_cb_state;
1344                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1345                 __entry->cl_id = clp->cl_clientid.cl_id;
1346                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1347                                   clp->cl_cb_conn.cb_addrlen)
1348         ),
1349         TP_printk("addr=%pISpc client %08x:%08x state=%s",
1350                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1351                 show_cb_state(__entry->state))
1352 );
1353
1354 #define DEFINE_NFSD_CB_EVENT(name)                      \
1355 DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name,             \
1356         TP_PROTO(const struct nfs4_client *clp),        \
1357         TP_ARGS(clp))
1358
1359 DEFINE_NFSD_CB_EVENT(state);
1360 DEFINE_NFSD_CB_EVENT(probe);
1361 DEFINE_NFSD_CB_EVENT(lost);
1362 DEFINE_NFSD_CB_EVENT(shutdown);
1363
1364 TRACE_DEFINE_ENUM(RPC_AUTH_NULL);
1365 TRACE_DEFINE_ENUM(RPC_AUTH_UNIX);
1366 TRACE_DEFINE_ENUM(RPC_AUTH_GSS);
1367 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
1368 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
1369 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
1370
1371 #define show_nfsd_authflavor(val)                                       \
1372         __print_symbolic(val,                                           \
1373                 { RPC_AUTH_NULL,                "none" },               \
1374                 { RPC_AUTH_UNIX,                "sys" },                \
1375                 { RPC_AUTH_GSS,                 "gss" },                \
1376                 { RPC_AUTH_GSS_KRB5,            "krb5" },               \
1377                 { RPC_AUTH_GSS_KRB5I,           "krb5i" },              \
1378                 { RPC_AUTH_GSS_KRB5P,           "krb5p" })
1379
1380 TRACE_EVENT(nfsd_cb_setup,
1381         TP_PROTO(const struct nfs4_client *clp,
1382                  const char *netid,
1383                  rpc_authflavor_t authflavor
1384         ),
1385         TP_ARGS(clp, netid, authflavor),
1386         TP_STRUCT__entry(
1387                 __field(u32, cl_boot)
1388                 __field(u32, cl_id)
1389                 __field(unsigned long, authflavor)
1390                 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1391                 __string(netid, netid)
1392         ),
1393         TP_fast_assign(
1394                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1395                 __entry->cl_id = clp->cl_clientid.cl_id;
1396                 __assign_str(netid, netid);
1397                 __entry->authflavor = authflavor;
1398                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1399                                   clp->cl_cb_conn.cb_addrlen)
1400         ),
1401         TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
1402                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1403                 __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
1404 );
1405
1406 TRACE_EVENT(nfsd_cb_setup_err,
1407         TP_PROTO(
1408                 const struct nfs4_client *clp,
1409                 long error
1410         ),
1411         TP_ARGS(clp, error),
1412         TP_STRUCT__entry(
1413                 __field(long, error)
1414                 __field(u32, cl_boot)
1415                 __field(u32, cl_id)
1416                 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1417         ),
1418         TP_fast_assign(
1419                 __entry->error = error;
1420                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1421                 __entry->cl_id = clp->cl_clientid.cl_id;
1422                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1423                                   clp->cl_cb_conn.cb_addrlen)
1424         ),
1425         TP_printk("addr=%pISpc client %08x:%08x error=%ld",
1426                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1427                 __entry->error)
1428 );
1429
1430 TRACE_EVENT_CONDITION(nfsd_cb_recall,
1431         TP_PROTO(
1432                 const struct nfs4_stid *stid
1433         ),
1434         TP_ARGS(stid),
1435         TP_CONDITION(stid->sc_client),
1436         TP_STRUCT__entry(
1437                 __field(u32, cl_boot)
1438                 __field(u32, cl_id)
1439                 __field(u32, si_id)
1440                 __field(u32, si_generation)
1441                 __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen)
1442         ),
1443         TP_fast_assign(
1444                 const stateid_t *stp = &stid->sc_stateid;
1445                 const struct nfs4_client *clp = stid->sc_client;
1446
1447                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1448                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1449                 __entry->si_id = stp->si_opaque.so_id;
1450                 __entry->si_generation = stp->si_generation;
1451                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1452                                   clp->cl_cb_conn.cb_addrlen)
1453         ),
1454         TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x",
1455                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1456                 __entry->si_id, __entry->si_generation)
1457 );
1458
1459 TRACE_EVENT(nfsd_cb_notify_lock,
1460         TP_PROTO(
1461                 const struct nfs4_lockowner *lo,
1462                 const struct nfsd4_blocked_lock *nbl
1463         ),
1464         TP_ARGS(lo, nbl),
1465         TP_STRUCT__entry(
1466                 __field(u32, cl_boot)
1467                 __field(u32, cl_id)
1468                 __field(u32, fh_hash)
1469                 __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen)
1470         ),
1471         TP_fast_assign(
1472                 const struct nfs4_client *clp = lo->lo_owner.so_client;
1473
1474                 __entry->cl_boot = clp->cl_clientid.cl_boot;
1475                 __entry->cl_id = clp->cl_clientid.cl_id;
1476                 __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh);
1477                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1478                                   clp->cl_cb_conn.cb_addrlen)
1479         ),
1480         TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x",
1481                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1482                 __entry->fh_hash)
1483 );
1484
1485 TRACE_EVENT(nfsd_cb_offload,
1486         TP_PROTO(
1487                 const struct nfs4_client *clp,
1488                 const stateid_t *stp,
1489                 const struct knfsd_fh *fh,
1490                 u64 count,
1491                 __be32 status
1492         ),
1493         TP_ARGS(clp, stp, fh, count, status),
1494         TP_STRUCT__entry(
1495                 __field(u32, cl_boot)
1496                 __field(u32, cl_id)
1497                 __field(u32, si_id)
1498                 __field(u32, si_generation)
1499                 __field(u32, fh_hash)
1500                 __field(int, status)
1501                 __field(u64, count)
1502                 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1503         ),
1504         TP_fast_assign(
1505                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1506                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1507                 __entry->si_id = stp->si_opaque.so_id;
1508                 __entry->si_generation = stp->si_generation;
1509                 __entry->fh_hash = knfsd_fh_hash(fh);
1510                 __entry->status = be32_to_cpu(status);
1511                 __entry->count = count;
1512                 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1513                                   clp->cl_cb_conn.cb_addrlen)
1514         ),
1515         TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d",
1516                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1517                 __entry->si_id, __entry->si_generation,
1518                 __entry->fh_hash, __entry->count, __entry->status)
1519 );
1520
1521 TRACE_EVENT(nfsd_cb_recall_any,
1522         TP_PROTO(
1523                 const struct nfsd4_cb_recall_any *ra
1524         ),
1525         TP_ARGS(ra),
1526         TP_STRUCT__entry(
1527                 __field(u32, cl_boot)
1528                 __field(u32, cl_id)
1529                 __field(u32, keep)
1530                 __field(unsigned long, bmval0)
1531                 __sockaddr(addr, ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen)
1532         ),
1533         TP_fast_assign(
1534                 __entry->cl_boot = ra->ra_cb.cb_clp->cl_clientid.cl_boot;
1535                 __entry->cl_id = ra->ra_cb.cb_clp->cl_clientid.cl_id;
1536                 __entry->keep = ra->ra_keep;
1537                 __entry->bmval0 = ra->ra_bmval[0];
1538                 __assign_sockaddr(addr, &ra->ra_cb.cb_clp->cl_addr,
1539                                   ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen);
1540         ),
1541         TP_printk("addr=%pISpc client %08x:%08x keep=%u bmval0=%s",
1542                 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1543                 __entry->keep, show_rca_mask(__entry->bmval0)
1544         )
1545 );
1546
1547 DECLARE_EVENT_CLASS(nfsd_cb_done_class,
1548         TP_PROTO(
1549                 const stateid_t *stp,
1550                 const struct rpc_task *task
1551         ),
1552         TP_ARGS(stp, task),
1553         TP_STRUCT__entry(
1554                 __field(u32, cl_boot)
1555                 __field(u32, cl_id)
1556                 __field(u32, si_id)
1557                 __field(u32, si_generation)
1558                 __field(int, status)
1559         ),
1560         TP_fast_assign(
1561                 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1562                 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1563                 __entry->si_id = stp->si_opaque.so_id;
1564                 __entry->si_generation = stp->si_generation;
1565                 __entry->status = task->tk_status;
1566         ),
1567         TP_printk("client %08x:%08x stateid %08x:%08x status=%d",
1568                 __entry->cl_boot, __entry->cl_id, __entry->si_id,
1569                 __entry->si_generation, __entry->status
1570         )
1571 );
1572
1573 #define DEFINE_NFSD_CB_DONE_EVENT(name)                 \
1574 DEFINE_EVENT(nfsd_cb_done_class, name,                  \
1575         TP_PROTO(                                       \
1576                 const stateid_t *stp,                   \
1577                 const struct rpc_task *task             \
1578         ),                                              \
1579         TP_ARGS(stp, task))
1580
1581 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_recall_done);
1582 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_notify_lock_done);
1583 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_layout_done);
1584 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_offload_done);
1585
1586 TRACE_EVENT(nfsd_cb_recall_any_done,
1587         TP_PROTO(
1588                 const struct nfsd4_callback *cb,
1589                 const struct rpc_task *task
1590         ),
1591         TP_ARGS(cb, task),
1592         TP_STRUCT__entry(
1593                 __field(u32, cl_boot)
1594                 __field(u32, cl_id)
1595                 __field(int, status)
1596         ),
1597         TP_fast_assign(
1598                 __entry->status = task->tk_status;
1599                 __entry->cl_boot = cb->cb_clp->cl_clientid.cl_boot;
1600                 __entry->cl_id = cb->cb_clp->cl_clientid.cl_id;
1601         ),
1602         TP_printk("client %08x:%08x status=%d",
1603                 __entry->cl_boot, __entry->cl_id, __entry->status
1604         )
1605 );
1606
1607 TRACE_EVENT(nfsd_ctl_unlock_ip,
1608         TP_PROTO(
1609                 const struct net *net,
1610                 const char *address
1611         ),
1612         TP_ARGS(net, address),
1613         TP_STRUCT__entry(
1614                 __field(unsigned int, netns_ino)
1615                 __string(address, address)
1616         ),
1617         TP_fast_assign(
1618                 __entry->netns_ino = net->ns.inum;
1619                 __assign_str(address, address);
1620         ),
1621         TP_printk("address=%s",
1622                 __get_str(address)
1623         )
1624 );
1625
1626 TRACE_EVENT(nfsd_ctl_unlock_fs,
1627         TP_PROTO(
1628                 const struct net *net,
1629                 const char *path
1630         ),
1631         TP_ARGS(net, path),
1632         TP_STRUCT__entry(
1633                 __field(unsigned int, netns_ino)
1634                 __string(path, path)
1635         ),
1636         TP_fast_assign(
1637                 __entry->netns_ino = net->ns.inum;
1638                 __assign_str(path, path);
1639         ),
1640         TP_printk("path=%s",
1641                 __get_str(path)
1642         )
1643 );
1644
1645 TRACE_EVENT(nfsd_ctl_filehandle,
1646         TP_PROTO(
1647                 const struct net *net,
1648                 const char *domain,
1649                 const char *path,
1650                 int maxsize
1651         ),
1652         TP_ARGS(net, domain, path, maxsize),
1653         TP_STRUCT__entry(
1654                 __field(unsigned int, netns_ino)
1655                 __field(int, maxsize)
1656                 __string(domain, domain)
1657                 __string(path, path)
1658         ),
1659         TP_fast_assign(
1660                 __entry->netns_ino = net->ns.inum;
1661                 __entry->maxsize = maxsize;
1662                 __assign_str(domain, domain);
1663                 __assign_str(path, path);
1664         ),
1665         TP_printk("domain=%s path=%s maxsize=%d",
1666                 __get_str(domain), __get_str(path), __entry->maxsize
1667         )
1668 );
1669
1670 TRACE_EVENT(nfsd_ctl_threads,
1671         TP_PROTO(
1672                 const struct net *net,
1673                 int newthreads
1674         ),
1675         TP_ARGS(net, newthreads),
1676         TP_STRUCT__entry(
1677                 __field(unsigned int, netns_ino)
1678                 __field(int, newthreads)
1679         ),
1680         TP_fast_assign(
1681                 __entry->netns_ino = net->ns.inum;
1682                 __entry->newthreads = newthreads;
1683         ),
1684         TP_printk("newthreads=%d",
1685                 __entry->newthreads
1686         )
1687 );
1688
1689 TRACE_EVENT(nfsd_ctl_pool_threads,
1690         TP_PROTO(
1691                 const struct net *net,
1692                 int pool,
1693                 int nrthreads
1694         ),
1695         TP_ARGS(net, pool, nrthreads),
1696         TP_STRUCT__entry(
1697                 __field(unsigned int, netns_ino)
1698                 __field(int, pool)
1699                 __field(int, nrthreads)
1700         ),
1701         TP_fast_assign(
1702                 __entry->netns_ino = net->ns.inum;
1703                 __entry->pool = pool;
1704                 __entry->nrthreads = nrthreads;
1705         ),
1706         TP_printk("pool=%d nrthreads=%d",
1707                 __entry->pool, __entry->nrthreads
1708         )
1709 );
1710
1711 TRACE_EVENT(nfsd_ctl_version,
1712         TP_PROTO(
1713                 const struct net *net,
1714                 const char *mesg
1715         ),
1716         TP_ARGS(net, mesg),
1717         TP_STRUCT__entry(
1718                 __field(unsigned int, netns_ino)
1719                 __string(mesg, mesg)
1720         ),
1721         TP_fast_assign(
1722                 __entry->netns_ino = net->ns.inum;
1723                 __assign_str(mesg, mesg);
1724         ),
1725         TP_printk("%s",
1726                 __get_str(mesg)
1727         )
1728 );
1729
1730 TRACE_EVENT(nfsd_ctl_ports_addfd,
1731         TP_PROTO(
1732                 const struct net *net,
1733                 int fd
1734         ),
1735         TP_ARGS(net, fd),
1736         TP_STRUCT__entry(
1737                 __field(unsigned int, netns_ino)
1738                 __field(int, fd)
1739         ),
1740         TP_fast_assign(
1741                 __entry->netns_ino = net->ns.inum;
1742                 __entry->fd = fd;
1743         ),
1744         TP_printk("fd=%d",
1745                 __entry->fd
1746         )
1747 );
1748
1749 TRACE_EVENT(nfsd_ctl_ports_addxprt,
1750         TP_PROTO(
1751                 const struct net *net,
1752                 const char *transport,
1753                 int port
1754         ),
1755         TP_ARGS(net, transport, port),
1756         TP_STRUCT__entry(
1757                 __field(unsigned int, netns_ino)
1758                 __field(int, port)
1759                 __string(transport, transport)
1760         ),
1761         TP_fast_assign(
1762                 __entry->netns_ino = net->ns.inum;
1763                 __entry->port = port;
1764                 __assign_str(transport, transport);
1765         ),
1766         TP_printk("transport=%s port=%d",
1767                 __get_str(transport), __entry->port
1768         )
1769 );
1770
1771 TRACE_EVENT(nfsd_ctl_maxblksize,
1772         TP_PROTO(
1773                 const struct net *net,
1774                 int bsize
1775         ),
1776         TP_ARGS(net, bsize),
1777         TP_STRUCT__entry(
1778                 __field(unsigned int, netns_ino)
1779                 __field(int, bsize)
1780         ),
1781         TP_fast_assign(
1782                 __entry->netns_ino = net->ns.inum;
1783                 __entry->bsize = bsize;
1784         ),
1785         TP_printk("bsize=%d",
1786                 __entry->bsize
1787         )
1788 );
1789
1790 TRACE_EVENT(nfsd_ctl_maxconn,
1791         TP_PROTO(
1792                 const struct net *net,
1793                 int maxconn
1794         ),
1795         TP_ARGS(net, maxconn),
1796         TP_STRUCT__entry(
1797                 __field(unsigned int, netns_ino)
1798                 __field(int, maxconn)
1799         ),
1800         TP_fast_assign(
1801                 __entry->netns_ino = net->ns.inum;
1802                 __entry->maxconn = maxconn;
1803         ),
1804         TP_printk("maxconn=%d",
1805                 __entry->maxconn
1806         )
1807 );
1808
1809 TRACE_EVENT(nfsd_ctl_time,
1810         TP_PROTO(
1811                 const struct net *net,
1812                 const char *name,
1813                 size_t namelen,
1814                 int time
1815         ),
1816         TP_ARGS(net, name, namelen, time),
1817         TP_STRUCT__entry(
1818                 __field(unsigned int, netns_ino)
1819                 __field(int, time)
1820                 __string_len(name, name, namelen)
1821         ),
1822         TP_fast_assign(
1823                 __entry->netns_ino = net->ns.inum;
1824                 __entry->time = time;
1825                 __assign_str_len(name, name, namelen);
1826         ),
1827         TP_printk("file=%s time=%d\n",
1828                 __get_str(name), __entry->time
1829         )
1830 );
1831
1832 TRACE_EVENT(nfsd_ctl_recoverydir,
1833         TP_PROTO(
1834                 const struct net *net,
1835                 const char *recdir
1836         ),
1837         TP_ARGS(net, recdir),
1838         TP_STRUCT__entry(
1839                 __field(unsigned int, netns_ino)
1840                 __string(recdir, recdir)
1841         ),
1842         TP_fast_assign(
1843                 __entry->netns_ino = net->ns.inum;
1844                 __assign_str(recdir, recdir);
1845         ),
1846         TP_printk("recdir=%s",
1847                 __get_str(recdir)
1848         )
1849 );
1850
1851 TRACE_EVENT(nfsd_end_grace,
1852         TP_PROTO(
1853                 const struct net *net
1854         ),
1855         TP_ARGS(net),
1856         TP_STRUCT__entry(
1857                 __field(unsigned int, netns_ino)
1858         ),
1859         TP_fast_assign(
1860                 __entry->netns_ino = net->ns.inum;
1861         ),
1862         TP_printk("nn=%d", __entry->netns_ino
1863         )
1864 );
1865
1866 #endif /* _NFSD_TRACE_H */
1867
1868 #undef TRACE_INCLUDE_PATH
1869 #define TRACE_INCLUDE_PATH .
1870 #define TRACE_INCLUDE_FILE trace
1871 #include <trace/define_trace.h>