cachefiles: Add tracepoints for calls to the VFS
Add tracepoints in cachefiles to monitor when it does various VFS operations, such as mkdir. Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> cc: linux-cachefs@redhat.com Link: https://lore.kernel.org/r/163819638517.215744.12773133137536579766.stgit@warthog.procyon.org.uk/ # v1 Link: https://lore.kernel.org/r/163906938316.143852.17227990869551737803.stgit@warthog.procyon.org.uk/ # v2 Link: https://lore.kernel.org/r/163967147139.1823006.4909879317496543392.stgit@warthog.procyon.org.uk/ # v3 Link: https://lore.kernel.org/r/164021546287.640689.3501604495002415631.stgit@warthog.procyon.org.uk/ # v4
This commit is contained in:
parent
fe2140e2f5
commit
13871bad1e
|
@ -18,6 +18,21 @@
|
|||
#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
||||
#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
|
||||
|
||||
enum fscache_why_object_killed {
|
||||
FSCACHE_OBJECT_IS_STALE,
|
||||
FSCACHE_OBJECT_IS_WEIRD,
|
||||
FSCACHE_OBJECT_INVALIDATED,
|
||||
FSCACHE_OBJECT_NO_SPACE,
|
||||
FSCACHE_OBJECT_WAS_RETIRED,
|
||||
FSCACHE_OBJECT_WAS_CULLED,
|
||||
};
|
||||
|
||||
enum cachefiles_trunc_trace {
|
||||
cachefiles_trunc_dio_adjust,
|
||||
cachefiles_trunc_expand_tmpfile,
|
||||
cachefiles_trunc_shrink,
|
||||
};
|
||||
|
||||
enum cachefiles_error_trace {
|
||||
cachefiles_trace_fallocate_error,
|
||||
cachefiles_trace_getxattr_error,
|
||||
|
@ -43,6 +58,19 @@ enum cachefiles_error_trace {
|
|||
/*
|
||||
* Define enum -> string mappings for display.
|
||||
*/
|
||||
#define cachefiles_obj_kill_traces \
|
||||
EM(FSCACHE_OBJECT_IS_STALE, "stale") \
|
||||
EM(FSCACHE_OBJECT_IS_WEIRD, "weird") \
|
||||
EM(FSCACHE_OBJECT_INVALIDATED, "inval") \
|
||||
EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \
|
||||
EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
|
||||
E_(FSCACHE_OBJECT_WAS_CULLED, "was_culled")
|
||||
|
||||
#define cachefiles_trunc_traces \
|
||||
EM(cachefiles_trunc_dio_adjust, "DIOADJ") \
|
||||
EM(cachefiles_trunc_expand_tmpfile, "EXPTMP") \
|
||||
E_(cachefiles_trunc_shrink, "SHRINK")
|
||||
|
||||
#define cachefiles_error_traces \
|
||||
EM(cachefiles_trace_fallocate_error, "fallocate") \
|
||||
EM(cachefiles_trace_getxattr_error, "getxattr") \
|
||||
|
@ -71,6 +99,8 @@ enum cachefiles_error_trace {
|
|||
#define EM(a, b) TRACE_DEFINE_ENUM(a);
|
||||
#define E_(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
cachefiles_obj_kill_traces;
|
||||
cachefiles_trunc_traces;
|
||||
cachefiles_error_traces;
|
||||
|
||||
/*
|
||||
|
@ -83,6 +113,152 @@ cachefiles_error_traces;
|
|||
#define E_(a, b) { a, b }
|
||||
|
||||
|
||||
TRACE_EVENT(cachefiles_lookup,
|
||||
TP_PROTO(struct cachefiles_object *obj,
|
||||
struct dentry *de),
|
||||
|
||||
TP_ARGS(obj, de),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, obj )
|
||||
__field(short, error )
|
||||
__field(unsigned long, ino )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj->debug_id;
|
||||
__entry->ino = (!IS_ERR(de) && d_backing_inode(de) ?
|
||||
d_backing_inode(de)->i_ino : 0);
|
||||
__entry->error = IS_ERR(de) ? PTR_ERR(de) : 0;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x i=%lx e=%d",
|
||||
__entry->obj, __entry->ino, __entry->error)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cachefiles_tmpfile,
|
||||
TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
|
||||
|
||||
TP_ARGS(obj, backer),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, obj )
|
||||
__field(unsigned int, backer )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj->debug_id;
|
||||
__entry->backer = backer->i_ino;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x b=%08x",
|
||||
__entry->obj,
|
||||
__entry->backer)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cachefiles_link,
|
||||
TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
|
||||
|
||||
TP_ARGS(obj, backer),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, obj )
|
||||
__field(unsigned int, backer )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj->debug_id;
|
||||
__entry->backer = backer->i_ino;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x b=%08x",
|
||||
__entry->obj,
|
||||
__entry->backer)
|
||||
);
|
||||
|
||||
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(unsigned int, obj )
|
||||
__field(struct dentry *, de )
|
||||
__field(enum fscache_why_object_killed, why )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj ? obj->debug_id : UINT_MAX;
|
||||
__entry->de = de;
|
||||
__entry->why = why;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x 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(unsigned int, obj )
|
||||
__field(struct dentry *, de )
|
||||
__field(struct dentry *, to )
|
||||
__field(enum fscache_why_object_killed, why )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj ? obj->debug_id : UINT_MAX;
|
||||
__entry->de = de;
|
||||
__entry->to = to;
|
||||
__entry->why = why;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x d=%p t=%p w=%s",
|
||||
__entry->obj, __entry->de, __entry->to,
|
||||
__print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
||||
);
|
||||
|
||||
TRACE_EVENT(cachefiles_trunc,
|
||||
TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
|
||||
loff_t from, loff_t to, enum cachefiles_trunc_trace why),
|
||||
|
||||
TP_ARGS(obj, backer, from, to, why),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, obj )
|
||||
__field(unsigned int, backer )
|
||||
__field(enum cachefiles_trunc_trace, why )
|
||||
__field(loff_t, from )
|
||||
__field(loff_t, to )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->obj = obj->debug_id;
|
||||
__entry->backer = backer->i_ino;
|
||||
__entry->from = from;
|
||||
__entry->to = to;
|
||||
__entry->why = why;
|
||||
),
|
||||
|
||||
TP_printk("o=%08x b=%08x %s l=%llx->%llx",
|
||||
__entry->obj,
|
||||
__entry->backer,
|
||||
__print_symbolic(__entry->why, cachefiles_trunc_traces),
|
||||
__entry->from,
|
||||
__entry->to)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cachefiles_mark_active,
|
||||
TP_PROTO(struct cachefiles_object *obj,
|
||||
struct inode *inode),
|
||||
|
|
Loading…
Reference in New Issue