File Index
Files and directories
Sign in
FILE

cachefiles.h

File preview with syntax highlighting.

linux-6.19.14/include/trace/events/cachefiles.h C
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/* CacheFiles tracepoints
  3 *
  4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
  5 * Written by David Howells (dhowells@redhat.com)
  6 */
  7#undef TRACE_SYSTEM
  8#define TRACE_SYSTEM cachefiles
  9
 10#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
 11#define _TRACE_CACHEFILES_H
 12
 13#include <linux/tracepoint.h>
 14
 15/*
 16 * Define enums for tracing information.
 17 */
 18#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
 19#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
 20
 21enum cachefiles_obj_ref_trace {
 22	cachefiles_obj_get_ioreq,
 23	cachefiles_obj_new,
 24	cachefiles_obj_put_alloc_fail,
 25	cachefiles_obj_put_detach,
 26	cachefiles_obj_put_ioreq,
 27	cachefiles_obj_see_clean_commit,
 28	cachefiles_obj_see_clean_delete,
 29	cachefiles_obj_see_clean_drop_tmp,
 30	cachefiles_obj_see_lookup_cookie,
 31	cachefiles_obj_see_lookup_failed,
 32	cachefiles_obj_see_withdraw_cookie,
 33	cachefiles_obj_see_withdrawal,
 34	cachefiles_obj_get_ondemand_fd,
 35	cachefiles_obj_put_ondemand_fd,
 36	cachefiles_obj_get_read_req,
 37	cachefiles_obj_put_read_req,
 38};
 39
 40enum fscache_why_object_killed {
 41	FSCACHE_OBJECT_IS_STALE,
 42	FSCACHE_OBJECT_IS_WEIRD,
 43	FSCACHE_OBJECT_INVALIDATED,
 44	FSCACHE_OBJECT_NO_SPACE,
 45	FSCACHE_OBJECT_WAS_RETIRED,
 46	FSCACHE_OBJECT_WAS_CULLED,
 47	FSCACHE_VOLUME_IS_WEIRD,
 48};
 49
 50enum cachefiles_coherency_trace {
 51	cachefiles_coherency_check_aux,
 52	cachefiles_coherency_check_content,
 53	cachefiles_coherency_check_dirty,
 54	cachefiles_coherency_check_len,
 55	cachefiles_coherency_check_objsize,
 56	cachefiles_coherency_check_ok,
 57	cachefiles_coherency_check_type,
 58	cachefiles_coherency_check_xattr,
 59	cachefiles_coherency_set_fail,
 60	cachefiles_coherency_set_ok,
 61	cachefiles_coherency_vol_check_cmp,
 62	cachefiles_coherency_vol_check_ok,
 63	cachefiles_coherency_vol_check_resv,
 64	cachefiles_coherency_vol_check_xattr,
 65	cachefiles_coherency_vol_set_fail,
 66	cachefiles_coherency_vol_set_ok,
 67};
 68
 69enum cachefiles_trunc_trace {
 70	cachefiles_trunc_dio_adjust,
 71	cachefiles_trunc_expand_tmpfile,
 72	cachefiles_trunc_shrink,
 73};
 74
 75enum cachefiles_prepare_read_trace {
 76	cachefiles_trace_read_after_eof,
 77	cachefiles_trace_read_found_hole,
 78	cachefiles_trace_read_found_part,
 79	cachefiles_trace_read_have_data,
 80	cachefiles_trace_read_no_data,
 81	cachefiles_trace_read_no_file,
 82	cachefiles_trace_read_seek_error,
 83	cachefiles_trace_read_seek_nxio,
 84};
 85
 86enum cachefiles_error_trace {
 87	cachefiles_trace_fallocate_error,
 88	cachefiles_trace_getxattr_error,
 89	cachefiles_trace_link_error,
 90	cachefiles_trace_lookup_error,
 91	cachefiles_trace_mkdir_error,
 92	cachefiles_trace_notify_change_error,
 93	cachefiles_trace_open_error,
 94	cachefiles_trace_read_error,
 95	cachefiles_trace_remxattr_error,
 96	cachefiles_trace_rename_error,
 97	cachefiles_trace_seek_error,
 98	cachefiles_trace_setxattr_error,
 99	cachefiles_trace_statfs_error,
100	cachefiles_trace_tmpfile_error,
101	cachefiles_trace_trunc_error,
102	cachefiles_trace_unlink_error,
103	cachefiles_trace_write_error,
104};
105
106#endif
107
108/*
109 * Define enum -> string mappings for display.
110 */
111#define cachefiles_obj_kill_traces				\
112	EM(FSCACHE_OBJECT_IS_STALE,	"stale")		\
113	EM(FSCACHE_OBJECT_IS_WEIRD,	"weird")		\
114	EM(FSCACHE_OBJECT_INVALIDATED,	"inval")		\
115	EM(FSCACHE_OBJECT_NO_SPACE,	"no_space")		\
116	EM(FSCACHE_OBJECT_WAS_RETIRED,	"was_retired")		\
117	EM(FSCACHE_OBJECT_WAS_CULLED,	"was_culled")		\
118	E_(FSCACHE_VOLUME_IS_WEIRD,	"volume_weird")
119
120#define cachefiles_obj_ref_traces					\
121	EM(cachefiles_obj_get_ioreq,		"GET ioreq")		\
122	EM(cachefiles_obj_new,			"NEW obj")		\
123	EM(cachefiles_obj_put_alloc_fail,	"PUT alloc_fail")	\
124	EM(cachefiles_obj_put_detach,		"PUT detach")		\
125	EM(cachefiles_obj_put_ioreq,		"PUT ioreq")		\
126	EM(cachefiles_obj_see_clean_commit,	"SEE clean_commit")	\
127	EM(cachefiles_obj_see_clean_delete,	"SEE clean_delete")	\
128	EM(cachefiles_obj_see_clean_drop_tmp,	"SEE clean_drop_tmp")	\
129	EM(cachefiles_obj_see_lookup_cookie,	"SEE lookup_cookie")	\
130	EM(cachefiles_obj_see_lookup_failed,	"SEE lookup_failed")	\
131	EM(cachefiles_obj_see_withdraw_cookie,	"SEE withdraw_cookie")	\
132	EM(cachefiles_obj_see_withdrawal,	"SEE withdrawal")	\
133	EM(cachefiles_obj_get_ondemand_fd,      "GET ondemand_fd")	\
134	EM(cachefiles_obj_put_ondemand_fd,      "PUT ondemand_fd")	\
135	EM(cachefiles_obj_get_read_req,		"GET read_req")		\
136	E_(cachefiles_obj_put_read_req,		"PUT read_req")
137
138#define cachefiles_coherency_traces					\
139	EM(cachefiles_coherency_check_aux,	"BAD aux ")		\
140	EM(cachefiles_coherency_check_content,	"BAD cont")		\
141	EM(cachefiles_coherency_check_dirty,	"BAD dirt")		\
142	EM(cachefiles_coherency_check_len,	"BAD len ")		\
143	EM(cachefiles_coherency_check_objsize,	"BAD osiz")		\
144	EM(cachefiles_coherency_check_ok,	"OK      ")		\
145	EM(cachefiles_coherency_check_type,	"BAD type")		\
146	EM(cachefiles_coherency_check_xattr,	"BAD xatt")		\
147	EM(cachefiles_coherency_set_fail,	"SET fail")		\
148	EM(cachefiles_coherency_set_ok,		"SET ok  ")		\
149	EM(cachefiles_coherency_vol_check_cmp,	"VOL BAD cmp ")		\
150	EM(cachefiles_coherency_vol_check_ok,	"VOL OK      ")		\
151	EM(cachefiles_coherency_vol_check_resv,	"VOL BAD resv")	\
152	EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt")		\
153	EM(cachefiles_coherency_vol_set_fail,	"VOL SET fail")		\
154	E_(cachefiles_coherency_vol_set_ok,	"VOL SET ok  ")
155
156#define cachefiles_trunc_traces						\
157	EM(cachefiles_trunc_dio_adjust,		"DIOADJ")		\
158	EM(cachefiles_trunc_expand_tmpfile,	"EXPTMP")		\
159	E_(cachefiles_trunc_shrink,		"SHRINK")
160
161#define cachefiles_prepare_read_traces					\
162	EM(cachefiles_trace_read_after_eof,	"after-eof ")		\
163	EM(cachefiles_trace_read_found_hole,	"found-hole")		\
164	EM(cachefiles_trace_read_found_part,	"found-part")		\
165	EM(cachefiles_trace_read_have_data,	"have-data ")		\
166	EM(cachefiles_trace_read_no_data,	"no-data   ")		\
167	EM(cachefiles_trace_read_no_file,	"no-file   ")		\
168	EM(cachefiles_trace_read_seek_error,	"seek-error")		\
169	E_(cachefiles_trace_read_seek_nxio,	"seek-enxio")
170
171#define cachefiles_error_traces						\
172	EM(cachefiles_trace_fallocate_error,	"fallocate")		\
173	EM(cachefiles_trace_getxattr_error,	"getxattr")		\
174	EM(cachefiles_trace_link_error,		"link")			\
175	EM(cachefiles_trace_lookup_error,	"lookup")		\
176	EM(cachefiles_trace_mkdir_error,	"mkdir")		\
177	EM(cachefiles_trace_notify_change_error, "notify_change")	\
178	EM(cachefiles_trace_open_error,		"open")			\
179	EM(cachefiles_trace_read_error,		"read")			\
180	EM(cachefiles_trace_remxattr_error,	"remxattr")		\
181	EM(cachefiles_trace_rename_error,	"rename")		\
182	EM(cachefiles_trace_seek_error,		"seek")			\
183	EM(cachefiles_trace_setxattr_error,	"setxattr")		\
184	EM(cachefiles_trace_statfs_error,	"statfs")		\
185	EM(cachefiles_trace_tmpfile_error,	"tmpfile")		\
186	EM(cachefiles_trace_trunc_error,	"trunc")		\
187	EM(cachefiles_trace_unlink_error,	"unlink")		\
188	E_(cachefiles_trace_write_error,	"write")
189
190
191/*
192 * Export enum symbols via userspace.
193 */
194#undef EM
195#undef E_
196#define EM(a, b) TRACE_DEFINE_ENUM(a);
197#define E_(a, b) TRACE_DEFINE_ENUM(a);
198
199cachefiles_obj_kill_traces;
200cachefiles_obj_ref_traces;
201cachefiles_coherency_traces;
202cachefiles_trunc_traces;
203cachefiles_prepare_read_traces;
204cachefiles_error_traces;
205
206/*
207 * Now redefine the EM() and E_() macros to map the enums to the strings that
208 * will be printed in the output.
209 */
210#undef EM
211#undef E_
212#define EM(a, b)	{ a, b },
213#define E_(a, b)	{ a, b }
214
215
216TRACE_EVENT(cachefiles_ref,
217	    TP_PROTO(unsigned int object_debug_id,
218		     unsigned int cookie_debug_id,
219		     int usage,
220		     enum cachefiles_obj_ref_trace why),
221
222	    TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
223
224	    /* Note that obj may be NULL */
225	    TP_STRUCT__entry(
226		    __field(unsigned int,			obj)
227		    __field(unsigned int,			cookie)
228		    __field(enum cachefiles_obj_ref_trace,	why)
229		    __field(int,				usage)
230			     ),
231
232	    TP_fast_assign(
233		    __entry->obj	= object_debug_id;
234		    __entry->cookie	= cookie_debug_id;
235		    __entry->usage	= usage;
236		    __entry->why	= why;
237			   ),
238
239	    TP_printk("c=%08x o=%08x u=%d %s",
240		      __entry->cookie, __entry->obj, __entry->usage,
241		      __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
242	    );
243
244TRACE_EVENT(cachefiles_lookup,
245	    TP_PROTO(struct cachefiles_object *obj,
246		     struct dentry *dir,
247		     struct dentry *de),
248
249	    TP_ARGS(obj, dir, de),
250
251	    TP_STRUCT__entry(
252		    __field(unsigned int,		obj)
253		    __field(short,			error)
254		    __field(unsigned long,		dino)
255		    __field(unsigned long,		ino)
256			     ),
257
258	    TP_fast_assign(
259		    __entry->obj	= obj ? obj->debug_id : 0;
260		    __entry->dino	= d_backing_inode(dir)->i_ino;
261		    __entry->ino	= (!IS_ERR(de) && d_backing_inode(de) ?
262					   d_backing_inode(de)->i_ino : 0);
263		    __entry->error	= IS_ERR(de) ? PTR_ERR(de) : 0;
264			   ),
265
266	    TP_printk("o=%08x dB=%lx B=%lx e=%d",
267		      __entry->obj, __entry->dino, __entry->ino, __entry->error)
268	    );
269
270TRACE_EVENT(cachefiles_mkdir,
271	    TP_PROTO(struct dentry *dir, struct dentry *subdir),
272
273	    TP_ARGS(dir, subdir),
274
275	    TP_STRUCT__entry(
276		    __field(unsigned int,			dir)
277		    __field(unsigned int,			subdir)
278			     ),
279
280	    TP_fast_assign(
281		    __entry->dir	= d_backing_inode(dir)->i_ino;
282		    __entry->subdir	= d_backing_inode(subdir)->i_ino;
283			   ),
284
285	    TP_printk("dB=%x sB=%x",
286		      __entry->dir,
287		      __entry->subdir)
288	    );
289
290TRACE_EVENT(cachefiles_tmpfile,
291	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
292
293	    TP_ARGS(obj, backer),
294
295	    TP_STRUCT__entry(
296		    __field(unsigned int,			obj)
297		    __field(unsigned int,			backer)
298			     ),
299
300	    TP_fast_assign(
301		    __entry->obj	= obj->debug_id;
302		    __entry->backer	= backer->i_ino;
303			   ),
304
305	    TP_printk("o=%08x B=%x",
306		      __entry->obj,
307		      __entry->backer)
308	    );
309
310TRACE_EVENT(cachefiles_link,
311	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
312
313	    TP_ARGS(obj, backer),
314
315	    TP_STRUCT__entry(
316		    __field(unsigned int,			obj)
317		    __field(unsigned int,			backer)
318			     ),
319
320	    TP_fast_assign(
321		    __entry->obj	= obj->debug_id;
322		    __entry->backer	= backer->i_ino;
323			   ),
324
325	    TP_printk("o=%08x B=%x",
326		      __entry->obj,
327		      __entry->backer)
328	    );
329
330TRACE_EVENT(cachefiles_unlink,
331	    TP_PROTO(struct cachefiles_object *obj,
332		     ino_t ino,
333		     enum fscache_why_object_killed why),
334
335	    TP_ARGS(obj, ino, why),
336
337	    /* Note that obj may be NULL */
338	    TP_STRUCT__entry(
339		    __field(unsigned int,		obj)
340		    __field(unsigned int,		ino)
341		    __field(enum fscache_why_object_killed, why)
342			     ),
343
344	    TP_fast_assign(
345		    __entry->obj	= obj ? obj->debug_id : UINT_MAX;
346		    __entry->ino	= ino;
347		    __entry->why	= why;
348			   ),
349
350	    TP_printk("o=%08x B=%x w=%s",
351		      __entry->obj, __entry->ino,
352		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
353	    );
354
355TRACE_EVENT(cachefiles_rename,
356	    TP_PROTO(struct cachefiles_object *obj,
357		     ino_t ino,
358		     enum fscache_why_object_killed why),
359
360	    TP_ARGS(obj, ino, why),
361
362	    /* Note that obj may be NULL */
363	    TP_STRUCT__entry(
364		    __field(unsigned int,		obj)
365		    __field(unsigned int,		ino)
366		    __field(enum fscache_why_object_killed, why)
367			     ),
368
369	    TP_fast_assign(
370		    __entry->obj	= obj ? obj->debug_id : UINT_MAX;
371		    __entry->ino	= ino;
372		    __entry->why	= why;
373			   ),
374
375	    TP_printk("o=%08x B=%x w=%s",
376		      __entry->obj, __entry->ino,
377		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
378	    );
379
380TRACE_EVENT(cachefiles_coherency,
381	    TP_PROTO(struct cachefiles_object *obj,
382		     ino_t ino,
383		     u64 disk_aux,
384		     enum cachefiles_content content,
385		     enum cachefiles_coherency_trace why),
386
387	    TP_ARGS(obj, ino, disk_aux, content, why),
388
389	    /* Note that obj may be NULL */
390	    TP_STRUCT__entry(
391		    __field(unsigned int,			obj)
392		    __field(enum cachefiles_coherency_trace,	why)
393		    __field(enum cachefiles_content,		content)
394		    __field(u64,				ino)
395		    __field(u64,				aux)
396		    __field(u64,				disk_aux)
397			     ),
398
399	    TP_fast_assign(
400		    __entry->obj	= obj->debug_id;
401		    __entry->why	= why;
402		    __entry->content	= content;
403		    __entry->ino	= ino;
404		    __entry->aux	= be64_to_cpup((__be64 *)obj->cookie->inline_aux);
405		    __entry->disk_aux	= disk_aux;
406			   ),
407
408	    TP_printk("o=%08x %s B=%llx c=%u aux=%llx dsk=%llx",
409		      __entry->obj,
410		      __print_symbolic(__entry->why, cachefiles_coherency_traces),
411		      __entry->ino,
412		      __entry->content,
413		      __entry->aux,
414		      __entry->disk_aux)
415	    );
416
417TRACE_EVENT(cachefiles_vol_coherency,
418	    TP_PROTO(struct cachefiles_volume *volume,
419		     ino_t ino,
420		     enum cachefiles_coherency_trace why),
421
422	    TP_ARGS(volume, ino, why),
423
424	    /* Note that obj may be NULL */
425	    TP_STRUCT__entry(
426		    __field(unsigned int,			vol)
427		    __field(enum cachefiles_coherency_trace,	why)
428		    __field(u64,				ino)
429			     ),
430
431	    TP_fast_assign(
432		    __entry->vol	= volume->vcookie->debug_id;
433		    __entry->why	= why;
434		    __entry->ino	= ino;
435			   ),
436
437	    TP_printk("V=%08x %s B=%llx",
438		      __entry->vol,
439		      __print_symbolic(__entry->why, cachefiles_coherency_traces),
440		      __entry->ino)
441	    );
442
443TRACE_EVENT(cachefiles_prep_read,
444	    TP_PROTO(struct cachefiles_object *obj,
445		     loff_t start,
446		     size_t len,
447		     unsigned short flags,
448		     enum netfs_io_source source,
449		     enum cachefiles_prepare_read_trace why,
450		     ino_t cache_inode, ino_t netfs_inode),
451
452	    TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
453
454	    TP_STRUCT__entry(
455		    __field(unsigned int,		obj)
456		    __field(unsigned short,		flags)
457		    __field(enum netfs_io_source,	source)
458		    __field(enum cachefiles_prepare_read_trace,	why)
459		    __field(size_t,			len)
460		    __field(loff_t,			start)
461		    __field(unsigned int,		netfs_inode)
462		    __field(unsigned int,		cache_inode)
463			     ),
464
465	    TP_fast_assign(
466		    __entry->obj	= obj ? obj->debug_id : 0;
467		    __entry->flags	= flags;
468		    __entry->source	= source;
469		    __entry->why	= why;
470		    __entry->len	= len;
471		    __entry->start	= start;
472		    __entry->netfs_inode = netfs_inode;
473		    __entry->cache_inode = cache_inode;
474			   ),
475
476	    TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
477		      __entry->obj,
478		      __print_symbolic(__entry->source, netfs_sreq_sources),
479		      __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
480		      __entry->flags,
481		      __entry->start, __entry->len,
482		      __entry->netfs_inode, __entry->cache_inode)
483	    );
484
485TRACE_EVENT(cachefiles_read,
486	    TP_PROTO(struct cachefiles_object *obj,
487		     struct inode *backer,
488		     loff_t start,
489		     size_t len),
490
491	    TP_ARGS(obj, backer, start, len),
492
493	    TP_STRUCT__entry(
494		    __field(unsigned int,			obj)
495		    __field(unsigned int,			backer)
496		    __field(size_t,				len)
497		    __field(loff_t,				start)
498			     ),
499
500	    TP_fast_assign(
501		    __entry->obj	= obj->debug_id;
502		    __entry->backer	= backer->i_ino;
503		    __entry->start	= start;
504		    __entry->len	= len;
505			   ),
506
507	    TP_printk("o=%08x B=%x s=%llx l=%zx",
508		      __entry->obj,
509		      __entry->backer,
510		      __entry->start,
511		      __entry->len)
512	    );
513
514TRACE_EVENT(cachefiles_write,
515	    TP_PROTO(struct cachefiles_object *obj,
516		     struct inode *backer,
517		     loff_t start,
518		     size_t len),
519
520	    TP_ARGS(obj, backer, start, len),
521
522	    TP_STRUCT__entry(
523		    __field(unsigned int,			obj)
524		    __field(unsigned int,			backer)
525		    __field(size_t,				len)
526		    __field(loff_t,				start)
527			     ),
528
529	    TP_fast_assign(
530		    __entry->obj	= obj->debug_id;
531		    __entry->backer	= backer->i_ino;
532		    __entry->start	= start;
533		    __entry->len	= len;
534			   ),
535
536	    TP_printk("o=%08x B=%x s=%llx l=%zx",
537		      __entry->obj,
538		      __entry->backer,
539		      __entry->start,
540		      __entry->len)
541	    );
542
543TRACE_EVENT(cachefiles_trunc,
544	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
545		     loff_t from, loff_t to, enum cachefiles_trunc_trace why),
546
547	    TP_ARGS(obj, backer, from, to, why),
548
549	    TP_STRUCT__entry(
550		    __field(unsigned int,			obj)
551		    __field(unsigned int,			backer)
552		    __field(enum cachefiles_trunc_trace,	why)
553		    __field(loff_t,				from)
554		    __field(loff_t,				to)
555			     ),
556
557	    TP_fast_assign(
558		    __entry->obj	= obj->debug_id;
559		    __entry->backer	= backer->i_ino;
560		    __entry->from	= from;
561		    __entry->to		= to;
562		    __entry->why	= why;
563			   ),
564
565	    TP_printk("o=%08x B=%x %s l=%llx->%llx",
566		      __entry->obj,
567		      __entry->backer,
568		      __print_symbolic(__entry->why, cachefiles_trunc_traces),
569		      __entry->from,
570		      __entry->to)
571	    );
572
573TRACE_EVENT(cachefiles_mark_active,
574	    TP_PROTO(struct cachefiles_object *obj,
575		     struct inode *inode),
576
577	    TP_ARGS(obj, inode),
578
579	    /* Note that obj may be NULL */
580	    TP_STRUCT__entry(
581		    __field(unsigned int,		obj)
582		    __field(ino_t,			inode)
583			     ),
584
585	    TP_fast_assign(
586		    __entry->obj	= obj ? obj->debug_id : 0;
587		    __entry->inode	= inode->i_ino;
588			   ),
589
590	    TP_printk("o=%08x B=%lx",
591		      __entry->obj, __entry->inode)
592	    );
593
594TRACE_EVENT(cachefiles_mark_failed,
595	    TP_PROTO(struct cachefiles_object *obj,
596		     struct inode *inode),
597
598	    TP_ARGS(obj, inode),
599
600	    /* Note that obj may be NULL */
601	    TP_STRUCT__entry(
602		    __field(unsigned int,		obj)
603		    __field(ino_t,			inode)
604			     ),
605
606	    TP_fast_assign(
607		    __entry->obj	= obj ? obj->debug_id : 0;
608		    __entry->inode	= inode->i_ino;
609			   ),
610
611	    TP_printk("o=%08x B=%lx",
612		      __entry->obj, __entry->inode)
613	    );
614
615TRACE_EVENT(cachefiles_mark_inactive,
616	    TP_PROTO(struct cachefiles_object *obj,
617		     struct inode *inode),
618
619	    TP_ARGS(obj, inode),
620
621	    /* Note that obj may be NULL */
622	    TP_STRUCT__entry(
623		    __field(unsigned int,		obj)
624		    __field(ino_t,			inode)
625			     ),
626
627	    TP_fast_assign(
628		    __entry->obj	= obj ? obj->debug_id : 0;
629		    __entry->inode	= inode->i_ino;
630			   ),
631
632	    TP_printk("o=%08x B=%lx",
633		      __entry->obj, __entry->inode)
634	    );
635
636TRACE_EVENT(cachefiles_vfs_error,
637	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
638		     int error, enum cachefiles_error_trace where),
639
640	    TP_ARGS(obj, backer, error, where),
641
642	    TP_STRUCT__entry(
643		    __field(unsigned int,			obj)
644		    __field(unsigned int,			backer)
645		    __field(enum cachefiles_error_trace,	where)
646		    __field(short,				error)
647			     ),
648
649	    TP_fast_assign(
650		    __entry->obj	= obj ? obj->debug_id : 0;
651		    __entry->backer	= backer->i_ino;
652		    __entry->error	= error;
653		    __entry->where	= where;
654			   ),
655
656	    TP_printk("o=%08x B=%x %s e=%d",
657		      __entry->obj,
658		      __entry->backer,
659		      __print_symbolic(__entry->where, cachefiles_error_traces),
660		      __entry->error)
661	    );
662
663TRACE_EVENT(cachefiles_io_error,
664	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
665		     int error, enum cachefiles_error_trace where),
666
667	    TP_ARGS(obj, backer, error, where),
668
669	    TP_STRUCT__entry(
670		    __field(unsigned int,			obj)
671		    __field(unsigned int,			backer)
672		    __field(enum cachefiles_error_trace,	where)
673		    __field(short,				error)
674			     ),
675
676	    TP_fast_assign(
677		    __entry->obj	= obj ? obj->debug_id : 0;
678		    __entry->backer	= backer->i_ino;
679		    __entry->error	= error;
680		    __entry->where	= where;
681			   ),
682
683	    TP_printk("o=%08x B=%x %s e=%d",
684		      __entry->obj,
685		      __entry->backer,
686		      __print_symbolic(__entry->where, cachefiles_error_traces),
687		      __entry->error)
688	    );
689
690TRACE_EVENT(cachefiles_ondemand_open,
691	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
692		     struct cachefiles_open *load),
693
694	    TP_ARGS(obj, msg, load),
695
696	    TP_STRUCT__entry(
697		    __field(unsigned int,	obj)
698		    __field(unsigned int,	msg_id)
699		    __field(unsigned int,	object_id)
700		    __field(unsigned int,	fd)
701		    __field(unsigned int,	flags)
702			     ),
703
704	    TP_fast_assign(
705		    __entry->obj	= obj ? obj->debug_id : 0;
706		    __entry->msg_id	= msg->msg_id;
707		    __entry->object_id	= msg->object_id;
708		    __entry->fd		= load->fd;
709		    __entry->flags	= load->flags;
710			   ),
711
712	    TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
713		      __entry->obj,
714		      __entry->msg_id,
715		      __entry->object_id,
716		      __entry->fd,
717		      __entry->flags)
718	    );
719
720TRACE_EVENT(cachefiles_ondemand_copen,
721	    TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
722		     long len),
723
724	    TP_ARGS(obj, msg_id, len),
725
726	    TP_STRUCT__entry(
727		    __field(unsigned int,	obj)
728		    __field(unsigned int,	msg_id)
729		    __field(long,		len)
730			     ),
731
732	    TP_fast_assign(
733		    __entry->obj	= obj ? obj->debug_id : 0;
734		    __entry->msg_id	= msg_id;
735		    __entry->len	= len;
736			   ),
737
738	    TP_printk("o=%08x mid=%x l=%lx",
739		      __entry->obj,
740		      __entry->msg_id,
741		      __entry->len)
742	    );
743
744TRACE_EVENT(cachefiles_ondemand_close,
745	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
746
747	    TP_ARGS(obj, msg),
748
749	    TP_STRUCT__entry(
750		    __field(unsigned int,	obj)
751		    __field(unsigned int,	msg_id)
752		    __field(unsigned int,	object_id)
753			     ),
754
755	    TP_fast_assign(
756		    __entry->obj	= obj ? obj->debug_id : 0;
757		    __entry->msg_id	= msg->msg_id;
758		    __entry->object_id	= msg->object_id;
759			   ),
760
761	    TP_printk("o=%08x mid=%x oid=%x",
762		      __entry->obj,
763		      __entry->msg_id,
764		      __entry->object_id)
765	    );
766
767TRACE_EVENT(cachefiles_ondemand_read,
768	    TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
769		     struct cachefiles_read *load),
770
771	    TP_ARGS(obj, msg, load),
772
773	    TP_STRUCT__entry(
774		    __field(unsigned int,	obj)
775		    __field(unsigned int,	msg_id)
776		    __field(unsigned int,	object_id)
777		    __field(loff_t,		start)
778		    __field(size_t,		len)
779			     ),
780
781	    TP_fast_assign(
782		    __entry->obj	= obj ? obj->debug_id : 0;
783		    __entry->msg_id	= msg->msg_id;
784		    __entry->object_id	= msg->object_id;
785		    __entry->start	= load->off;
786		    __entry->len	= load->len;
787			   ),
788
789	    TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
790		      __entry->obj,
791		      __entry->msg_id,
792		      __entry->object_id,
793		      __entry->start,
794		      __entry->len)
795	    );
796
797TRACE_EVENT(cachefiles_ondemand_cread,
798	    TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
799
800	    TP_ARGS(obj, msg_id),
801
802	    TP_STRUCT__entry(
803		    __field(unsigned int,	obj)
804		    __field(unsigned int,	msg_id)
805			     ),
806
807	    TP_fast_assign(
808		    __entry->obj	= obj ? obj->debug_id : 0;
809		    __entry->msg_id	= msg_id;
810			   ),
811
812	    TP_printk("o=%08x mid=%x",
813		      __entry->obj,
814		      __entry->msg_id)
815	    );
816
817TRACE_EVENT(cachefiles_ondemand_fd_write,
818	    TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
819		     loff_t start, size_t len),
820
821	    TP_ARGS(obj, backer, start, len),
822
823	    TP_STRUCT__entry(
824		    __field(unsigned int,	obj)
825		    __field(unsigned int,	backer)
826		    __field(loff_t,		start)
827		    __field(size_t,		len)
828			     ),
829
830	    TP_fast_assign(
831		    __entry->obj	= obj ? obj->debug_id : 0;
832		    __entry->backer	= backer->i_ino;
833		    __entry->start	= start;
834		    __entry->len	= len;
835			   ),
836
837	    TP_printk("o=%08x iB=%x s=%llx l=%zx",
838		      __entry->obj,
839		      __entry->backer,
840		      __entry->start,
841		      __entry->len)
842	    );
843
844TRACE_EVENT(cachefiles_ondemand_fd_release,
845	    TP_PROTO(struct cachefiles_object *obj, int object_id),
846
847	    TP_ARGS(obj, object_id),
848
849	    TP_STRUCT__entry(
850		    __field(unsigned int,	obj)
851		    __field(unsigned int,	object_id)
852			     ),
853
854	    TP_fast_assign(
855		    __entry->obj	= obj ? obj->debug_id : 0;
856		    __entry->object_id	= object_id;
857			   ),
858
859	    TP_printk("o=%08x oid=%x",
860		      __entry->obj,
861		      __entry->object_id)
862	    );
863
864#endif /* _TRACE_CACHEFILES_H */
865
866/* This part must be outside protection */
867#include <trace/define_trace.h>
~/ Read-only file preview.