1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM nilfs2 4 5 #if !defined(_TRACE_NILFS2_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_NILFS2_H 7 8 #include <linux/tracepoint.h> 9 10 struct nilfs_sc_info; 11 12 #define show_collection_stage(type) \ 13 __print_symbolic(type, \ 14 { NILFS_ST_INIT, "ST_INIT" }, \ 15 { NILFS_ST_GC, "ST_GC" }, \ 16 { NILFS_ST_FILE, "ST_FILE" }, \ 17 { NILFS_ST_IFILE, "ST_IFILE" }, \ 18 { NILFS_ST_CPFILE, "ST_CPFILE" }, \ 19 { NILFS_ST_SUFILE, "ST_SUFILE" }, \ 20 { NILFS_ST_DAT, "ST_DAT" }, \ 21 { NILFS_ST_SR, "ST_SR" }, \ 22 { NILFS_ST_DSYNC, "ST_DSYNC" }, \ 23 { NILFS_ST_DONE, "ST_DONE"}) 24 25 TRACE_EVENT(nilfs2_collection_stage_transition, 26 27 TP_PROTO(struct nilfs_sc_info *sci), 28 29 TP_ARGS(sci), 30 31 TP_STRUCT__entry( 32 __field(void *, sci) 33 __field(int, stage) 34 ), 35 36 TP_fast_assign( 37 __entry->sci = sci; 38 __entry->stage = sci->sc_stage.scnt; 39 ), 40 41 TP_printk("sci = %p stage = %s", 42 __entry->sci, 43 show_collection_stage(__entry->stage)) 44 ); 45 46 #ifndef TRACE_HEADER_MULTI_READ 47 enum nilfs2_transaction_transition_state { 48 TRACE_NILFS2_TRANSACTION_BEGIN, 49 TRACE_NILFS2_TRANSACTION_COMMIT, 50 TRACE_NILFS2_TRANSACTION_ABORT, 51 TRACE_NILFS2_TRANSACTION_TRYLOCK, 52 TRACE_NILFS2_TRANSACTION_LOCK, 53 TRACE_NILFS2_TRANSACTION_UNLOCK, 54 }; 55 #endif 56 57 #define show_transaction_state(type) \ 58 __print_symbolic(type, \ 59 { TRACE_NILFS2_TRANSACTION_BEGIN, "BEGIN" }, \ 60 { TRACE_NILFS2_TRANSACTION_COMMIT, "COMMIT" }, \ 61 { TRACE_NILFS2_TRANSACTION_ABORT, "ABORT" }, \ 62 { TRACE_NILFS2_TRANSACTION_TRYLOCK, "TRYLOCK" }, \ 63 { TRACE_NILFS2_TRANSACTION_LOCK, "LOCK" }, \ 64 { TRACE_NILFS2_TRANSACTION_UNLOCK, "UNLOCK" }) 65 66 TRACE_EVENT(nilfs2_transaction_transition, 67 TP_PROTO(struct super_block *sb, 68 struct nilfs_transaction_info *ti, 69 int count, 70 unsigned int flags, 71 enum nilfs2_transaction_transition_state state), 72 73 TP_ARGS(sb, ti, count, flags, state), 74 75 TP_STRUCT__entry( 76 __field(void *, sb) 77 __field(void *, ti) 78 __field(int, count) 79 __field(unsigned int, flags) 80 __field(int, state) 81 ), 82 83 TP_fast_assign( 84 __entry->sb = sb; 85 __entry->ti = ti; 86 __entry->count = count; 87 __entry->flags = flags; 88 __entry->state = state; 89 ), 90 91 TP_printk("sb = %p ti = %p count = %d flags = %x state = %s", 92 __entry->sb, 93 __entry->ti, 94 __entry->count, 95 __entry->flags, 96 show_transaction_state(__entry->state)) 97 ); 98 99 TRACE_EVENT(nilfs2_segment_usage_check, 100 TP_PROTO(struct inode *sufile, 101 __u64 segnum, 102 unsigned long cnt), 103 104 TP_ARGS(sufile, segnum, cnt), 105 106 TP_STRUCT__entry( 107 __field(struct inode *, sufile) 108 __field(__u64, segnum) 109 __field(unsigned long, cnt) 110 ), 111 112 TP_fast_assign( 113 __entry->sufile = sufile; 114 __entry->segnum = segnum; 115 __entry->cnt = cnt; 116 ), 117 118 TP_printk("sufile = %p segnum = %llu cnt = %lu", 119 __entry->sufile, 120 __entry->segnum, 121 __entry->cnt) 122 ); 123 124 TRACE_EVENT(nilfs2_segment_usage_allocated, 125 TP_PROTO(struct inode *sufile, 126 __u64 segnum), 127 128 TP_ARGS(sufile, segnum), 129 130 TP_STRUCT__entry( 131 __field(struct inode *, sufile) 132 __field(__u64, segnum) 133 ), 134 135 TP_fast_assign( 136 __entry->sufile = sufile; 137 __entry->segnum = segnum; 138 ), 139 140 TP_printk("sufile = %p segnum = %llu", 141 __entry->sufile, 142 __entry->segnum) 143 ); 144 145 TRACE_EVENT(nilfs2_segment_usage_freed, 146 TP_PROTO(struct inode *sufile, 147 __u64 segnum), 148 149 TP_ARGS(sufile, segnum), 150 151 TP_STRUCT__entry( 152 __field(struct inode *, sufile) 153 __field(__u64, segnum) 154 ), 155 156 TP_fast_assign( 157 __entry->sufile = sufile; 158 __entry->segnum = segnum; 159 ), 160 161 TP_printk("sufile = %p segnum = %llu", 162 __entry->sufile, 163 __entry->segnum) 164 ); 165 166 TRACE_EVENT(nilfs2_mdt_insert_new_block, 167 TP_PROTO(struct inode *inode, 168 unsigned long ino, 169 unsigned long block), 170 171 TP_ARGS(inode, ino, block), 172 173 TP_STRUCT__entry( 174 __field(struct inode *, inode) 175 __field(unsigned long, ino) 176 __field(unsigned long, block) 177 ), 178 179 TP_fast_assign( 180 __entry->inode = inode; 181 __entry->ino = ino; 182 __entry->block = block; 183 ), 184 185 TP_printk("inode = %p ino = %lu block = %lu", 186 __entry->inode, 187 __entry->ino, 188 __entry->block) 189 ); 190 191 TRACE_EVENT(nilfs2_mdt_submit_block, 192 TP_PROTO(struct inode *inode, 193 unsigned long ino, 194 unsigned long blkoff, 195 enum req_op mode), 196 197 TP_ARGS(inode, ino, blkoff, mode), 198 199 TP_STRUCT__entry( 200 __field(struct inode *, inode) 201 __field(unsigned long, ino) 202 __field(unsigned long, blkoff) 203 /* 204 * Use field_struct() to avoid is_signed_type() on the 205 * bitwise type enum req_op. 206 */ 207 __field_struct(enum req_op, mode) 208 ), 209 210 TP_fast_assign( 211 __entry->inode = inode; 212 __entry->ino = ino; 213 __entry->blkoff = blkoff; 214 __entry->mode = mode; 215 ), 216 217 TP_printk("inode = %p ino = %lu blkoff = %lu mode = %x", 218 __entry->inode, 219 __entry->ino, 220 __entry->blkoff, 221 __entry->mode) 222 ); 223 224 #endif /* _TRACE_NILFS2_H */ 225 226 /* This part must be outside protection */ 227 #undef TRACE_INCLUDE_FILE 228 #define TRACE_INCLUDE_FILE nilfs2 229 #include <trace/define_trace.h> 230