1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * fs/hmdfs/hmdfs_trace.h 4 * 5 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 6 */ 7 8 #undef TRACE_SYSTEM 9 #define TRACE_SYSTEM hmdfs 10 11 #if !defined(__HMDFS_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ) 12 13 #define __HMDFS_TRACE_H__ 14 15 #include <linux/tracepoint.h> 16 #include "comm/protocol.h" 17 #include "hmdfs_dentryfile.h" 18 #include "hmdfs_client.h" 19 #include "hmdfs_device_view.h" 20 #include "hmdfs_merge_view.h" 21 #include "client_writeback.h" 22 23 TRACE_EVENT(hmdfs_permission, 24 25 TP_PROTO(unsigned long ino), 26 27 TP_ARGS(ino), 28 29 TP_STRUCT__entry(__field(unsigned long, ino)), 30 31 TP_fast_assign(__entry->ino = ino;), 32 33 TP_printk("permission check for ino %lu failed", __entry->ino)); 34 35 /* communication */ 36 TRACE_EVENT(hmdfs_recv_mesg_callback, 37 38 TP_PROTO(struct hmdfs_head_cmd *cmd), 39 40 TP_ARGS(cmd), 41 42 TP_STRUCT__entry( 43 __field(__u32, msg_id) 44 __field(__u32, magic) 45 __field(__u16, command) 46 __field(__u16, cmd_flag) 47 __field(__u32, data_len) 48 __field(__u32, ret_code) 49 ), 50 51 TP_fast_assign( 52 __entry->msg_id = le32_to_cpu(cmd->msg_id); 53 __entry->magic = cmd->magic; 54 __entry->command = cmd->operations.command; 55 __entry->cmd_flag = cmd->operations.cmd_flag; 56 __entry->data_len = cmd->data_len; 57 __entry->ret_code = cmd->ret_code; 58 ), 59 60 TP_printk("msg_id:%u magic:%u command:%hu, cmd_flag:%hu, data_len:%u, ret_code:%u", 61 __entry->msg_id, __entry->magic, __entry->command, 62 __entry->cmd_flag, __entry->data_len, __entry->ret_code) 63 ); 64 65 TRACE_EVENT(hmdfs_tcp_send_message, 66 67 TP_PROTO(struct hmdfs_head_cmd *cmd), 68 69 TP_ARGS(cmd), 70 71 TP_STRUCT__entry( 72 __field(__u32, msg_id) 73 __field(__u32, magic) 74 __field(__u16, command) 75 __field(__u16, cmd_flag) 76 __field(__u32, data_len) 77 __field(__u32, ret_code) 78 ), 79 80 TP_fast_assign( 81 __entry->msg_id = le32_to_cpu(cmd->msg_id); 82 __entry->magic = cmd->magic; 83 __entry->command = cmd->operations.command; 84 __entry->cmd_flag = cmd->operations.cmd_flag; 85 __entry->data_len = cmd->data_len; 86 __entry->ret_code = cmd->ret_code; 87 ), 88 89 TP_printk("msg_id:%u magic:%u command:%hu, cmd_flag:%hu, data_len:%u, ret_code:%u", 90 __entry->msg_id, __entry->magic, __entry->command, 91 __entry->cmd_flag, __entry->data_len, __entry->ret_code) 92 ); 93 94 /* file system interface */ 95 DECLARE_EVENT_CLASS(hmdfs_iterate_op_end, 96 97 TP_PROTO(struct dentry *__d, loff_t start_pos, loff_t end_pos, int err), 98 99 TP_ARGS(__d, start_pos, end_pos, err), 100 101 TP_STRUCT__entry( 102 __string(name_str, __d->d_name.name) 103 __field(loff_t, start) 104 __field(loff_t, end) 105 __field(int, err) 106 ), 107 108 TP_fast_assign( 109 __assign_str(name_str, __d->d_name.name); 110 __entry->start = start_pos; 111 __entry->end = end_pos; 112 __entry->err = err; 113 ), 114 115 TP_printk("dentry[%s] start_pos:%llx, end_pos:%llx, err:%d", 116 __get_str(name_str), __entry->start, 117 __entry->end, __entry->err) 118 ); 119 120 #define define_hmdfs_iterate_op_end_event(event_name) \ 121 DEFINE_EVENT(hmdfs_iterate_op_end, event_name, \ 122 TP_PROTO(struct dentry *__d, loff_t start_pos, \ 123 loff_t end_pos, int err), \ 124 TP_ARGS(__d, start_pos, end_pos, err)) 125 126 define_hmdfs_iterate_op_end_event(hmdfs_iterate_local); 127 define_hmdfs_iterate_op_end_event(hmdfs_iterate_remote); 128 define_hmdfs_iterate_op_end_event(hmdfs_iterate_merge); 129 130 131 TRACE_EVENT(hmdfs_lookup, 132 133 TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags), 134 135 TP_ARGS(dir, dentry, flags), 136 137 TP_STRUCT__entry( 138 __field(ino_t, ino) 139 __string(name_str, dentry->d_name.name) 140 __field(unsigned int, flags) 141 ), 142 143 TP_fast_assign( 144 __entry->ino = dir->i_ino; 145 __assign_str(name_str, dentry->d_name.name); 146 __entry->flags = flags; 147 ), 148 149 TP_printk("parent_ino = %lu, name:%s, flags:%u", 150 __entry->ino, __get_str(name_str), __entry->flags) 151 ); 152 153 DECLARE_EVENT_CLASS(hmdfs_lookup_op_end, 154 155 TP_PROTO(struct inode *dir, struct dentry *dentry, int err), 156 157 TP_ARGS(dir, dentry, err), 158 159 TP_STRUCT__entry( 160 __field(ino_t, ino) 161 __string(name_str, dentry->d_name.name) 162 __field(int, err) 163 ), 164 165 TP_fast_assign( 166 __entry->ino = dir->i_ino; 167 __assign_str(name_str, dentry->d_name.name); 168 __entry->err = err; 169 ), 170 171 TP_printk("parent_ino = %lu, name:%s, err:%d", 172 __entry->ino, __get_str(name_str), __entry->err) 173 ); 174 175 #define define_hmdfs_lookup_op_end_event(event_name) \ 176 DEFINE_EVENT(hmdfs_lookup_op_end, event_name, \ 177 TP_PROTO(struct inode *dir, struct dentry *dentry, \ 178 int err), \ 179 TP_ARGS(dir, dentry, err)) 180 181 182 define_hmdfs_lookup_op_end_event(hmdfs_root_lookup); 183 define_hmdfs_lookup_op_end_event(hmdfs_root_lookup_end); 184 185 define_hmdfs_lookup_op_end_event(hmdfs_device_lookup); 186 define_hmdfs_lookup_op_end_event(hmdfs_device_lookup_end); 187 188 define_hmdfs_lookup_op_end_event(hmdfs_lookup_local); 189 define_hmdfs_lookup_op_end_event(hmdfs_lookup_local_end); 190 define_hmdfs_lookup_op_end_event(hmdfs_mkdir_local); 191 define_hmdfs_lookup_op_end_event(hmdfs_rmdir_local); 192 define_hmdfs_lookup_op_end_event(hmdfs_create_local); 193 194 define_hmdfs_lookup_op_end_event(hmdfs_lookup_remote); 195 define_hmdfs_lookup_op_end_event(hmdfs_lookup_remote_end); 196 define_hmdfs_lookup_op_end_event(hmdfs_mkdir_remote); 197 define_hmdfs_lookup_op_end_event(hmdfs_rmdir_remote); 198 define_hmdfs_lookup_op_end_event(hmdfs_create_remote); 199 200 define_hmdfs_lookup_op_end_event(hmdfs_lookup_merge); 201 define_hmdfs_lookup_op_end_event(hmdfs_lookup_merge_end); 202 define_hmdfs_lookup_op_end_event(hmdfs_mkdir_merge); 203 define_hmdfs_lookup_op_end_event(hmdfs_rmdir_merge); 204 define_hmdfs_lookup_op_end_event(hmdfs_create_merge); 205 206 define_hmdfs_lookup_op_end_event(hmdfs_get_link_local); 207 define_hmdfs_lookup_op_end_event(hmdfs_lookup_share); 208 define_hmdfs_lookup_op_end_event(hmdfs_lookup_share_end); 209 210 TRACE_EVENT(hmdfs_show_comrade, 211 212 TP_PROTO(struct dentry *d, struct dentry *lo_d, uint64_t devid), 213 214 TP_ARGS(d, lo_d, devid), 215 216 TP_STRUCT__entry( 217 __string(name, d->d_name.name) 218 __string(lo_name, lo_d->d_name.name) 219 __field(uint64_t, devid) 220 ), 221 222 TP_fast_assign( 223 __assign_str(name, d->d_name.name) 224 __assign_str(lo_name, lo_d->d_name.name) 225 __entry->devid = devid; 226 ), 227 228 TP_printk("parent_name:%s -> lo_d_name:%s, lo_d_devid:%llu", 229 __get_str(name), __get_str(lo_name), __entry->devid) 230 ); 231 232 DECLARE_EVENT_CLASS(hmdfs_rename_op_end, 233 234 TP_PROTO(struct inode *olddir, struct dentry *olddentry, 235 struct inode *newdir, struct dentry *newdentry, 236 unsigned int flags), 237 238 TP_ARGS(olddir, olddentry, newdir, newdentry, flags), 239 240 TP_STRUCT__entry( 241 __field(ino_t, oldino) 242 __string(oldname_str, olddentry->d_name.name) 243 __field(ino_t, newino) 244 __string(newname_str, newdentry->d_name.name) 245 __field(unsigned int, flags) 246 ), 247 248 TP_fast_assign( 249 __entry->oldino = olddir->i_ino; 250 __assign_str(oldname_str, olddentry->d_name.name); 251 __entry->newino = newdir->i_ino; 252 __assign_str(newname_str, newdentry->d_name.name); 253 __entry->flags = flags; 254 ), 255 256 TP_printk("old_pino = %lu, oldname:%s; new_pino = %lu, newname:%s, flags:%u", 257 __entry->oldino, __get_str(oldname_str), 258 __entry->newino, __get_str(newname_str), __entry->flags) 259 ); 260 261 #define define_hmdfs_rename_op_end_event(event_name) \ 262 DEFINE_EVENT(hmdfs_rename_op_end, event_name, \ 263 TP_PROTO(struct inode *olddir, struct dentry *olddentry, \ 264 struct inode *newdir, struct dentry *newdentry, \ 265 unsigned int flags), \ 266 TP_ARGS(olddir, olddentry, newdir, newdentry, flags)) 267 268 define_hmdfs_rename_op_end_event(hmdfs_rename_local); 269 define_hmdfs_rename_op_end_event(hmdfs_rename_remote); 270 define_hmdfs_rename_op_end_event(hmdfs_rename_merge); 271 272 TRACE_EVENT(hmdfs_statfs, 273 274 TP_PROTO(struct dentry *d, uint8_t type), 275 276 TP_ARGS(d, type), 277 278 TP_STRUCT__entry( 279 __string(name, d->d_name.name) 280 __field(uint8_t, type) 281 ), 282 283 TP_fast_assign( 284 __assign_str(name, d->d_name.name) 285 __entry->type = type; 286 ), 287 288 TP_printk("dentry_name:%s, lo_d_devid:%u", 289 __get_str(name), __entry->type) 290 ); 291 292 293 294 TRACE_EVENT(hmdfs_balance_dirty_pages_ratelimited, 295 296 TP_PROTO(struct hmdfs_sb_info *sbi, 297 struct hmdfs_writeback *hwb, 298 int bdp_ratelimits), 299 300 TP_ARGS(sbi, hwb, bdp_ratelimits), 301 302 TP_STRUCT__entry( 303 __array(char, dst, 128) 304 __field(int, nr_dirtied) 305 __field(int, nr_dirtied_pause) 306 __field(int, dirty_exceeded) 307 __field(long long, bdp_ratelimits) 308 __field(long, ratelimit_pages) 309 ), 310 311 TP_fast_assign( 312 strlcpy(__entry->dst, sbi->local_dst, 128); 313 314 __entry->nr_dirtied = current->nr_dirtied; 315 __entry->nr_dirtied_pause = current->nr_dirtied_pause; 316 __entry->dirty_exceeded = hwb->dirty_exceeded; 317 __entry->bdp_ratelimits = bdp_ratelimits; 318 __entry->ratelimit_pages = hwb->ratelimit_pages; 319 ), 320 321 TP_printk("hmdfs dst:%s nr_dirtied=%d nr_dirtied_pause=%d dirty_exceeded=%d bdp_ratelimits=%lld ratelimit_pages=%ld", 322 __entry->dst, __entry->nr_dirtied, __entry->nr_dirtied_pause, 323 __entry->dirty_exceeded, __entry->bdp_ratelimits, 324 __entry->ratelimit_pages) 325 ); 326 327 TRACE_EVENT(hmdfs_balance_dirty_pages, 328 329 TP_PROTO(struct hmdfs_sb_info *sbi, 330 struct bdi_writeback *wb, 331 struct hmdfs_dirty_throttle_control *hdtc, 332 unsigned long pause, 333 unsigned long start_time), 334 335 TP_ARGS(sbi, wb, hdtc, pause, start_time), 336 337 TP_STRUCT__entry( 338 __array(char, dst, 128) 339 __field(unsigned long, write_bw) 340 __field(unsigned long, avg_write_bw) 341 __field(unsigned long, file_bg_thresh) 342 __field(unsigned long, fs_bg_thresh) 343 __field(unsigned long, file_thresh) 344 __field(unsigned long, fs_thresh) 345 __field(unsigned long, file_nr_dirty) 346 __field(unsigned long, fs_nr_dirty) 347 __field(unsigned long, file_nr_rec) 348 __field(unsigned long, fs_nr_rec) 349 __field(unsigned long, pause) 350 __field(unsigned long, paused) 351 ), 352 353 TP_fast_assign( 354 strlcpy(__entry->dst, sbi->local_dst, 128); 355 356 __entry->write_bw = wb->write_bandwidth; 357 __entry->avg_write_bw = wb->avg_write_bandwidth; 358 __entry->file_bg_thresh = hdtc->file_bg_thresh; 359 __entry->fs_bg_thresh = hdtc->fs_bg_thresh; 360 __entry->file_thresh = hdtc->file_thresh; 361 __entry->fs_thresh = hdtc->fs_thresh; 362 __entry->file_nr_dirty = hdtc->file_nr_dirty; 363 __entry->fs_nr_dirty = hdtc->fs_nr_dirty; 364 __entry->file_nr_rec = hdtc->file_nr_reclaimable; 365 __entry->fs_nr_rec = hdtc->fs_nr_reclaimable; 366 __entry->pause = pause * 1000 / HZ; 367 __entry->paused = (jiffies - start_time) * 368 1000 / HZ; 369 ), 370 371 TP_printk("hmdfs dst:%s write_bw=%lu, awrite_bw=%lu, bg_thresh=%lu,%lu thresh=%lu,%lu dirty=%lu,%lu reclaimable=%lu,%lu pause=%lu paused=%lu", 372 __entry->dst, __entry->write_bw, __entry->avg_write_bw, 373 __entry->file_bg_thresh, __entry->fs_bg_thresh, 374 __entry->file_thresh, __entry->fs_thresh, 375 __entry->file_nr_dirty, __entry->fs_nr_dirty, 376 __entry->file_nr_rec, __entry->fs_nr_rec, 377 __entry->pause, __entry->paused 378 ) 379 ); 380 381 TRACE_EVENT(hmdfs_start_srv_wb, 382 383 TP_PROTO(struct hmdfs_sb_info *sbi, int dirty_pages, 384 unsigned int dirty_thresh_pg), 385 386 TP_ARGS(sbi, dirty_pages, dirty_thresh_pg), 387 388 TP_STRUCT__entry( 389 __array(char, src, 128) 390 __field(int, dirty_pages) 391 __field(unsigned int, dirty_thresh_pg) 392 ), 393 394 TP_fast_assign( 395 strlcpy(__entry->src, sbi->local_src, 128); 396 __entry->dirty_pages = dirty_pages; 397 __entry->dirty_thresh_pg = dirty_thresh_pg; 398 ), 399 400 TP_printk("hmdfs src: %s, start writeback dirty pages. writeback %d pages dirty_thresh is %d pages", 401 __entry->src, __entry->dirty_pages, __entry->dirty_thresh_pg) 402 ); 403 404 TRACE_EVENT(hmdfs_fsync_enter_remote, 405 406 TP_PROTO(struct hmdfs_sb_info *sbi, unsigned long long device_id, 407 unsigned long long remote_ino, int datasync), 408 409 TP_ARGS(sbi, device_id, remote_ino, datasync), 410 411 TP_STRUCT__entry( 412 __array(char, src, 128) 413 __field(uint64_t, device_id) 414 __field(uint64_t, remote_ino) 415 __field(int, datasync) 416 ), 417 418 TP_fast_assign( 419 strlcpy(__entry->src, sbi->local_src, 128); 420 __entry->device_id = device_id; 421 __entry->remote_ino = remote_ino; 422 __entry->datasync = datasync; 423 ), 424 425 TP_printk("hmdfs: src %s, start remote fsync file(remote dev_id=%llu,ino=%llu), datasync=%d", 426 __entry->src, __entry->device_id, 427 __entry->remote_ino, __entry->datasync) 428 ); 429 430 TRACE_EVENT(hmdfs_fsync_exit_remote, 431 432 TP_PROTO(struct hmdfs_sb_info *sbi, unsigned long long device_id, 433 unsigned long long remote_ino, unsigned int timeout, int err), 434 435 TP_ARGS(sbi, device_id, remote_ino, timeout, err), 436 437 TP_STRUCT__entry( 438 __array(char, src, 128) 439 __field(uint64_t, device_id) 440 __field(uint64_t, remote_ino) 441 __field(uint32_t, timeout) 442 __field(int, err) 443 ), 444 445 TP_fast_assign( 446 strlcpy(__entry->src, sbi->local_src, 128); 447 __entry->device_id = device_id; 448 __entry->remote_ino = remote_ino; 449 __entry->timeout = timeout; 450 __entry->err = err; 451 ), 452 453 TP_printk("hmdfs: src %s, finish remote fsync file(remote dev_id=%llu,ino=%llu), timeout=%u, err=%d", 454 __entry->src, __entry->device_id, __entry->remote_ino, 455 __entry->timeout, __entry->err) 456 ); 457 458 TRACE_EVENT(hmdfs_syncfs_enter, 459 460 TP_PROTO(struct hmdfs_sb_info *sbi), 461 462 TP_ARGS(sbi), 463 464 TP_STRUCT__entry( 465 __array(char, src, 128) 466 ), 467 468 TP_fast_assign( 469 strlcpy(__entry->src, sbi->local_src, 128); 470 ), 471 472 TP_printk("hmdfs: src %s, start syncfs", __entry->src) 473 ); 474 475 TRACE_EVENT(hmdfs_syncfs_exit, 476 477 TP_PROTO(struct hmdfs_sb_info *sbi, int remain_count, 478 unsigned int timeout, int err), 479 480 TP_ARGS(sbi, remain_count, timeout, err), 481 482 TP_STRUCT__entry( 483 __array(char, src, 128) 484 __field(int, remain_count) 485 __field(uint32_t, timeout) 486 __field(int, err) 487 ), 488 489 TP_fast_assign( 490 strlcpy(__entry->src, sbi->local_src, 128); 491 __entry->remain_count = remain_count; 492 __entry->timeout = timeout; 493 __entry->err = err; 494 ), 495 496 TP_printk("hmdfs: src %s, finish syncfs(timeout=%u), remain %d remote devices to response, err=%d", 497 __entry->src, __entry->timeout, 498 __entry->remain_count, __entry->err) 499 ); 500 501 TRACE_EVENT(hmdfs_server_release, 502 503 TP_PROTO(struct hmdfs_peer *con, uint32_t file_id, 504 uint64_t file_ver, int err), 505 506 TP_ARGS(con, file_id, file_ver, err), 507 508 TP_STRUCT__entry( 509 __array(char, src, 128) 510 __field(uint32_t, file_id) 511 __field(uint64_t, file_ver) 512 __field(uint64_t, device_id) 513 __field(int, err) 514 ), 515 516 TP_fast_assign( 517 strlcpy(__entry->src, con->sbi->local_src, 128); 518 __entry->file_id = file_id; 519 __entry->file_ver = file_ver; 520 __entry->device_id = con->device_id; 521 __entry->err = err; 522 ), 523 524 TP_printk("hmdfs: src %s, server release file, fid=%u, fid_ver=%llu, remote_dev=%llu, err=%d", 525 __entry->src, __entry->file_id, __entry->file_ver, 526 __entry->device_id, __entry->err) 527 ); 528 529 TRACE_EVENT(hmdfs_readpages_cloud, 530 531 TP_PROTO(unsigned int nr_pages, int err), 532 533 TP_ARGS(nr_pages, err), 534 535 TP_STRUCT__entry( 536 __field(unsigned int, nr_pages) 537 __field(int, err) 538 ), 539 540 TP_fast_assign( 541 __entry->nr_pages = nr_pages; 542 __entry->err = err; 543 ), 544 545 TP_printk("nr_pages:%u, lo_d_devid:%d", 546 __entry->nr_pages, __entry->err) 547 ); 548 549 TRACE_EVENT(hmdfs_do_readpages_cloud_begin, 550 551 TP_PROTO(int cnt, loff_t pos), 552 553 TP_ARGS(cnt, pos), 554 555 TP_STRUCT__entry( 556 __field(int, cnt) 557 __field(loff_t, pos) 558 ), 559 560 TP_fast_assign( 561 __entry->cnt = cnt; 562 __entry->pos = pos; 563 ), 564 565 TP_printk("cnt:%d, pos:%llx", 566 __entry->cnt, __entry->pos) 567 ); 568 569 TRACE_EVENT(hmdfs_do_readpages_cloud_end, 570 571 TP_PROTO(int cnt, loff_t pos, int ret), 572 573 TP_ARGS(cnt, pos, ret), 574 575 TP_STRUCT__entry( 576 __field(int, cnt) 577 __field(loff_t, pos) 578 __field(int, ret) 579 ), 580 581 TP_fast_assign( 582 __entry->cnt = cnt; 583 __entry->pos = pos; 584 __entry->ret = ret; 585 ), 586 587 TP_printk("cnt:%d, pos:%llx", 588 __entry->cnt, __entry->pos, __entry->ret) 589 ); 590 591 TRACE_EVENT(hmdfs_client_recv_readpage, 592 593 TP_PROTO(struct hmdfs_peer *con, unsigned long long remote_ino, 594 unsigned long page_index, int err), 595 596 TP_ARGS(con, remote_ino, page_index, err), 597 598 TP_STRUCT__entry( 599 __array(char, src, 128) 600 __field(uint64_t, remote_ino) 601 __field(unsigned long, page_index) 602 __field(uint64_t, device_id) 603 __field(int, err) 604 ), 605 606 TP_fast_assign( 607 strlcpy(__entry->src, con->sbi->local_src, 128); 608 __entry->remote_ino = remote_ino; 609 __entry->page_index = page_index; 610 __entry->device_id = con->device_id; 611 __entry->err = err; 612 ), 613 614 TP_printk("hmdfs: src %s, client readpage callback from remote device %llu, remote_ino=%llu, page_idx=%lu, err=%d", 615 __entry->src, __entry->device_id, 616 __entry->remote_ino, __entry->page_index, __entry->err) 617 ); 618 619 TRACE_EVENT(hmdfs_writepage_cb_enter, 620 621 TP_PROTO(struct hmdfs_peer *con, unsigned long long remote_ino, 622 unsigned long page_index, int err), 623 624 TP_ARGS(con, remote_ino, page_index, err), 625 626 TP_STRUCT__entry( 627 __array(char, src, 128) 628 __field(uint64_t, remote_ino) 629 __field(unsigned long, page_index) 630 __field(uint64_t, device_id) 631 __field(int, err) 632 ), 633 634 TP_fast_assign( 635 strlcpy(__entry->src, con->sbi->local_src, 128); 636 __entry->remote_ino = remote_ino; 637 __entry->page_index = page_index; 638 __entry->device_id = con->device_id; 639 __entry->err = err; 640 ), 641 642 TP_printk("hmdfs: src %s, writepage_cb start, return from remote device %llu, remote_ino=%llu, page_idx=%lu, err=%d", 643 __entry->src, __entry->device_id, 644 __entry->remote_ino, __entry->page_index, __entry->err) 645 ); 646 647 TRACE_EVENT(hmdfs_writepage_cb_exit, 648 649 TP_PROTO(struct hmdfs_peer *con, unsigned long long remote_ino, 650 unsigned long page_index, int err), 651 652 TP_ARGS(con, remote_ino, page_index, err), 653 654 TP_STRUCT__entry( 655 __array(char, src, 128) 656 __field(uint64_t, remote_ino) 657 __field(unsigned long, page_index) 658 __field(uint64_t, device_id) 659 __field(int, err) 660 ), 661 662 TP_fast_assign( 663 strlcpy(__entry->src, con->sbi->local_src, 128); 664 __entry->remote_ino = remote_ino; 665 __entry->page_index = page_index; 666 __entry->device_id = con->device_id; 667 __entry->err = err; 668 ), 669 670 TP_printk("hmdfs: src %s, writepage_cb exit, return from remote device %llu, remote_ino=%llu, page_index=%lu, err=%d", 671 __entry->src, __entry->device_id, 672 __entry->remote_ino, __entry->page_index, __entry->err) 673 ); 674 675 TRACE_EVENT(hmdfs_server_rebuild_dents, 676 677 TP_PROTO(struct hmdfs_dcache_header *__h, int err), 678 679 TP_ARGS(__h, err), 680 681 TP_STRUCT__entry( 682 __field(uint64_t, crtime) 683 __field(uint64_t, crtime_nsec) 684 __field(uint64_t, ctime) 685 __field(uint64_t, ctime_nsec) 686 __field(uint64_t, num) 687 __field(int, err) 688 ), 689 690 TP_fast_assign( 691 __entry->crtime = le64_to_cpu(__h->dcache_crtime); 692 __entry->crtime_nsec = le64_to_cpu(__h->dcache_crtime_nsec); 693 __entry->ctime = le64_to_cpu(__h->dentry_ctime); 694 __entry->ctime_nsec = le64_to_cpu(__h->dentry_ctime_nsec); 695 __entry->num = le64_to_cpu(__h->num); 696 __entry->err = err; 697 ), 698 699 TP_printk("dcache crtime %llu:%llu ctime %llu:%llu has %llu dentry err %d", 700 __entry->crtime, __entry->crtime_nsec, __entry->ctime, 701 __entry->ctime_nsec, __entry->num, __entry->err) 702 ); 703 704 TRACE_EVENT(hmdfs_server_readdir, 705 706 TP_PROTO(struct readdir_request *req), 707 708 TP_ARGS(req), 709 710 TP_STRUCT__entry( 711 __string(path, req->path) 712 ), 713 714 TP_fast_assign( 715 __assign_str(path, req->path); 716 ), 717 718 TP_printk("hmdfs_server_readdir %s", __get_str(path)) 719 ); 720 721 TRACE_EVENT(hmdfs_open_final_remote, 722 723 TP_PROTO(struct hmdfs_inode_info *info, 724 struct hmdfs_open_ret *open_ret, 725 struct file *file, 726 int reason), 727 728 TP_ARGS(info, open_ret, file, reason), 729 730 TP_STRUCT__entry( 731 __array(char, file_path, MAX_FILTER_STR_VAL) 732 __field(uint32_t, reason) 733 __field(uint32_t, file_id) 734 __field(uint64_t, file_ver) 735 __field(uint64_t, remote_file_size) 736 __field(uint64_t, remote_ino) 737 __field(uint64_t, remote_ctime) 738 __field(uint64_t, remote_ctime_nsec) 739 __field(uint64_t, remote_stable_ctime) 740 __field(uint64_t, remote_stable_ctime_nsec) 741 __field(uint64_t, local_file_size) 742 __field(uint64_t, local_ino) 743 __field(uint64_t, local_ctime) 744 __field(uint64_t, local_ctime_nsec) 745 __field(uint64_t, local_stable_ctime) 746 __field(uint64_t, local_stable_ctime_nsec) 747 ), 748 749 TP_fast_assign( 750 strlcpy(__entry->file_path, file->f_path.dentry->d_name.name, 751 MAX_FILTER_STR_VAL); 752 __entry->reason = reason; 753 __entry->file_id = open_ret->fid.id; 754 __entry->file_ver = open_ret->fid.ver; 755 __entry->remote_file_size = open_ret->file_size; 756 __entry->remote_ino = open_ret->ino; 757 __entry->remote_ctime = open_ret->remote_ctime.tv_sec; 758 __entry->remote_ctime_nsec = open_ret->remote_ctime.tv_nsec; 759 __entry->remote_stable_ctime = open_ret->stable_ctime.tv_sec; 760 __entry->remote_stable_ctime_nsec = 761 open_ret->stable_ctime.tv_nsec; 762 __entry->local_file_size = info->vfs_inode.i_size; 763 __entry->local_ino = info->remote_ino; 764 __entry->local_ctime = info->remote_ctime.tv_sec; 765 __entry->local_ctime_nsec = info->remote_ctime.tv_nsec; 766 __entry->local_stable_ctime = info->stable_ctime.tv_sec; 767 __entry->local_stable_ctime_nsec = info->stable_ctime.tv_nsec; 768 ), 769 770 TP_printk("file path: %s, file id: %u, file ver: %llu, reason: %d, file size: %llu/%llu, ino: %llu/%llu, ctime: %llu.%llu/%llu.%llu, stable_ctime: %llu.%llu/%llu.%llu from remote/local", 771 __entry->file_path, __entry->file_id, __entry->file_ver, 772 __entry->reason, __entry->remote_file_size, 773 __entry->local_file_size, __entry->remote_ino, 774 __entry->local_ino, __entry->remote_ctime, 775 __entry->remote_ctime_nsec, __entry->local_ctime, 776 __entry->local_ctime_nsec, __entry->remote_stable_ctime, 777 __entry->remote_stable_ctime_nsec, 778 __entry->local_stable_ctime, __entry->local_stable_ctime_nsec) 779 ); 780 781 TRACE_EVENT(hmdfs_server_open_enter, 782 783 TP_PROTO(struct hmdfs_peer *con, 784 struct open_request *recv), 785 786 TP_ARGS(con, recv), 787 788 TP_STRUCT__entry( 789 __array(char, open_path, MAX_FILTER_STR_VAL) 790 __array(char, dst_path, MAX_FILTER_STR_VAL) 791 __field(uint32_t, file_type) 792 ), 793 794 TP_fast_assign( 795 strlcpy(__entry->open_path, recv->buf, MAX_FILTER_STR_VAL); 796 strlcpy(__entry->dst_path, con->sbi->local_dst, 797 MAX_FILTER_STR_VAL); 798 __entry->file_type = recv->file_type; 799 ), 800 801 TP_printk("server open file %s from %s, file_type is %u", 802 __entry->open_path, __entry->dst_path, 803 __entry->file_type) 804 ); 805 806 TRACE_EVENT(hmdfs_server_open_exit, 807 808 TP_PROTO(struct hmdfs_peer *con, 809 struct open_response *resp, 810 struct file *file, 811 int ret), 812 813 TP_ARGS(con, resp, file, ret), 814 815 TP_STRUCT__entry( 816 __array(char, file_path, MAX_FILTER_STR_VAL) 817 __array(char, src_path, MAX_FILTER_STR_VAL) 818 __field(uint32_t, file_id) 819 __field(uint64_t, file_size) 820 __field(uint64_t, ino) 821 __field(uint64_t, ctime) 822 __field(uint64_t, ctime_nsec) 823 __field(uint64_t, stable_ctime) 824 __field(uint64_t, stable_ctime_nsec) 825 __field(int, retval) 826 ), 827 828 TP_fast_assign( 829 if (file) 830 strlcpy(__entry->file_path, 831 file->f_path.dentry->d_name.name, 832 MAX_FILTER_STR_VAL); 833 else 834 strlcpy(__entry->file_path, "null", MAX_FILTER_STR_VAL); 835 strlcpy(__entry->src_path, con->sbi->local_src, 836 MAX_FILTER_STR_VAL); 837 __entry->file_id = resp ? resp->file_id : UINT_MAX; 838 __entry->file_size = resp ? resp->file_size : ULLONG_MAX; 839 __entry->ino = resp ? resp->ino : 0; 840 __entry->ctime = resp ? resp->ctime : 0; 841 __entry->ctime_nsec = resp ? resp->ctime_nsec : 0; 842 __entry->stable_ctime = resp ? resp->stable_ctime : 0; 843 __entry->stable_ctime_nsec = resp ? resp->stable_ctime_nsec : 0; 844 __entry->retval = ret; 845 ), 846 847 TP_printk("server file %s is opened from %s, open result: %d, file id: %u, file size: %llu, ino: %llu, ctime: %llu.%llu, stable ctime: %llu.%llu", 848 __entry->file_path, __entry->src_path, 849 __entry->retval, __entry->file_id, 850 __entry->file_size, __entry->ino, __entry->ctime, 851 __entry->ctime_nsec, __entry->stable_ctime, 852 __entry->stable_ctime_nsec) 853 ); 854 855 TRACE_EVENT(hmdfs_merge_lookup_work_enter, 856 857 TP_PROTO(struct merge_lookup_work *ml_work), 858 859 TP_ARGS(ml_work), 860 861 TP_STRUCT__entry( 862 __field(int, devid) 863 __string(name, ml_work->name) 864 __field(unsigned int, flags) 865 ), 866 867 TP_fast_assign( 868 __entry->devid = ml_work->devid; 869 __assign_str(name, ml_work->name); 870 __entry->flags = ml_work->flags; 871 ), 872 873 TP_printk("devid = %d, name:%s, flags:%u", 874 __entry->devid, 875 __get_str(name), 876 __entry->flags) 877 ); 878 879 TRACE_EVENT(hmdfs_merge_lookup_work_exit, 880 881 TP_PROTO(struct merge_lookup_work *ml_work, int found), 882 883 TP_ARGS(ml_work, found), 884 885 TP_STRUCT__entry( 886 __field(int, devid) 887 __string(name, ml_work->name) 888 __field(unsigned int, flags) 889 __field(int, found) 890 ), 891 892 TP_fast_assign( 893 __entry->devid = ml_work->devid; 894 __assign_str(name, ml_work->name); 895 __entry->flags = ml_work->flags; 896 __entry->found = found; 897 ), 898 899 TP_printk("devid = %d, name:%s, flags:%u, found:%d", 900 __entry->devid, 901 __get_str(name), 902 __entry->flags, 903 __entry->found) 904 ); 905 906 TRACE_EVENT(hmdfs_merge_update_dentry_info_enter, 907 908 TP_PROTO(struct dentry *src_dentry, struct dentry *dst_dentry), 909 910 TP_ARGS(src_dentry, dst_dentry), 911 912 TP_STRUCT__entry( 913 __string(src_name, src_dentry->d_name.name) 914 __string(dst_name, dst_dentry->d_name.name) 915 ), 916 917 TP_fast_assign( 918 __assign_str(src_name, src_dentry->d_name.name); 919 __assign_str(dst_name, dst_dentry->d_name.name); 920 ), 921 922 TP_printk("src name:%s, dst name:%s", 923 __get_str(src_name), 924 __get_str(dst_name)) 925 ); 926 927 TRACE_EVENT(hmdfs_merge_update_dentry_info_exit, 928 929 TP_PROTO(struct dentry *src_dentry, struct dentry *dst_dentry), 930 931 TP_ARGS(src_dentry, dst_dentry), 932 933 TP_STRUCT__entry( 934 __string(src_name, src_dentry->d_name.name) 935 __string(dst_name, dst_dentry->d_name.name) 936 ), 937 938 TP_fast_assign( 939 __assign_str(src_name, src_dentry->d_name.name); 940 __assign_str(dst_name, dst_dentry->d_name.name); 941 ), 942 943 TP_printk("src name:%s, dst name:%s", 944 __get_str(src_name), 945 __get_str(dst_name)) 946 ); 947 948 #endif 949 950 #undef TRACE_INCLUDE_PATH 951 #undef TRACE_INCLUDE_FILE 952 #define TRACE_INCLUDE_PATH . 953 #define TRACE_INCLUDE_FILE hmdfs_trace 954 #include <trace/define_trace.h> 955