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