mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public licence as published by the free software foundation either version 2 of the licence or at your option any later version extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 114 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520170857.552531963@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
321 lines
8 KiB
C
321 lines
8 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/* CacheFiles tracepoints
|
|
*
|
|
* Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
|
|
* Written by David Howells (dhowells@redhat.com)
|
|
*/
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM cachefiles
|
|
|
|
#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_CACHEFILES_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
/*
|
|
* Define enums for tracing information.
|
|
*/
|
|
#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
|
#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
|
|
|
enum cachefiles_obj_ref_trace {
|
|
cachefiles_obj_put_wait_retry = fscache_obj_ref__nr_traces,
|
|
cachefiles_obj_put_wait_timeo,
|
|
cachefiles_obj_ref__nr_traces
|
|
};
|
|
|
|
#endif
|
|
|
|
/*
|
|
* Define enum -> string mappings for display.
|
|
*/
|
|
#define cachefiles_obj_kill_traces \
|
|
EM(FSCACHE_OBJECT_IS_STALE, "stale") \
|
|
EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \
|
|
EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
|
|
E_(FSCACHE_OBJECT_WAS_CULLED, "was_culled")
|
|
|
|
#define cachefiles_obj_ref_traces \
|
|
EM(fscache_obj_get_add_to_deps, "GET add_to_deps") \
|
|
EM(fscache_obj_get_queue, "GET queue") \
|
|
EM(fscache_obj_put_alloc_fail, "PUT alloc_fail") \
|
|
EM(fscache_obj_put_attach_fail, "PUT attach_fail") \
|
|
EM(fscache_obj_put_drop_obj, "PUT drop_obj") \
|
|
EM(fscache_obj_put_enq_dep, "PUT enq_dep") \
|
|
EM(fscache_obj_put_queue, "PUT queue") \
|
|
EM(fscache_obj_put_work, "PUT work") \
|
|
EM(cachefiles_obj_put_wait_retry, "PUT wait_retry") \
|
|
E_(cachefiles_obj_put_wait_timeo, "PUT wait_timeo")
|
|
|
|
/*
|
|
* Export enum symbols via userspace.
|
|
*/
|
|
#undef EM
|
|
#undef E_
|
|
#define EM(a, b) TRACE_DEFINE_ENUM(a);
|
|
#define E_(a, b) TRACE_DEFINE_ENUM(a);
|
|
|
|
cachefiles_obj_kill_traces;
|
|
cachefiles_obj_ref_traces;
|
|
|
|
/*
|
|
* Now redefine the EM() and E_() macros to map the enums to the strings that
|
|
* will be printed in the output.
|
|
*/
|
|
#undef EM
|
|
#undef E_
|
|
#define EM(a, b) { a, b },
|
|
#define E_(a, b) { a, b }
|
|
|
|
|
|
TRACE_EVENT(cachefiles_ref,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct fscache_cookie *cookie,
|
|
enum cachefiles_obj_ref_trace why,
|
|
int usage),
|
|
|
|
TP_ARGS(obj, cookie, why, usage),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct fscache_cookie *, cookie )
|
|
__field(enum cachefiles_obj_ref_trace, why )
|
|
__field(int, usage )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->cookie = cookie;
|
|
__entry->usage = usage;
|
|
__entry->why = why;
|
|
),
|
|
|
|
TP_printk("c=%p o=%p u=%d %s",
|
|
__entry->cookie, __entry->obj, __entry->usage,
|
|
__print_symbolic(__entry->why, cachefiles_obj_ref_traces))
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_lookup,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
struct inode *inode),
|
|
|
|
TP_ARGS(obj, de, inode),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(struct inode *, inode )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->inode = inode;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p i=%p",
|
|
__entry->obj, __entry->de, __entry->inode)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_mkdir,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de, int ret),
|
|
|
|
TP_ARGS(obj, de, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p r=%u",
|
|
__entry->obj, __entry->de, __entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_create,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de, int ret),
|
|
|
|
TP_ARGS(obj, de, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(int, ret )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p r=%u",
|
|
__entry->obj, __entry->de, __entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_unlink,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
enum fscache_why_object_killed why),
|
|
|
|
TP_ARGS(obj, de, why),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(enum fscache_why_object_killed, why )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->why = why;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p w=%s",
|
|
__entry->obj, __entry->de,
|
|
__print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_rename,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
struct dentry *to,
|
|
enum fscache_why_object_killed why),
|
|
|
|
TP_ARGS(obj, de, to, why),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(struct dentry *, to )
|
|
__field(enum fscache_why_object_killed, why )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->to = to;
|
|
__entry->why = why;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p t=%p w=%s",
|
|
__entry->obj, __entry->de, __entry->to,
|
|
__print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_mark_active,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de),
|
|
|
|
TP_ARGS(obj, de),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p",
|
|
__entry->obj, __entry->de)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_wait_active,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
struct cachefiles_object *xobj),
|
|
|
|
TP_ARGS(obj, de, xobj),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(struct cachefiles_object *, xobj )
|
|
__field(u16, flags )
|
|
__field(u16, fsc_flags )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->xobj = xobj;
|
|
__entry->flags = xobj->flags;
|
|
__entry->fsc_flags = xobj->fscache.flags;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p wo=%p wf=%x wff=%x",
|
|
__entry->obj, __entry->de, __entry->xobj,
|
|
__entry->flags, __entry->fsc_flags)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_mark_inactive,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
struct inode *inode),
|
|
|
|
TP_ARGS(obj, de, inode),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(struct inode *, inode )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->inode = inode;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p i=%p",
|
|
__entry->obj, __entry->de, __entry->inode)
|
|
);
|
|
|
|
TRACE_EVENT(cachefiles_mark_buried,
|
|
TP_PROTO(struct cachefiles_object *obj,
|
|
struct dentry *de,
|
|
enum fscache_why_object_killed why),
|
|
|
|
TP_ARGS(obj, de, why),
|
|
|
|
/* Note that obj may be NULL */
|
|
TP_STRUCT__entry(
|
|
__field(struct cachefiles_object *, obj )
|
|
__field(struct dentry *, de )
|
|
__field(enum fscache_why_object_killed, why )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->obj = obj;
|
|
__entry->de = de;
|
|
__entry->why = why;
|
|
),
|
|
|
|
TP_printk("o=%p d=%p w=%s",
|
|
__entry->obj, __entry->de,
|
|
__print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
|
);
|
|
|
|
#endif /* _TRACE_CACHEFILES_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|