Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* CacheFiles tracepoints
  2 *
  3 * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
  4 * Written by David Howells (dhowells@redhat.com)
  5 *
  6 * This program is free software; you can redistribute it and/or
  7 * modify it under the terms of the GNU General Public Licence
  8 * as published by the Free Software Foundation; either version
  9 * 2 of the Licence, or (at your option) any later version.
 10 */
 11#undef TRACE_SYSTEM
 12#define TRACE_SYSTEM cachefiles
 13
 14#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
 15#define _TRACE_CACHEFILES_H
 16
 17#include <linux/tracepoint.h>
 18
 19/*
 20 * Define enums for tracing information.
 21 */
 22#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
 23#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
 24
 25enum cachefiles_obj_ref_trace {
 26	cachefiles_obj_put_wait_retry = fscache_obj_ref__nr_traces,
 27	cachefiles_obj_put_wait_timeo,
 28	cachefiles_obj_ref__nr_traces
 29};
 30
 31#endif
 32
 33/*
 34 * Define enum -> string mappings for display.
 35 */
 36#define cachefiles_obj_kill_traces				\
 37	EM(FSCACHE_OBJECT_IS_STALE,	"stale")		\
 38	EM(FSCACHE_OBJECT_NO_SPACE,	"no_space")		\
 39	EM(FSCACHE_OBJECT_WAS_RETIRED,	"was_retired")		\
 40	E_(FSCACHE_OBJECT_WAS_CULLED,	"was_culled")
 41
 42#define cachefiles_obj_ref_traces					\
 43	EM(fscache_obj_get_add_to_deps,		"GET add_to_deps")	\
 44	EM(fscache_obj_get_queue,		"GET queue")		\
 45	EM(fscache_obj_put_alloc_fail,		"PUT alloc_fail")	\
 46	EM(fscache_obj_put_attach_fail,		"PUT attach_fail")	\
 47	EM(fscache_obj_put_drop_obj,		"PUT drop_obj")		\
 48	EM(fscache_obj_put_enq_dep,		"PUT enq_dep")		\
 49	EM(fscache_obj_put_queue,		"PUT queue")		\
 50	EM(fscache_obj_put_work,		"PUT work")		\
 51	EM(cachefiles_obj_put_wait_retry,	"PUT wait_retry")	\
 52	E_(cachefiles_obj_put_wait_timeo,	"PUT wait_timeo")
 53
 54/*
 55 * Export enum symbols via userspace.
 56 */
 57#undef EM
 58#undef E_
 59#define EM(a, b) TRACE_DEFINE_ENUM(a);
 60#define E_(a, b) TRACE_DEFINE_ENUM(a);
 61
 62cachefiles_obj_kill_traces;
 63cachefiles_obj_ref_traces;
 64
 65/*
 66 * Now redefine the EM() and E_() macros to map the enums to the strings that
 67 * will be printed in the output.
 68 */
 69#undef EM
 70#undef E_
 71#define EM(a, b)	{ a, b },
 72#define E_(a, b)	{ a, b }
 73
 74
 75TRACE_EVENT(cachefiles_ref,
 76	    TP_PROTO(struct cachefiles_object *obj,
 77		     struct fscache_cookie *cookie,
 78		     enum cachefiles_obj_ref_trace why,
 79		     int usage),
 80
 81	    TP_ARGS(obj, cookie, why, usage),
 82
 83	    /* Note that obj may be NULL */
 84	    TP_STRUCT__entry(
 85		    __field(struct cachefiles_object *,		obj		)
 86		    __field(struct fscache_cookie *,		cookie		)
 87		    __field(enum cachefiles_obj_ref_trace,	why		)
 88		    __field(int,				usage		)
 89			     ),
 90
 91	    TP_fast_assign(
 92		    __entry->obj	= obj;
 93		    __entry->cookie	= cookie;
 94		    __entry->usage	= usage;
 95		    __entry->why	= why;
 96			   ),
 97
 98	    TP_printk("c=%p o=%p u=%d %s",
 99		      __entry->cookie, __entry->obj, __entry->usage,
100		      __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
101	    );
102
103TRACE_EVENT(cachefiles_lookup,
104	    TP_PROTO(struct cachefiles_object *obj,
105		     struct dentry *de,
106		     struct inode *inode),
107
108	    TP_ARGS(obj, de, inode),
109
110	    TP_STRUCT__entry(
111		    __field(struct cachefiles_object *,	obj	)
112		    __field(struct dentry *,		de	)
113		    __field(struct inode *,		inode	)
114			     ),
115
116	    TP_fast_assign(
117		    __entry->obj	= obj;
118		    __entry->de		= de;
119		    __entry->inode	= inode;
120			   ),
121
122	    TP_printk("o=%p d=%p i=%p",
123		      __entry->obj, __entry->de, __entry->inode)
124	    );
125
126TRACE_EVENT(cachefiles_mkdir,
127	    TP_PROTO(struct cachefiles_object *obj,
128		     struct dentry *de, int ret),
129
130	    TP_ARGS(obj, de, ret),
131
132	    TP_STRUCT__entry(
133		    __field(struct cachefiles_object *,	obj	)
134		    __field(struct dentry *,		de	)
135		    __field(int,			ret	)
136			     ),
137
138	    TP_fast_assign(
139		    __entry->obj	= obj;
140		    __entry->de		= de;
141		    __entry->ret	= ret;
142			   ),
143
144	    TP_printk("o=%p d=%p r=%u",
145		      __entry->obj, __entry->de, __entry->ret)
146	    );
147
148TRACE_EVENT(cachefiles_create,
149	    TP_PROTO(struct cachefiles_object *obj,
150		     struct dentry *de, int ret),
151
152	    TP_ARGS(obj, de, ret),
153
154	    TP_STRUCT__entry(
155		    __field(struct cachefiles_object *,	obj	)
156		    __field(struct dentry *,		de	)
157		    __field(int,			ret	)
158			     ),
159
160	    TP_fast_assign(
161		    __entry->obj	= obj;
162		    __entry->de		= de;
163		    __entry->ret	= ret;
164			   ),
165
166	    TP_printk("o=%p d=%p r=%u",
167		      __entry->obj, __entry->de, __entry->ret)
168	    );
169
170TRACE_EVENT(cachefiles_unlink,
171	    TP_PROTO(struct cachefiles_object *obj,
172		     struct dentry *de,
173		     enum fscache_why_object_killed why),
174
175	    TP_ARGS(obj, de, why),
176
177	    /* Note that obj may be NULL */
178	    TP_STRUCT__entry(
179		    __field(struct cachefiles_object *,	obj		)
180		    __field(struct dentry *,		de		)
181		    __field(enum fscache_why_object_killed, why		)
182			     ),
183
184	    TP_fast_assign(
185		    __entry->obj	= obj;
186		    __entry->de		= de;
187		    __entry->why	= why;
188			   ),
189
190	    TP_printk("o=%p d=%p w=%s",
191		      __entry->obj, __entry->de,
192		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
193	    );
194
195TRACE_EVENT(cachefiles_rename,
196	    TP_PROTO(struct cachefiles_object *obj,
197		     struct dentry *de,
198		     struct dentry *to,
199		     enum fscache_why_object_killed why),
200
201	    TP_ARGS(obj, de, to, why),
202
203	    /* Note that obj may be NULL */
204	    TP_STRUCT__entry(
205		    __field(struct cachefiles_object *,	obj		)
206		    __field(struct dentry *,		de		)
207		    __field(struct dentry *,		to		)
208		    __field(enum fscache_why_object_killed, why		)
209			     ),
210
211	    TP_fast_assign(
212		    __entry->obj	= obj;
213		    __entry->de		= de;
214		    __entry->to		= to;
215		    __entry->why	= why;
216			   ),
217
218	    TP_printk("o=%p d=%p t=%p w=%s",
219		      __entry->obj, __entry->de, __entry->to,
220		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
221	    );
222
223TRACE_EVENT(cachefiles_mark_active,
224	    TP_PROTO(struct cachefiles_object *obj,
225		     struct dentry *de),
226
227	    TP_ARGS(obj, de),
228
229	    /* Note that obj may be NULL */
230	    TP_STRUCT__entry(
231		    __field(struct cachefiles_object *,	obj		)
232		    __field(struct dentry *,		de		)
233			     ),
234
235	    TP_fast_assign(
236		    __entry->obj	= obj;
237		    __entry->de		= de;
238			   ),
239
240	    TP_printk("o=%p d=%p",
241		      __entry->obj, __entry->de)
242	    );
243
244TRACE_EVENT(cachefiles_wait_active,
245	    TP_PROTO(struct cachefiles_object *obj,
246		     struct dentry *de,
247		     struct cachefiles_object *xobj),
248
249	    TP_ARGS(obj, de, xobj),
250
251	    /* Note that obj may be NULL */
252	    TP_STRUCT__entry(
253		    __field(struct cachefiles_object *,	obj		)
254		    __field(struct dentry *,		de		)
255		    __field(struct cachefiles_object *,	xobj		)
256		    __field(u16,			flags		)
257		    __field(u16,			fsc_flags	)
258			     ),
259
260	    TP_fast_assign(
261		    __entry->obj	= obj;
262		    __entry->de		= de;
263		    __entry->xobj	= xobj;
264		    __entry->flags	= xobj->flags;
265		    __entry->fsc_flags	= xobj->fscache.flags;
266			   ),
267
268	    TP_printk("o=%p d=%p wo=%p wf=%x wff=%x",
269		      __entry->obj, __entry->de, __entry->xobj,
270		      __entry->flags, __entry->fsc_flags)
271	    );
272
273TRACE_EVENT(cachefiles_mark_inactive,
274	    TP_PROTO(struct cachefiles_object *obj,
275		     struct dentry *de,
276		     struct inode *inode),
277
278	    TP_ARGS(obj, de, inode),
279
280	    /* Note that obj may be NULL */
281	    TP_STRUCT__entry(
282		    __field(struct cachefiles_object *,	obj		)
283		    __field(struct dentry *,		de		)
284		    __field(struct inode *,		inode		)
285			     ),
286
287	    TP_fast_assign(
288		    __entry->obj	= obj;
289		    __entry->de		= de;
290		    __entry->inode	= inode;
291			   ),
292
293	    TP_printk("o=%p d=%p i=%p",
294		      __entry->obj, __entry->de, __entry->inode)
295	    );
296
297TRACE_EVENT(cachefiles_mark_buried,
298	    TP_PROTO(struct cachefiles_object *obj,
299		     struct dentry *de,
300		     enum fscache_why_object_killed why),
301
302	    TP_ARGS(obj, de, why),
303
304	    /* Note that obj may be NULL */
305	    TP_STRUCT__entry(
306		    __field(struct cachefiles_object *,	obj		)
307		    __field(struct dentry *,		de		)
308		    __field(enum fscache_why_object_killed, why		)
309			     ),
310
311	    TP_fast_assign(
312		    __entry->obj	= obj;
313		    __entry->de		= de;
314		    __entry->why	= why;
315			   ),
316
317	    TP_printk("o=%p d=%p w=%s",
318		      __entry->obj, __entry->de,
319		      __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
320	    );
321
322#endif /* _TRACE_CACHEFILES_H */
323
324/* This part must be outside protection */
325#include <trace/define_trace.h>