@@ -47,6 +47,15 @@ enum netfs_sreq_trace {
47
47
netfs_sreq_trace_write_term ,
48
48
};
49
49
50
+ enum netfs_failure {
51
+ netfs_fail_check_write_begin ,
52
+ netfs_fail_copy_to_cache ,
53
+ netfs_fail_read ,
54
+ netfs_fail_short_readpage ,
55
+ netfs_fail_short_write_begin ,
56
+ netfs_fail_prepare_write ,
57
+ };
58
+
50
59
#endif
51
60
52
61
#define netfs_read_traces \
@@ -81,6 +90,14 @@ enum netfs_sreq_trace {
81
90
EM(netfs_sreq_trace_write_skip, "SKIP ") \
82
91
E_(netfs_sreq_trace_write_term, "WTERM")
83
92
93
+ #define netfs_failures \
94
+ EM(netfs_fail_check_write_begin, "check-write-begin") \
95
+ EM(netfs_fail_copy_to_cache, "copy-to-cache") \
96
+ EM(netfs_fail_read, "read") \
97
+ EM(netfs_fail_short_readpage, "short-readpage") \
98
+ EM(netfs_fail_short_write_begin, "short-write-begin") \
99
+ E_(netfs_fail_prepare_write, "prep-write")
100
+
84
101
85
102
/*
86
103
* Export enum symbols via userspace.
@@ -94,6 +111,7 @@ netfs_read_traces;
94
111
netfs_rreq_traces ;
95
112
netfs_sreq_sources ;
96
113
netfs_sreq_traces ;
114
+ netfs_failures ;
97
115
98
116
/*
99
117
* Now redefine the EM() and E_() macros to map the enums to the strings that
@@ -197,6 +215,46 @@ TRACE_EVENT(netfs_sreq,
197
215
__entry -> error )
198
216
);
199
217
218
+ TRACE_EVENT (netfs_failure ,
219
+ TP_PROTO (struct netfs_read_request * rreq ,
220
+ struct netfs_read_subrequest * sreq ,
221
+ int error , enum netfs_failure what ),
222
+
223
+ TP_ARGS (rreq , sreq , error , what ),
224
+
225
+ TP_STRUCT__entry (
226
+ __field (unsigned int , rreq )
227
+ __field (unsigned short , index )
228
+ __field (short , error )
229
+ __field (unsigned short , flags )
230
+ __field (enum netfs_read_source , source )
231
+ __field (enum netfs_failure , what )
232
+ __field (size_t , len )
233
+ __field (size_t , transferred )
234
+ __field (loff_t , start )
235
+ ),
236
+
237
+ TP_fast_assign (
238
+ __entry -> rreq = rreq -> debug_id ;
239
+ __entry -> index = sreq ? sreq -> debug_index : 0 ;
240
+ __entry -> error = error ;
241
+ __entry -> flags = sreq ? sreq -> flags : 0 ;
242
+ __entry -> source = sreq ? sreq -> source : NETFS_INVALID_READ ;
243
+ __entry -> what = what ;
244
+ __entry -> len = sreq ? sreq -> len : 0 ;
245
+ __entry -> transferred = sreq ? sreq -> transferred : 0 ;
246
+ __entry -> start = sreq ? sreq -> start : 0 ;
247
+ ),
248
+
249
+ TP_printk ("R=%08x[%u] %s f=%02x s=%llx %zx/%zx %s e=%d" ,
250
+ __entry -> rreq , __entry -> index ,
251
+ __print_symbolic (__entry -> source , netfs_sreq_sources ),
252
+ __entry -> flags ,
253
+ __entry -> start , __entry -> transferred , __entry -> len ,
254
+ __print_symbolic (__entry -> what , netfs_failures ),
255
+ __entry -> error )
256
+ );
257
+
200
258
#endif /* _TRACE_NETFS_H */
201
259
202
260
/* This part must be outside protection */
0 commit comments