~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/nfsd/trace.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php