0001
0002
0003
0004
0005
0006
0007 #undef TRACE_SYSTEM
0008 #define TRACE_SYSTEM netfs
0009
0010 #if !defined(_TRACE_NETFS_H) || defined(TRACE_HEADER_MULTI_READ)
0011 #define _TRACE_NETFS_H
0012
0013 #include <linux/tracepoint.h>
0014
0015
0016
0017
0018 #define netfs_read_traces \
0019 EM(netfs_read_trace_expanded, "EXPANDED ") \
0020 EM(netfs_read_trace_readahead, "READAHEAD") \
0021 EM(netfs_read_trace_readpage, "READPAGE ") \
0022 E_(netfs_read_trace_write_begin, "WRITEBEGN")
0023
0024 #define netfs_rreq_origins \
0025 EM(NETFS_READAHEAD, "RA") \
0026 EM(NETFS_READPAGE, "RP") \
0027 E_(NETFS_READ_FOR_WRITE, "RW")
0028
0029 #define netfs_rreq_traces \
0030 EM(netfs_rreq_trace_assess, "ASSESS ") \
0031 EM(netfs_rreq_trace_copy, "COPY ") \
0032 EM(netfs_rreq_trace_done, "DONE ") \
0033 EM(netfs_rreq_trace_free, "FREE ") \
0034 EM(netfs_rreq_trace_resubmit, "RESUBMT") \
0035 EM(netfs_rreq_trace_unlock, "UNLOCK ") \
0036 E_(netfs_rreq_trace_unmark, "UNMARK ")
0037
0038 #define netfs_sreq_sources \
0039 EM(NETFS_FILL_WITH_ZEROES, "ZERO") \
0040 EM(NETFS_DOWNLOAD_FROM_SERVER, "DOWN") \
0041 EM(NETFS_READ_FROM_CACHE, "READ") \
0042 E_(NETFS_INVALID_READ, "INVL") \
0043
0044 #define netfs_sreq_traces \
0045 EM(netfs_sreq_trace_download_instead, "RDOWN") \
0046 EM(netfs_sreq_trace_free, "FREE ") \
0047 EM(netfs_sreq_trace_prepare, "PREP ") \
0048 EM(netfs_sreq_trace_resubmit_short, "SHORT") \
0049 EM(netfs_sreq_trace_submit, "SUBMT") \
0050 EM(netfs_sreq_trace_terminated, "TERM ") \
0051 EM(netfs_sreq_trace_write, "WRITE") \
0052 EM(netfs_sreq_trace_write_skip, "SKIP ") \
0053 E_(netfs_sreq_trace_write_term, "WTERM")
0054
0055 #define netfs_failures \
0056 EM(netfs_fail_check_write_begin, "check-write-begin") \
0057 EM(netfs_fail_copy_to_cache, "copy-to-cache") \
0058 EM(netfs_fail_read, "read") \
0059 EM(netfs_fail_short_read, "short-read") \
0060 E_(netfs_fail_prepare_write, "prep-write")
0061
0062 #define netfs_rreq_ref_traces \
0063 EM(netfs_rreq_trace_get_hold, "GET HOLD ") \
0064 EM(netfs_rreq_trace_get_subreq, "GET SUBREQ ") \
0065 EM(netfs_rreq_trace_put_complete, "PUT COMPLT ") \
0066 EM(netfs_rreq_trace_put_discard, "PUT DISCARD") \
0067 EM(netfs_rreq_trace_put_failed, "PUT FAILED ") \
0068 EM(netfs_rreq_trace_put_hold, "PUT HOLD ") \
0069 EM(netfs_rreq_trace_put_subreq, "PUT SUBREQ ") \
0070 EM(netfs_rreq_trace_put_zero_len, "PUT ZEROLEN") \
0071 E_(netfs_rreq_trace_new, "NEW ")
0072
0073 #define netfs_sreq_ref_traces \
0074 EM(netfs_sreq_trace_get_copy_to_cache, "GET COPY2C ") \
0075 EM(netfs_sreq_trace_get_resubmit, "GET RESUBMIT") \
0076 EM(netfs_sreq_trace_get_short_read, "GET SHORTRD") \
0077 EM(netfs_sreq_trace_new, "NEW ") \
0078 EM(netfs_sreq_trace_put_clear, "PUT CLEAR ") \
0079 EM(netfs_sreq_trace_put_failed, "PUT FAILED ") \
0080 EM(netfs_sreq_trace_put_merged, "PUT MERGED ") \
0081 EM(netfs_sreq_trace_put_no_copy, "PUT NO COPY") \
0082 E_(netfs_sreq_trace_put_terminated, "PUT TERM ")
0083
0084 #ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
0085 #define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
0086
0087 #undef EM
0088 #undef E_
0089 #define EM(a, b) a,
0090 #define E_(a, b) a
0091
0092 enum netfs_read_trace { netfs_read_traces } __mode(byte);
0093 enum netfs_rreq_trace { netfs_rreq_traces } __mode(byte);
0094 enum netfs_sreq_trace { netfs_sreq_traces } __mode(byte);
0095 enum netfs_failure { netfs_failures } __mode(byte);
0096 enum netfs_rreq_ref_trace { netfs_rreq_ref_traces } __mode(byte);
0097 enum netfs_sreq_ref_trace { netfs_sreq_ref_traces } __mode(byte);
0098
0099 #endif
0100
0101
0102
0103
0104 #undef EM
0105 #undef E_
0106 #define EM(a, b) TRACE_DEFINE_ENUM(a);
0107 #define E_(a, b) TRACE_DEFINE_ENUM(a);
0108
0109 netfs_read_traces;
0110 netfs_rreq_origins;
0111 netfs_rreq_traces;
0112 netfs_sreq_sources;
0113 netfs_sreq_traces;
0114 netfs_failures;
0115 netfs_rreq_ref_traces;
0116 netfs_sreq_ref_traces;
0117
0118
0119
0120
0121
0122 #undef EM
0123 #undef E_
0124 #define EM(a, b) { a, b },
0125 #define E_(a, b) { a, b }
0126
0127 TRACE_EVENT(netfs_read,
0128 TP_PROTO(struct netfs_io_request *rreq,
0129 loff_t start, size_t len,
0130 enum netfs_read_trace what),
0131
0132 TP_ARGS(rreq, start, len, what),
0133
0134 TP_STRUCT__entry(
0135 __field(unsigned int, rreq )
0136 __field(unsigned int, cookie )
0137 __field(loff_t, start )
0138 __field(size_t, len )
0139 __field(enum netfs_read_trace, what )
0140 __field(unsigned int, netfs_inode )
0141 ),
0142
0143 TP_fast_assign(
0144 __entry->rreq = rreq->debug_id;
0145 __entry->cookie = rreq->cache_resources.debug_id;
0146 __entry->start = start;
0147 __entry->len = len;
0148 __entry->what = what;
0149 __entry->netfs_inode = rreq->inode->i_ino;
0150 ),
0151
0152 TP_printk("R=%08x %s c=%08x ni=%x s=%llx %zx",
0153 __entry->rreq,
0154 __print_symbolic(__entry->what, netfs_read_traces),
0155 __entry->cookie,
0156 __entry->netfs_inode,
0157 __entry->start, __entry->len)
0158 );
0159
0160 TRACE_EVENT(netfs_rreq,
0161 TP_PROTO(struct netfs_io_request *rreq,
0162 enum netfs_rreq_trace what),
0163
0164 TP_ARGS(rreq, what),
0165
0166 TP_STRUCT__entry(
0167 __field(unsigned int, rreq )
0168 __field(unsigned int, flags )
0169 __field(enum netfs_io_origin, origin )
0170 __field(enum netfs_rreq_trace, what )
0171 ),
0172
0173 TP_fast_assign(
0174 __entry->rreq = rreq->debug_id;
0175 __entry->flags = rreq->flags;
0176 __entry->origin = rreq->origin;
0177 __entry->what = what;
0178 ),
0179
0180 TP_printk("R=%08x %s %s f=%02x",
0181 __entry->rreq,
0182 __print_symbolic(__entry->origin, netfs_rreq_origins),
0183 __print_symbolic(__entry->what, netfs_rreq_traces),
0184 __entry->flags)
0185 );
0186
0187 TRACE_EVENT(netfs_sreq,
0188 TP_PROTO(struct netfs_io_subrequest *sreq,
0189 enum netfs_sreq_trace what),
0190
0191 TP_ARGS(sreq, what),
0192
0193 TP_STRUCT__entry(
0194 __field(unsigned int, rreq )
0195 __field(unsigned short, index )
0196 __field(short, error )
0197 __field(unsigned short, flags )
0198 __field(enum netfs_io_source, source )
0199 __field(enum netfs_sreq_trace, what )
0200 __field(size_t, len )
0201 __field(size_t, transferred )
0202 __field(loff_t, start )
0203 ),
0204
0205 TP_fast_assign(
0206 __entry->rreq = sreq->rreq->debug_id;
0207 __entry->index = sreq->debug_index;
0208 __entry->error = sreq->error;
0209 __entry->flags = sreq->flags;
0210 __entry->source = sreq->source;
0211 __entry->what = what;
0212 __entry->len = sreq->len;
0213 __entry->transferred = sreq->transferred;
0214 __entry->start = sreq->start;
0215 ),
0216
0217 TP_printk("R=%08x[%u] %s %s f=%02x s=%llx %zx/%zx e=%d",
0218 __entry->rreq, __entry->index,
0219 __print_symbolic(__entry->source, netfs_sreq_sources),
0220 __print_symbolic(__entry->what, netfs_sreq_traces),
0221 __entry->flags,
0222 __entry->start, __entry->transferred, __entry->len,
0223 __entry->error)
0224 );
0225
0226 TRACE_EVENT(netfs_failure,
0227 TP_PROTO(struct netfs_io_request *rreq,
0228 struct netfs_io_subrequest *sreq,
0229 int error, enum netfs_failure what),
0230
0231 TP_ARGS(rreq, sreq, error, what),
0232
0233 TP_STRUCT__entry(
0234 __field(unsigned int, rreq )
0235 __field(short, index )
0236 __field(short, error )
0237 __field(unsigned short, flags )
0238 __field(enum netfs_io_source, source )
0239 __field(enum netfs_failure, what )
0240 __field(size_t, len )
0241 __field(size_t, transferred )
0242 __field(loff_t, start )
0243 ),
0244
0245 TP_fast_assign(
0246 __entry->rreq = rreq->debug_id;
0247 __entry->index = sreq ? sreq->debug_index : -1;
0248 __entry->error = error;
0249 __entry->flags = sreq ? sreq->flags : 0;
0250 __entry->source = sreq ? sreq->source : NETFS_INVALID_READ;
0251 __entry->what = what;
0252 __entry->len = sreq ? sreq->len : rreq->len;
0253 __entry->transferred = sreq ? sreq->transferred : 0;
0254 __entry->start = sreq ? sreq->start : 0;
0255 ),
0256
0257 TP_printk("R=%08x[%d] %s f=%02x s=%llx %zx/%zx %s e=%d",
0258 __entry->rreq, __entry->index,
0259 __print_symbolic(__entry->source, netfs_sreq_sources),
0260 __entry->flags,
0261 __entry->start, __entry->transferred, __entry->len,
0262 __print_symbolic(__entry->what, netfs_failures),
0263 __entry->error)
0264 );
0265
0266 TRACE_EVENT(netfs_rreq_ref,
0267 TP_PROTO(unsigned int rreq_debug_id, int ref,
0268 enum netfs_rreq_ref_trace what),
0269
0270 TP_ARGS(rreq_debug_id, ref, what),
0271
0272 TP_STRUCT__entry(
0273 __field(unsigned int, rreq )
0274 __field(int, ref )
0275 __field(enum netfs_rreq_ref_trace, what )
0276 ),
0277
0278 TP_fast_assign(
0279 __entry->rreq = rreq_debug_id;
0280 __entry->ref = ref;
0281 __entry->what = what;
0282 ),
0283
0284 TP_printk("R=%08x %s r=%u",
0285 __entry->rreq,
0286 __print_symbolic(__entry->what, netfs_rreq_ref_traces),
0287 __entry->ref)
0288 );
0289
0290 TRACE_EVENT(netfs_sreq_ref,
0291 TP_PROTO(unsigned int rreq_debug_id, unsigned int subreq_debug_index,
0292 int ref, enum netfs_sreq_ref_trace what),
0293
0294 TP_ARGS(rreq_debug_id, subreq_debug_index, ref, what),
0295
0296 TP_STRUCT__entry(
0297 __field(unsigned int, rreq )
0298 __field(unsigned int, subreq )
0299 __field(int, ref )
0300 __field(enum netfs_sreq_ref_trace, what )
0301 ),
0302
0303 TP_fast_assign(
0304 __entry->rreq = rreq_debug_id;
0305 __entry->subreq = subreq_debug_index;
0306 __entry->ref = ref;
0307 __entry->what = what;
0308 ),
0309
0310 TP_printk("R=%08x[%x] %s r=%u",
0311 __entry->rreq,
0312 __entry->subreq,
0313 __print_symbolic(__entry->what, netfs_sreq_ref_traces),
0314 __entry->ref)
0315 );
0316
0317 #undef EM
0318 #undef E_
0319 #endif
0320
0321
0322 #include <trace/define_trace.h>