lkml.org 
[lkml]   [2021]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v3 42/68] cachefiles: Add tracepoints for calls to the VFS
    From
    Date
    Add tracepoints in cachefiles to monitor when it does various VFS
    operations, such as mkdir.

    Signed-off-by: David Howells <dhowells@redhat.com>
    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
    ---

    include/trace/events/cachefiles.h | 176 +++++++++++++++++++++++++++++++++++++
    1 file changed, 176 insertions(+)

    diff --git a/include/trace/events/cachefiles.h b/include/trace/events/cachefiles.h
    index 6331cd29880d..5975ea4977b2 100644
    --- a/include/trace/events/cachefiles.h
    +++ b/include/trace/events/cachefiles.h
    @@ -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),

    \
     
     \ /
      Last update: 2021-12-16 17:19    [W:5.855 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site