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, 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, 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, key->ek_client->name); 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, key->ek_client->name); 346 __assign_str(path, exp_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, key->ex_path.dentry->d_name.name); 369 __assign_str(auth_domain, key->ex_client->name); 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, key->ex_path.dentry->d_name.name); 389 __assign_str(auth_domain, key->ex_client->name); 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, 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_clientid_class, 753 TP_PROTO(const clientid_t *clid), 754 TP_ARGS(clid), 755 TP_STRUCT__entry( 756 __field(u32, cl_boot) 757 __field(u32, cl_id) 758 ), 759 TP_fast_assign( 760 __entry->cl_boot = clid->cl_boot; 761 __entry->cl_id = clid->cl_id; 762 ), 763 TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 764 ) 765 766 #define DEFINE_CLIENTID_EVENT(name) \ 767 DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \ 768 TP_PROTO(const clientid_t *clid), \ 769 TP_ARGS(clid)) 770 771 DEFINE_CLIENTID_EVENT(expire_unconf); 772 DEFINE_CLIENTID_EVENT(reclaim_complete); 773 DEFINE_CLIENTID_EVENT(confirmed); 774 DEFINE_CLIENTID_EVENT(destroyed); 775 DEFINE_CLIENTID_EVENT(admin_expired); 776 DEFINE_CLIENTID_EVENT(replaced); 777 DEFINE_CLIENTID_EVENT(purged); 778 DEFINE_CLIENTID_EVENT(renew); 779 DEFINE_CLIENTID_EVENT(stale); 780 781 DECLARE_EVENT_CLASS(nfsd_net_class, 782 TP_PROTO(const struct nfsd_net *nn), 783 TP_ARGS(nn), 784 TP_STRUCT__entry( 785 __field(unsigned long long, boot_time) 786 ), 787 TP_fast_assign( 788 __entry->boot_time = nn->boot_time; 789 ), 790 TP_printk("boot_time=%16llx", __entry->boot_time) 791 ) 792 793 #define DEFINE_NET_EVENT(name) \ 794 DEFINE_EVENT(nfsd_net_class, nfsd_##name, \ 795 TP_PROTO(const struct nfsd_net *nn), \ 796 TP_ARGS(nn)) 797 798 DEFINE_NET_EVENT(grace_start); 799 DEFINE_NET_EVENT(grace_complete); 800 801 TRACE_EVENT(nfsd_writeverf_reset, 802 TP_PROTO( 803 const struct nfsd_net *nn, 804 const struct svc_rqst *rqstp, 805 int error 806 ), 807 TP_ARGS(nn, rqstp, error), 808 TP_STRUCT__entry( 809 __field(unsigned long long, boot_time) 810 __field(u32, xid) 811 __field(int, error) 812 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 813 ), 814 TP_fast_assign( 815 __entry->boot_time = nn->boot_time; 816 __entry->xid = be32_to_cpu(rqstp->rq_xid); 817 __entry->error = error; 818 819 /* avoid seqlock inside TP_fast_assign */ 820 memcpy(__entry->verifier, nn->writeverf, 821 NFS4_VERIFIER_SIZE); 822 ), 823 TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s", 824 __entry->boot_time, __entry->xid, __entry->error, 825 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 826 ) 827 ); 828 829 TRACE_EVENT(nfsd_clid_cred_mismatch, 830 TP_PROTO( 831 const struct nfs4_client *clp, 832 const struct svc_rqst *rqstp 833 ), 834 TP_ARGS(clp, rqstp), 835 TP_STRUCT__entry( 836 __field(u32, cl_boot) 837 __field(u32, cl_id) 838 __field(unsigned long, cl_flavor) 839 __field(unsigned long, new_flavor) 840 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 841 ), 842 TP_fast_assign( 843 __entry->cl_boot = clp->cl_clientid.cl_boot; 844 __entry->cl_id = clp->cl_clientid.cl_id; 845 __entry->cl_flavor = clp->cl_cred.cr_flavor; 846 __entry->new_flavor = rqstp->rq_cred.cr_flavor; 847 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 848 rqstp->rq_xprt->xpt_remotelen); 849 ), 850 TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc", 851 __entry->cl_boot, __entry->cl_id, 852 show_nfsd_authflavor(__entry->cl_flavor), 853 show_nfsd_authflavor(__entry->new_flavor), 854 __get_sockaddr(addr) 855 ) 856 ) 857 858 TRACE_EVENT(nfsd_clid_verf_mismatch, 859 TP_PROTO( 860 const struct nfs4_client *clp, 861 const struct svc_rqst *rqstp, 862 const nfs4_verifier *verf 863 ), 864 TP_ARGS(clp, rqstp, verf), 865 TP_STRUCT__entry( 866 __field(u32, cl_boot) 867 __field(u32, cl_id) 868 __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE) 869 __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE) 870 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 871 ), 872 TP_fast_assign( 873 __entry->cl_boot = clp->cl_clientid.cl_boot; 874 __entry->cl_id = clp->cl_clientid.cl_id; 875 memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier, 876 NFS4_VERIFIER_SIZE); 877 memcpy(__entry->new_verifier, (void *)verf, 878 NFS4_VERIFIER_SIZE); 879 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 880 rqstp->rq_xprt->xpt_remotelen); 881 ), 882 TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc", 883 __entry->cl_boot, __entry->cl_id, 884 __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE), 885 __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE), 886 __get_sockaddr(addr) 887 ) 888 ); 889 890 DECLARE_EVENT_CLASS(nfsd_clid_class, 891 TP_PROTO(const struct nfs4_client *clp), 892 TP_ARGS(clp), 893 TP_STRUCT__entry( 894 __field(u32, cl_boot) 895 __field(u32, cl_id) 896 __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 897 __field(unsigned long, flavor) 898 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 899 __string_len(name, clp->cl_name.data, clp->cl_name.len) 900 ), 901 TP_fast_assign( 902 __entry->cl_boot = clp->cl_clientid.cl_boot; 903 __entry->cl_id = clp->cl_clientid.cl_id; 904 memcpy(__entry->addr, &clp->cl_addr, 905 sizeof(struct sockaddr_in6)); 906 __entry->flavor = clp->cl_cred.cr_flavor; 907 memcpy(__entry->verifier, (void *)&clp->cl_verifier, 908 NFS4_VERIFIER_SIZE); 909 __assign_str(name, clp->cl_name.data); 910 ), 911 TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x", 912 __entry->addr, __get_str(name), 913 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE), 914 show_nfsd_authflavor(__entry->flavor), 915 __entry->cl_boot, __entry->cl_id) 916 ); 917 918 #define DEFINE_CLID_EVENT(name) \ 919 DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \ 920 TP_PROTO(const struct nfs4_client *clp), \ 921 TP_ARGS(clp)) 922 923 DEFINE_CLID_EVENT(fresh); 924 DEFINE_CLID_EVENT(confirmed_r); 925 926 /* 927 * from fs/nfsd/filecache.h 928 */ 929 #define show_nf_flags(val) \ 930 __print_flags(val, "|", \ 931 { 1 << NFSD_FILE_HASHED, "HASHED" }, \ 932 { 1 << NFSD_FILE_PENDING, "PENDING" }, \ 933 { 1 << NFSD_FILE_REFERENCED, "REFERENCED" }, \ 934 { 1 << NFSD_FILE_GC, "GC" }) 935 936 DECLARE_EVENT_CLASS(nfsd_file_class, 937 TP_PROTO(struct nfsd_file *nf), 938 TP_ARGS(nf), 939 TP_STRUCT__entry( 940 __field(void *, nf_inode) 941 __field(int, nf_ref) 942 __field(unsigned long, nf_flags) 943 __field(unsigned char, nf_may) 944 __field(struct file *, nf_file) 945 ), 946 TP_fast_assign( 947 __entry->nf_inode = nf->nf_inode; 948 __entry->nf_ref = refcount_read(&nf->nf_ref); 949 __entry->nf_flags = nf->nf_flags; 950 __entry->nf_may = nf->nf_may; 951 __entry->nf_file = nf->nf_file; 952 ), 953 TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p", 954 __entry->nf_inode, 955 __entry->nf_ref, 956 show_nf_flags(__entry->nf_flags), 957 show_nfsd_may_flags(__entry->nf_may), 958 __entry->nf_file) 959 ) 960 961 #define DEFINE_NFSD_FILE_EVENT(name) \ 962 DEFINE_EVENT(nfsd_file_class, name, \ 963 TP_PROTO(struct nfsd_file *nf), \ 964 TP_ARGS(nf)) 965 966 DEFINE_NFSD_FILE_EVENT(nfsd_file_free); 967 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash); 968 DEFINE_NFSD_FILE_EVENT(nfsd_file_put); 969 DEFINE_NFSD_FILE_EVENT(nfsd_file_closing); 970 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_queue); 971 972 TRACE_EVENT(nfsd_file_alloc, 973 TP_PROTO( 974 const struct nfsd_file *nf 975 ), 976 TP_ARGS(nf), 977 TP_STRUCT__entry( 978 __field(const void *, nf_inode) 979 __field(unsigned long, nf_flags) 980 __field(unsigned long, nf_may) 981 __field(unsigned int, nf_ref) 982 ), 983 TP_fast_assign( 984 __entry->nf_inode = nf->nf_inode; 985 __entry->nf_flags = nf->nf_flags; 986 __entry->nf_ref = refcount_read(&nf->nf_ref); 987 __entry->nf_may = nf->nf_may; 988 ), 989 TP_printk("inode=%p ref=%u flags=%s may=%s", 990 __entry->nf_inode, __entry->nf_ref, 991 show_nf_flags(__entry->nf_flags), 992 show_nfsd_may_flags(__entry->nf_may) 993 ) 994 ); 995 996 TRACE_EVENT(nfsd_file_acquire, 997 TP_PROTO( 998 const struct svc_rqst *rqstp, 999 const struct inode *inode, 1000 unsigned int may_flags, 1001 const struct nfsd_file *nf, 1002 __be32 status 1003 ), 1004 1005 TP_ARGS(rqstp, inode, may_flags, nf, status), 1006 1007 TP_STRUCT__entry( 1008 __field(u32, xid) 1009 __field(const void *, inode) 1010 __field(unsigned long, may_flags) 1011 __field(unsigned int, nf_ref) 1012 __field(unsigned long, nf_flags) 1013 __field(unsigned long, nf_may) 1014 __field(const void *, nf_file) 1015 __field(u32, status) 1016 ), 1017 1018 TP_fast_assign( 1019 __entry->xid = be32_to_cpu(rqstp->rq_xid); 1020 __entry->inode = inode; 1021 __entry->may_flags = may_flags; 1022 __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0; 1023 __entry->nf_flags = nf ? nf->nf_flags : 0; 1024 __entry->nf_may = nf ? nf->nf_may : 0; 1025 __entry->nf_file = nf ? nf->nf_file : NULL; 1026 __entry->status = be32_to_cpu(status); 1027 ), 1028 1029 TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u", 1030 __entry->xid, __entry->inode, 1031 show_nfsd_may_flags(__entry->may_flags), 1032 __entry->nf_ref, show_nf_flags(__entry->nf_flags), 1033 show_nfsd_may_flags(__entry->nf_may), 1034 __entry->nf_file, __entry->status 1035 ) 1036 ); 1037 1038 TRACE_EVENT(nfsd_file_insert_err, 1039 TP_PROTO( 1040 const struct svc_rqst *rqstp, 1041 const struct inode *inode, 1042 unsigned int may_flags, 1043 long error 1044 ), 1045 TP_ARGS(rqstp, inode, may_flags, error), 1046 TP_STRUCT__entry( 1047 __field(u32, xid) 1048 __field(const void *, inode) 1049 __field(unsigned long, may_flags) 1050 __field(long, error) 1051 ), 1052 TP_fast_assign( 1053 __entry->xid = be32_to_cpu(rqstp->rq_xid); 1054 __entry->inode = inode; 1055 __entry->may_flags = may_flags; 1056 __entry->error = error; 1057 ), 1058 TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld", 1059 __entry->xid, __entry->inode, 1060 show_nfsd_may_flags(__entry->may_flags), 1061 __entry->error 1062 ) 1063 ); 1064 1065 TRACE_EVENT(nfsd_file_cons_err, 1066 TP_PROTO( 1067 const struct svc_rqst *rqstp, 1068 const struct inode *inode, 1069 unsigned int may_flags, 1070 const struct nfsd_file *nf 1071 ), 1072 TP_ARGS(rqstp, inode, may_flags, nf), 1073 TP_STRUCT__entry( 1074 __field(u32, xid) 1075 __field(const void *, inode) 1076 __field(unsigned long, may_flags) 1077 __field(unsigned int, nf_ref) 1078 __field(unsigned long, nf_flags) 1079 __field(unsigned long, nf_may) 1080 __field(const void *, nf_file) 1081 ), 1082 TP_fast_assign( 1083 __entry->xid = be32_to_cpu(rqstp->rq_xid); 1084 __entry->inode = inode; 1085 __entry->may_flags = may_flags; 1086 __entry->nf_ref = refcount_read(&nf->nf_ref); 1087 __entry->nf_flags = nf->nf_flags; 1088 __entry->nf_may = nf->nf_may; 1089 __entry->nf_file = nf->nf_file; 1090 ), 1091 TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p", 1092 __entry->xid, __entry->inode, 1093 show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref, 1094 show_nf_flags(__entry->nf_flags), 1095 show_nfsd_may_flags(__entry->nf_may), __entry->nf_file 1096 ) 1097 ); 1098 1099 DECLARE_EVENT_CLASS(nfsd_file_open_class, 1100 TP_PROTO(const struct nfsd_file *nf, __be32 status), 1101 TP_ARGS(nf, status), 1102 TP_STRUCT__entry( 1103 __field(void *, nf_inode) /* cannot be dereferenced */ 1104 __field(int, nf_ref) 1105 __field(unsigned long, nf_flags) 1106 __field(unsigned long, nf_may) 1107 __field(void *, nf_file) /* cannot be dereferenced */ 1108 ), 1109 TP_fast_assign( 1110 __entry->nf_inode = nf->nf_inode; 1111 __entry->nf_ref = refcount_read(&nf->nf_ref); 1112 __entry->nf_flags = nf->nf_flags; 1113 __entry->nf_may = nf->nf_may; 1114 __entry->nf_file = nf->nf_file; 1115 ), 1116 TP_printk("inode=%p ref=%d flags=%s may=%s file=%p", 1117 __entry->nf_inode, 1118 __entry->nf_ref, 1119 show_nf_flags(__entry->nf_flags), 1120 show_nfsd_may_flags(__entry->nf_may), 1121 __entry->nf_file) 1122 ) 1123 1124 #define DEFINE_NFSD_FILE_OPEN_EVENT(name) \ 1125 DEFINE_EVENT(nfsd_file_open_class, name, \ 1126 TP_PROTO( \ 1127 const struct nfsd_file *nf, \ 1128 __be32 status \ 1129 ), \ 1130 TP_ARGS(nf, status)) 1131 1132 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_open); 1133 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_opened); 1134 1135 TRACE_EVENT(nfsd_file_is_cached, 1136 TP_PROTO( 1137 const struct inode *inode, 1138 int found 1139 ), 1140 TP_ARGS(inode, found), 1141 TP_STRUCT__entry( 1142 __field(const struct inode *, inode) 1143 __field(int, found) 1144 ), 1145 TP_fast_assign( 1146 __entry->inode = inode; 1147 __entry->found = found; 1148 ), 1149 TP_printk("inode=%p is %scached", 1150 __entry->inode, 1151 __entry->found ? "" : "not " 1152 ) 1153 ); 1154 1155 TRACE_EVENT(nfsd_file_fsnotify_handle_event, 1156 TP_PROTO(struct inode *inode, u32 mask), 1157 TP_ARGS(inode, mask), 1158 TP_STRUCT__entry( 1159 __field(struct inode *, inode) 1160 __field(unsigned int, nlink) 1161 __field(umode_t, mode) 1162 __field(u32, mask) 1163 ), 1164 TP_fast_assign( 1165 __entry->inode = inode; 1166 __entry->nlink = inode->i_nlink; 1167 __entry->mode = inode->i_mode; 1168 __entry->mask = mask; 1169 ), 1170 TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode, 1171 __entry->nlink, __entry->mode, __entry->mask) 1172 ); 1173 1174 DECLARE_EVENT_CLASS(nfsd_file_gc_class, 1175 TP_PROTO( 1176 const struct nfsd_file *nf 1177 ), 1178 TP_ARGS(nf), 1179 TP_STRUCT__entry( 1180 __field(void *, nf_inode) 1181 __field(void *, nf_file) 1182 __field(int, nf_ref) 1183 __field(unsigned long, nf_flags) 1184 ), 1185 TP_fast_assign( 1186 __entry->nf_inode = nf->nf_inode; 1187 __entry->nf_file = nf->nf_file; 1188 __entry->nf_ref = refcount_read(&nf->nf_ref); 1189 __entry->nf_flags = nf->nf_flags; 1190 ), 1191 TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p", 1192 __entry->nf_inode, __entry->nf_ref, 1193 show_nf_flags(__entry->nf_flags), 1194 __entry->nf_file 1195 ) 1196 ); 1197 1198 #define DEFINE_NFSD_FILE_GC_EVENT(name) \ 1199 DEFINE_EVENT(nfsd_file_gc_class, name, \ 1200 TP_PROTO( \ 1201 const struct nfsd_file *nf \ 1202 ), \ 1203 TP_ARGS(nf)) 1204 1205 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add); 1206 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed); 1207 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del); 1208 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed); 1209 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use); 1210 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback); 1211 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced); 1212 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed); 1213 1214 DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class, 1215 TP_PROTO( 1216 unsigned long removed, 1217 unsigned long remaining 1218 ), 1219 TP_ARGS(removed, remaining), 1220 TP_STRUCT__entry( 1221 __field(unsigned long, removed) 1222 __field(unsigned long, remaining) 1223 ), 1224 TP_fast_assign( 1225 __entry->removed = removed; 1226 __entry->remaining = remaining; 1227 ), 1228 TP_printk("%lu entries removed, %lu remaining", 1229 __entry->removed, __entry->remaining) 1230 ); 1231 1232 #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name) \ 1233 DEFINE_EVENT(nfsd_file_lruwalk_class, name, \ 1234 TP_PROTO( \ 1235 unsigned long removed, \ 1236 unsigned long remaining \ 1237 ), \ 1238 TP_ARGS(removed, remaining)) 1239 1240 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed); 1241 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed); 1242 1243 TRACE_EVENT(nfsd_file_close, 1244 TP_PROTO( 1245 const struct inode *inode 1246 ), 1247 TP_ARGS(inode), 1248 TP_STRUCT__entry( 1249 __field(const void *, inode) 1250 ), 1251 TP_fast_assign( 1252 __entry->inode = inode; 1253 ), 1254 TP_printk("inode=%p", 1255 __entry->inode 1256 ) 1257 ); 1258 1259 #include "cache.h" 1260 1261 TRACE_DEFINE_ENUM(RC_DROPIT); 1262 TRACE_DEFINE_ENUM(RC_REPLY); 1263 TRACE_DEFINE_ENUM(RC_DOIT); 1264 1265 #define show_drc_retval(x) \ 1266 __print_symbolic(x, \ 1267 { RC_DROPIT, "DROPIT" }, \ 1268 { RC_REPLY, "REPLY" }, \ 1269 { RC_DOIT, "DOIT" }) 1270 1271 TRACE_EVENT(nfsd_drc_found, 1272 TP_PROTO( 1273 const struct nfsd_net *nn, 1274 const struct svc_rqst *rqstp, 1275 int result 1276 ), 1277 TP_ARGS(nn, rqstp, result), 1278 TP_STRUCT__entry( 1279 __field(unsigned long long, boot_time) 1280 __field(unsigned long, result) 1281 __field(u32, xid) 1282 ), 1283 TP_fast_assign( 1284 __entry->boot_time = nn->boot_time; 1285 __entry->result = result; 1286 __entry->xid = be32_to_cpu(rqstp->rq_xid); 1287 ), 1288 TP_printk("boot_time=%16llx xid=0x%08x result=%s", 1289 __entry->boot_time, __entry->xid, 1290 show_drc_retval(__entry->result)) 1291 1292 ); 1293 1294 TRACE_EVENT(nfsd_drc_mismatch, 1295 TP_PROTO( 1296 const struct nfsd_net *nn, 1297 const struct nfsd_cacherep *key, 1298 const struct nfsd_cacherep *rp 1299 ), 1300 TP_ARGS(nn, key, rp), 1301 TP_STRUCT__entry( 1302 __field(unsigned long long, boot_time) 1303 __field(u32, xid) 1304 __field(u32, cached) 1305 __field(u32, ingress) 1306 ), 1307 TP_fast_assign( 1308 __entry->boot_time = nn->boot_time; 1309 __entry->xid = be32_to_cpu(key->c_key.k_xid); 1310 __entry->cached = (__force u32)key->c_key.k_csum; 1311 __entry->ingress = (__force u32)rp->c_key.k_csum; 1312 ), 1313 TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x", 1314 __entry->boot_time, __entry->xid, __entry->cached, 1315 __entry->ingress) 1316 ); 1317 1318 TRACE_EVENT(nfsd_cb_args, 1319 TP_PROTO( 1320 const struct nfs4_client *clp, 1321 const struct nfs4_cb_conn *conn 1322 ), 1323 TP_ARGS(clp, conn), 1324 TP_STRUCT__entry( 1325 __field(u32, cl_boot) 1326 __field(u32, cl_id) 1327 __field(u32, prog) 1328 __field(u32, ident) 1329 __sockaddr(addr, conn->cb_addrlen) 1330 ), 1331 TP_fast_assign( 1332 __entry->cl_boot = clp->cl_clientid.cl_boot; 1333 __entry->cl_id = clp->cl_clientid.cl_id; 1334 __entry->prog = conn->cb_prog; 1335 __entry->ident = conn->cb_ident; 1336 __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen); 1337 ), 1338 TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u", 1339 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1340 __entry->prog, __entry->ident) 1341 ); 1342 1343 TRACE_EVENT(nfsd_cb_nodelegs, 1344 TP_PROTO(const struct nfs4_client *clp), 1345 TP_ARGS(clp), 1346 TP_STRUCT__entry( 1347 __field(u32, cl_boot) 1348 __field(u32, cl_id) 1349 ), 1350 TP_fast_assign( 1351 __entry->cl_boot = clp->cl_clientid.cl_boot; 1352 __entry->cl_id = clp->cl_clientid.cl_id; 1353 ), 1354 TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 1355 ) 1356 1357 #define show_cb_state(val) \ 1358 __print_symbolic(val, \ 1359 { NFSD4_CB_UP, "UP" }, \ 1360 { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \ 1361 { NFSD4_CB_DOWN, "DOWN" }, \ 1362 { NFSD4_CB_FAULT, "FAULT"}) 1363 1364 DECLARE_EVENT_CLASS(nfsd_cb_class, 1365 TP_PROTO(const struct nfs4_client *clp), 1366 TP_ARGS(clp), 1367 TP_STRUCT__entry( 1368 __field(unsigned long, state) 1369 __field(u32, cl_boot) 1370 __field(u32, cl_id) 1371 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 1372 ), 1373 TP_fast_assign( 1374 __entry->state = clp->cl_cb_state; 1375 __entry->cl_boot = clp->cl_clientid.cl_boot; 1376 __entry->cl_id = clp->cl_clientid.cl_id; 1377 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1378 clp->cl_cb_conn.cb_addrlen) 1379 ), 1380 TP_printk("addr=%pISpc client %08x:%08x state=%s", 1381 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1382 show_cb_state(__entry->state)) 1383 ); 1384 1385 #define DEFINE_NFSD_CB_EVENT(name) \ 1386 DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \ 1387 TP_PROTO(const struct nfs4_client *clp), \ 1388 TP_ARGS(clp)) 1389 1390 DEFINE_NFSD_CB_EVENT(start); 1391 DEFINE_NFSD_CB_EVENT(new_state); 1392 DEFINE_NFSD_CB_EVENT(probe); 1393 DEFINE_NFSD_CB_EVENT(lost); 1394 DEFINE_NFSD_CB_EVENT(shutdown); 1395 1396 TRACE_DEFINE_ENUM(RPC_AUTH_NULL); 1397 TRACE_DEFINE_ENUM(RPC_AUTH_UNIX); 1398 TRACE_DEFINE_ENUM(RPC_AUTH_GSS); 1399 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5); 1400 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I); 1401 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P); 1402 1403 #define show_nfsd_authflavor(val) \ 1404 __print_symbolic(val, \ 1405 { RPC_AUTH_NULL, "none" }, \ 1406 { RPC_AUTH_UNIX, "sys" }, \ 1407 { RPC_AUTH_GSS, "gss" }, \ 1408 { RPC_AUTH_GSS_KRB5, "krb5" }, \ 1409 { RPC_AUTH_GSS_KRB5I, "krb5i" }, \ 1410 { RPC_AUTH_GSS_KRB5P, "krb5p" }) 1411 1412 TRACE_EVENT(nfsd_cb_setup, 1413 TP_PROTO(const struct nfs4_client *clp, 1414 const char *netid, 1415 rpc_authflavor_t authflavor 1416 ), 1417 TP_ARGS(clp, netid, authflavor), 1418 TP_STRUCT__entry( 1419 __field(u32, cl_boot) 1420 __field(u32, cl_id) 1421 __field(unsigned long, authflavor) 1422 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 1423 __string(netid, netid) 1424 ), 1425 TP_fast_assign( 1426 __entry->cl_boot = clp->cl_clientid.cl_boot; 1427 __entry->cl_id = clp->cl_clientid.cl_id; 1428 __assign_str(netid, netid); 1429 __entry->authflavor = authflavor; 1430 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1431 clp->cl_cb_conn.cb_addrlen) 1432 ), 1433 TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s", 1434 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1435 __get_str(netid), show_nfsd_authflavor(__entry->authflavor)) 1436 ); 1437 1438 TRACE_EVENT(nfsd_cb_setup_err, 1439 TP_PROTO( 1440 const struct nfs4_client *clp, 1441 long error 1442 ), 1443 TP_ARGS(clp, error), 1444 TP_STRUCT__entry( 1445 __field(long, error) 1446 __field(u32, cl_boot) 1447 __field(u32, cl_id) 1448 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 1449 ), 1450 TP_fast_assign( 1451 __entry->error = error; 1452 __entry->cl_boot = clp->cl_clientid.cl_boot; 1453 __entry->cl_id = clp->cl_clientid.cl_id; 1454 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1455 clp->cl_cb_conn.cb_addrlen) 1456 ), 1457 TP_printk("addr=%pISpc client %08x:%08x error=%ld", 1458 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1459 __entry->error) 1460 ); 1461 1462 DECLARE_EVENT_CLASS(nfsd_cb_lifetime_class, 1463 TP_PROTO( 1464 const struct nfs4_client *clp, 1465 const struct nfsd4_callback *cb 1466 ), 1467 TP_ARGS(clp, cb), 1468 TP_STRUCT__entry( 1469 __field(u32, cl_boot) 1470 __field(u32, cl_id) 1471 __field(const void *, cb) 1472 __field(bool, need_restart) 1473 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 1474 ), 1475 TP_fast_assign( 1476 __entry->cl_boot = clp->cl_clientid.cl_boot; 1477 __entry->cl_id = clp->cl_clientid.cl_id; 1478 __entry->cb = cb; 1479 __entry->need_restart = cb->cb_need_restart; 1480 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1481 clp->cl_cb_conn.cb_addrlen) 1482 ), 1483 TP_printk("addr=%pISpc client %08x:%08x cb=%p%s", 1484 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1485 __entry->cb, __entry->need_restart ? 1486 " (need restart)" : " (first try)" 1487 ) 1488 ); 1489 1490 #define DEFINE_NFSD_CB_LIFETIME_EVENT(name) \ 1491 DEFINE_EVENT(nfsd_cb_lifetime_class, nfsd_cb_##name, \ 1492 TP_PROTO( \ 1493 const struct nfs4_client *clp, \ 1494 const struct nfsd4_callback *cb \ 1495 ), \ 1496 TP_ARGS(clp, cb)) 1497 1498 DEFINE_NFSD_CB_LIFETIME_EVENT(queue); 1499 DEFINE_NFSD_CB_LIFETIME_EVENT(destroy); 1500 DEFINE_NFSD_CB_LIFETIME_EVENT(restart); 1501 DEFINE_NFSD_CB_LIFETIME_EVENT(bc_update); 1502 DEFINE_NFSD_CB_LIFETIME_EVENT(bc_shutdown); 1503 1504 TRACE_EVENT(nfsd_cb_seq_status, 1505 TP_PROTO( 1506 const struct rpc_task *task, 1507 const struct nfsd4_callback *cb 1508 ), 1509 TP_ARGS(task, cb), 1510 TP_STRUCT__entry( 1511 __field(unsigned int, task_id) 1512 __field(unsigned int, client_id) 1513 __field(u32, cl_boot) 1514 __field(u32, cl_id) 1515 __field(u32, seqno) 1516 __field(u32, reserved) 1517 __field(int, tk_status) 1518 __field(int, seq_status) 1519 ), 1520 TP_fast_assign( 1521 const struct nfs4_client *clp = cb->cb_clp; 1522 const struct nfsd4_session *session = clp->cl_cb_session; 1523 const struct nfsd4_sessionid *sid = 1524 (struct nfsd4_sessionid *)&session->se_sessionid; 1525 1526 __entry->task_id = task->tk_pid; 1527 __entry->client_id = task->tk_client ? 1528 task->tk_client->cl_clid : -1; 1529 __entry->cl_boot = sid->clientid.cl_boot; 1530 __entry->cl_id = sid->clientid.cl_id; 1531 __entry->seqno = sid->sequence; 1532 __entry->reserved = sid->reserved; 1533 __entry->tk_status = task->tk_status; 1534 __entry->seq_status = cb->cb_seq_status; 1535 ), 1536 TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1537 " sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d\n", 1538 __entry->task_id, __entry->client_id, 1539 __entry->cl_boot, __entry->cl_id, 1540 __entry->seqno, __entry->reserved, 1541 __entry->tk_status, __entry->seq_status 1542 ) 1543 ); 1544 1545 TRACE_EVENT(nfsd_cb_free_slot, 1546 TP_PROTO( 1547 const struct rpc_task *task, 1548 const struct nfsd4_callback *cb 1549 ), 1550 TP_ARGS(task, cb), 1551 TP_STRUCT__entry( 1552 __field(unsigned int, task_id) 1553 __field(unsigned int, client_id) 1554 __field(u32, cl_boot) 1555 __field(u32, cl_id) 1556 __field(u32, seqno) 1557 __field(u32, reserved) 1558 __field(u32, slot_seqno) 1559 ), 1560 TP_fast_assign( 1561 const struct nfs4_client *clp = cb->cb_clp; 1562 const struct nfsd4_session *session = clp->cl_cb_session; 1563 const struct nfsd4_sessionid *sid = 1564 (struct nfsd4_sessionid *)&session->se_sessionid; 1565 1566 __entry->task_id = task->tk_pid; 1567 __entry->client_id = task->tk_client ? 1568 task->tk_client->cl_clid : -1; 1569 __entry->cl_boot = sid->clientid.cl_boot; 1570 __entry->cl_id = sid->clientid.cl_id; 1571 __entry->seqno = sid->sequence; 1572 __entry->reserved = sid->reserved; 1573 __entry->slot_seqno = session->se_cb_seq_nr; 1574 ), 1575 TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1576 " sessionid=%08x:%08x:%08x:%08x new slot seqno=%u\n", 1577 __entry->task_id, __entry->client_id, 1578 __entry->cl_boot, __entry->cl_id, 1579 __entry->seqno, __entry->reserved, 1580 __entry->slot_seqno 1581 ) 1582 ); 1583 1584 TRACE_EVENT_CONDITION(nfsd_cb_recall, 1585 TP_PROTO( 1586 const struct nfs4_stid *stid 1587 ), 1588 TP_ARGS(stid), 1589 TP_CONDITION(stid->sc_client), 1590 TP_STRUCT__entry( 1591 __field(u32, cl_boot) 1592 __field(u32, cl_id) 1593 __field(u32, si_id) 1594 __field(u32, si_generation) 1595 __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen) 1596 ), 1597 TP_fast_assign( 1598 const stateid_t *stp = &stid->sc_stateid; 1599 const struct nfs4_client *clp = stid->sc_client; 1600 1601 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 1602 __entry->cl_id = stp->si_opaque.so_clid.cl_id; 1603 __entry->si_id = stp->si_opaque.so_id; 1604 __entry->si_generation = stp->si_generation; 1605 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1606 clp->cl_cb_conn.cb_addrlen) 1607 ), 1608 TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x", 1609 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1610 __entry->si_id, __entry->si_generation) 1611 ); 1612 1613 TRACE_EVENT(nfsd_cb_notify_lock, 1614 TP_PROTO( 1615 const struct nfs4_lockowner *lo, 1616 const struct nfsd4_blocked_lock *nbl 1617 ), 1618 TP_ARGS(lo, nbl), 1619 TP_STRUCT__entry( 1620 __field(u32, cl_boot) 1621 __field(u32, cl_id) 1622 __field(u32, fh_hash) 1623 __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen) 1624 ), 1625 TP_fast_assign( 1626 const struct nfs4_client *clp = lo->lo_owner.so_client; 1627 1628 __entry->cl_boot = clp->cl_clientid.cl_boot; 1629 __entry->cl_id = clp->cl_clientid.cl_id; 1630 __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh); 1631 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1632 clp->cl_cb_conn.cb_addrlen) 1633 ), 1634 TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x", 1635 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1636 __entry->fh_hash) 1637 ); 1638 1639 TRACE_EVENT(nfsd_cb_offload, 1640 TP_PROTO( 1641 const struct nfs4_client *clp, 1642 const stateid_t *stp, 1643 const struct knfsd_fh *fh, 1644 u64 count, 1645 __be32 status 1646 ), 1647 TP_ARGS(clp, stp, fh, count, status), 1648 TP_STRUCT__entry( 1649 __field(u32, cl_boot) 1650 __field(u32, cl_id) 1651 __field(u32, si_id) 1652 __field(u32, si_generation) 1653 __field(u32, fh_hash) 1654 __field(int, status) 1655 __field(u64, count) 1656 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 1657 ), 1658 TP_fast_assign( 1659 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 1660 __entry->cl_id = stp->si_opaque.so_clid.cl_id; 1661 __entry->si_id = stp->si_opaque.so_id; 1662 __entry->si_generation = stp->si_generation; 1663 __entry->fh_hash = knfsd_fh_hash(fh); 1664 __entry->status = be32_to_cpu(status); 1665 __entry->count = count; 1666 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 1667 clp->cl_cb_conn.cb_addrlen) 1668 ), 1669 TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d", 1670 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1671 __entry->si_id, __entry->si_generation, 1672 __entry->fh_hash, __entry->count, __entry->status) 1673 ); 1674 1675 TRACE_EVENT(nfsd_cb_recall_any, 1676 TP_PROTO( 1677 const struct nfsd4_cb_recall_any *ra 1678 ), 1679 TP_ARGS(ra), 1680 TP_STRUCT__entry( 1681 __field(u32, cl_boot) 1682 __field(u32, cl_id) 1683 __field(u32, keep) 1684 __field(unsigned long, bmval0) 1685 __sockaddr(addr, ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen) 1686 ), 1687 TP_fast_assign( 1688 __entry->cl_boot = ra->ra_cb.cb_clp->cl_clientid.cl_boot; 1689 __entry->cl_id = ra->ra_cb.cb_clp->cl_clientid.cl_id; 1690 __entry->keep = ra->ra_keep; 1691 __entry->bmval0 = ra->ra_bmval[0]; 1692 __assign_sockaddr(addr, &ra->ra_cb.cb_clp->cl_addr, 1693 ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen); 1694 ), 1695 TP_printk("addr=%pISpc client %08x:%08x keep=%u bmval0=%s", 1696 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1697 __entry->keep, show_rca_mask(__entry->bmval0) 1698 ) 1699 ); 1700 1701 DECLARE_EVENT_CLASS(nfsd_cb_done_class, 1702 TP_PROTO( 1703 const stateid_t *stp, 1704 const struct rpc_task *task 1705 ), 1706 TP_ARGS(stp, task), 1707 TP_STRUCT__entry( 1708 __field(u32, cl_boot) 1709 __field(u32, cl_id) 1710 __field(u32, si_id) 1711 __field(u32, si_generation) 1712 __field(int, status) 1713 ), 1714 TP_fast_assign( 1715 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 1716 __entry->cl_id = stp->si_opaque.so_clid.cl_id; 1717 __entry->si_id = stp->si_opaque.so_id; 1718 __entry->si_generation = stp->si_generation; 1719 __entry->status = task->tk_status; 1720 ), 1721 TP_printk("client %08x:%08x stateid %08x:%08x status=%d", 1722 __entry->cl_boot, __entry->cl_id, __entry->si_id, 1723 __entry->si_generation, __entry->status 1724 ) 1725 ); 1726 1727 #define DEFINE_NFSD_CB_DONE_EVENT(name) \ 1728 DEFINE_EVENT(nfsd_cb_done_class, name, \ 1729 TP_PROTO( \ 1730 const stateid_t *stp, \ 1731 const struct rpc_task *task \ 1732 ), \ 1733 TP_ARGS(stp, task)) 1734 1735 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_recall_done); 1736 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_notify_lock_done); 1737 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_layout_done); 1738 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_offload_done); 1739 1740 TRACE_EVENT(nfsd_cb_recall_any_done, 1741 TP_PROTO( 1742 const struct nfsd4_callback *cb, 1743 const struct rpc_task *task 1744 ), 1745 TP_ARGS(cb, task), 1746 TP_STRUCT__entry( 1747 __field(u32, cl_boot) 1748 __field(u32, cl_id) 1749 __field(int, status) 1750 ), 1751 TP_fast_assign( 1752 __entry->status = task->tk_status; 1753 __entry->cl_boot = cb->cb_clp->cl_clientid.cl_boot; 1754 __entry->cl_id = cb->cb_clp->cl_clientid.cl_id; 1755 ), 1756 TP_printk("client %08x:%08x status=%d", 1757 __entry->cl_boot, __entry->cl_id, __entry->status 1758 ) 1759 ); 1760 1761 TRACE_EVENT(nfsd_ctl_unlock_ip, 1762 TP_PROTO( 1763 const struct net *net, 1764 const char *address 1765 ), 1766 TP_ARGS(net, address), 1767 TP_STRUCT__entry( 1768 __field(unsigned int, netns_ino) 1769 __string(address, address) 1770 ), 1771 TP_fast_assign( 1772 __entry->netns_ino = net->ns.inum; 1773 __assign_str(address, address); 1774 ), 1775 TP_printk("address=%s", 1776 __get_str(address) 1777 ) 1778 ); 1779 1780 TRACE_EVENT(nfsd_ctl_unlock_fs, 1781 TP_PROTO( 1782 const struct net *net, 1783 const char *path 1784 ), 1785 TP_ARGS(net, path), 1786 TP_STRUCT__entry( 1787 __field(unsigned int, netns_ino) 1788 __string(path, path) 1789 ), 1790 TP_fast_assign( 1791 __entry->netns_ino = net->ns.inum; 1792 __assign_str(path, path); 1793 ), 1794 TP_printk("path=%s", 1795 __get_str(path) 1796 ) 1797 ); 1798 1799 TRACE_EVENT(nfsd_ctl_filehandle, 1800 TP_PROTO( 1801 const struct net *net, 1802 const char *domain, 1803 const char *path, 1804 int maxsize 1805 ), 1806 TP_ARGS(net, domain, path, maxsize), 1807 TP_STRUCT__entry( 1808 __field(unsigned int, netns_ino) 1809 __field(int, maxsize) 1810 __string(domain, domain) 1811 __string(path, path) 1812 ), 1813 TP_fast_assign( 1814 __entry->netns_ino = net->ns.inum; 1815 __entry->maxsize = maxsize; 1816 __assign_str(domain, domain); 1817 __assign_str(path, path); 1818 ), 1819 TP_printk("domain=%s path=%s maxsize=%d", 1820 __get_str(domain), __get_str(path), __entry->maxsize 1821 ) 1822 ); 1823 1824 TRACE_EVENT(nfsd_ctl_threads, 1825 TP_PROTO( 1826 const struct net *net, 1827 int newthreads 1828 ), 1829 TP_ARGS(net, newthreads), 1830 TP_STRUCT__entry( 1831 __field(unsigned int, netns_ino) 1832 __field(int, newthreads) 1833 ), 1834 TP_fast_assign( 1835 __entry->netns_ino = net->ns.inum; 1836 __entry->newthreads = newthreads; 1837 ), 1838 TP_printk("newthreads=%d", 1839 __entry->newthreads 1840 ) 1841 ); 1842 1843 TRACE_EVENT(nfsd_ctl_pool_threads, 1844 TP_PROTO( 1845 const struct net *net, 1846 int pool, 1847 int nrthreads 1848 ), 1849 TP_ARGS(net, pool, nrthreads), 1850 TP_STRUCT__entry( 1851 __field(unsigned int, netns_ino) 1852 __field(int, pool) 1853 __field(int, nrthreads) 1854 ), 1855 TP_fast_assign( 1856 __entry->netns_ino = net->ns.inum; 1857 __entry->pool = pool; 1858 __entry->nrthreads = nrthreads; 1859 ), 1860 TP_printk("pool=%d nrthreads=%d", 1861 __entry->pool, __entry->nrthreads 1862 ) 1863 ); 1864 1865 TRACE_EVENT(nfsd_ctl_version, 1866 TP_PROTO( 1867 const struct net *net, 1868 const char *mesg 1869 ), 1870 TP_ARGS(net, mesg), 1871 TP_STRUCT__entry( 1872 __field(unsigned int, netns_ino) 1873 __string(mesg, mesg) 1874 ), 1875 TP_fast_assign( 1876 __entry->netns_ino = net->ns.inum; 1877 __assign_str(mesg, mesg); 1878 ), 1879 TP_printk("%s", 1880 __get_str(mesg) 1881 ) 1882 ); 1883 1884 TRACE_EVENT(nfsd_ctl_ports_addfd, 1885 TP_PROTO( 1886 const struct net *net, 1887 int fd 1888 ), 1889 TP_ARGS(net, fd), 1890 TP_STRUCT__entry( 1891 __field(unsigned int, netns_ino) 1892 __field(int, fd) 1893 ), 1894 TP_fast_assign( 1895 __entry->netns_ino = net->ns.inum; 1896 __entry->fd = fd; 1897 ), 1898 TP_printk("fd=%d", 1899 __entry->fd 1900 ) 1901 ); 1902 1903 TRACE_EVENT(nfsd_ctl_ports_addxprt, 1904 TP_PROTO( 1905 const struct net *net, 1906 const char *transport, 1907 int port 1908 ), 1909 TP_ARGS(net, transport, port), 1910 TP_STRUCT__entry( 1911 __field(unsigned int, netns_ino) 1912 __field(int, port) 1913 __string(transport, transport) 1914 ), 1915 TP_fast_assign( 1916 __entry->netns_ino = net->ns.inum; 1917 __entry->port = port; 1918 __assign_str(transport, transport); 1919 ), 1920 TP_printk("transport=%s port=%d", 1921 __get_str(transport), __entry->port 1922 ) 1923 ); 1924 1925 TRACE_EVENT(nfsd_ctl_maxblksize, 1926 TP_PROTO( 1927 const struct net *net, 1928 int bsize 1929 ), 1930 TP_ARGS(net, bsize), 1931 TP_STRUCT__entry( 1932 __field(unsigned int, netns_ino) 1933 __field(int, bsize) 1934 ), 1935 TP_fast_assign( 1936 __entry->netns_ino = net->ns.inum; 1937 __entry->bsize = bsize; 1938 ), 1939 TP_printk("bsize=%d", 1940 __entry->bsize 1941 ) 1942 ); 1943 1944 TRACE_EVENT(nfsd_ctl_maxconn, 1945 TP_PROTO( 1946 const struct net *net, 1947 int maxconn 1948 ), 1949 TP_ARGS(net, maxconn), 1950 TP_STRUCT__entry( 1951 __field(unsigned int, netns_ino) 1952 __field(int, maxconn) 1953 ), 1954 TP_fast_assign( 1955 __entry->netns_ino = net->ns.inum; 1956 __entry->maxconn = maxconn; 1957 ), 1958 TP_printk("maxconn=%d", 1959 __entry->maxconn 1960 ) 1961 ); 1962 1963 TRACE_EVENT(nfsd_ctl_time, 1964 TP_PROTO( 1965 const struct net *net, 1966 const char *name, 1967 size_t namelen, 1968 int time 1969 ), 1970 TP_ARGS(net, name, namelen, time), 1971 TP_STRUCT__entry( 1972 __field(unsigned int, netns_ino) 1973 __field(int, time) 1974 __string_len(name, name, namelen) 1975 ), 1976 TP_fast_assign( 1977 __entry->netns_ino = net->ns.inum; 1978 __entry->time = time; 1979 __assign_str(name, name); 1980 ), 1981 TP_printk("file=%s time=%d\n", 1982 __get_str(name), __entry->time 1983 ) 1984 ); 1985 1986 TRACE_EVENT(nfsd_ctl_recoverydir, 1987 TP_PROTO( 1988 const struct net *net, 1989 const char *recdir 1990 ), 1991 TP_ARGS(net, recdir), 1992 TP_STRUCT__entry( 1993 __field(unsigned int, netns_ino) 1994 __string(recdir, recdir) 1995 ), 1996 TP_fast_assign( 1997 __entry->netns_ino = net->ns.inum; 1998 __assign_str(recdir, recdir); 1999 ), 2000 TP_printk("recdir=%s", 2001 __get_str(recdir) 2002 ) 2003 ); 2004 2005 TRACE_EVENT(nfsd_end_grace, 2006 TP_PROTO( 2007 const struct net *net 2008 ), 2009 TP_ARGS(net), 2010 TP_STRUCT__entry( 2011 __field(unsigned int, netns_ino) 2012 ), 2013 TP_fast_assign( 2014 __entry->netns_ino = net->ns.inum; 2015 ), 2016 TP_printk("nn=%d", __entry->netns_ino 2017 ) 2018 ); 2019 2020 DECLARE_EVENT_CLASS(nfsd_copy_class, 2021 TP_PROTO( 2022 const struct nfsd4_copy *copy 2023 ), 2024 TP_ARGS(copy), 2025 TP_STRUCT__entry( 2026 __field(bool, intra) 2027 __field(bool, async) 2028 __field(u32, src_cl_boot) 2029 __field(u32, src_cl_id) 2030 __field(u32, src_so_id) 2031 __field(u32, src_si_generation) 2032 __field(u32, dst_cl_boot) 2033 __field(u32, dst_cl_id) 2034 __field(u32, dst_so_id) 2035 __field(u32, dst_si_generation) 2036 __field(u64, src_cp_pos) 2037 __field(u64, dst_cp_pos) 2038 __field(u64, cp_count) 2039 __sockaddr(addr, sizeof(struct sockaddr_in6)) 2040 ), 2041 TP_fast_assign( 2042 const stateid_t *src_stp = ©->cp_src_stateid; 2043 const stateid_t *dst_stp = ©->cp_dst_stateid; 2044 2045 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags); 2046 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags); 2047 __entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot; 2048 __entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id; 2049 __entry->src_so_id = src_stp->si_opaque.so_id; 2050 __entry->src_si_generation = src_stp->si_generation; 2051 __entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot; 2052 __entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id; 2053 __entry->dst_so_id = dst_stp->si_opaque.so_id; 2054 __entry->dst_si_generation = dst_stp->si_generation; 2055 __entry->src_cp_pos = copy->cp_src_pos; 2056 __entry->dst_cp_pos = copy->cp_dst_pos; 2057 __entry->cp_count = copy->cp_count; 2058 __assign_sockaddr(addr, ©->cp_clp->cl_addr, 2059 sizeof(struct sockaddr_in6)); 2060 ), 2061 TP_printk("client=%pISpc intra=%d async=%d " 2062 "src_stateid[si_generation:0x%x cl_boot:0x%x cl_id:0x%x so_id:0x%x] " 2063 "dst_stateid[si_generation:0x%x cl_boot:0x%x cl_id:0x%x so_id:0x%x] " 2064 "cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu", 2065 __get_sockaddr(addr), __entry->intra, __entry->async, 2066 __entry->src_si_generation, __entry->src_cl_boot, 2067 __entry->src_cl_id, __entry->src_so_id, 2068 __entry->dst_si_generation, __entry->dst_cl_boot, 2069 __entry->dst_cl_id, __entry->dst_so_id, 2070 __entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count 2071 ) 2072 ); 2073 2074 #define DEFINE_COPY_EVENT(name) \ 2075 DEFINE_EVENT(nfsd_copy_class, nfsd_copy_##name, \ 2076 TP_PROTO(const struct nfsd4_copy *copy), \ 2077 TP_ARGS(copy)) 2078 2079 DEFINE_COPY_EVENT(inter); 2080 DEFINE_COPY_EVENT(intra); 2081 DEFINE_COPY_EVENT(do_async); 2082 2083 TRACE_EVENT(nfsd_copy_done, 2084 TP_PROTO( 2085 const struct nfsd4_copy *copy, 2086 __be32 status 2087 ), 2088 TP_ARGS(copy, status), 2089 TP_STRUCT__entry( 2090 __field(int, status) 2091 __field(bool, intra) 2092 __field(bool, async) 2093 __sockaddr(addr, sizeof(struct sockaddr_in6)) 2094 ), 2095 TP_fast_assign( 2096 __entry->status = be32_to_cpu(status); 2097 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags); 2098 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags); 2099 __assign_sockaddr(addr, ©->cp_clp->cl_addr, 2100 sizeof(struct sockaddr_in6)); 2101 ), 2102 TP_printk("addr=%pISpc status=%d intra=%d async=%d ", 2103 __get_sockaddr(addr), __entry->status, __entry->intra, __entry->async 2104 ) 2105 ); 2106 2107 #endif /* _NFSD_TRACE_H */ 2108 2109 #undef TRACE_INCLUDE_PATH 2110 #define TRACE_INCLUDE_PATH . 2111 #define TRACE_INCLUDE_FILE trace 2112 #include <trace/define_trace.h> 2113