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 = ©->cp_src_stateid; 2137 const stateid_t *dst_stp = ©->cp_dst_stateid; 2138 2139 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags); 2140 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->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, ©->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, ©->cp_flags); 2192 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags); 2193 __assign_sockaddr(addr, ©->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
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.