lkml.org 
[lkml]   [2021]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v2 33/67] cachefiles: Add a couple of tracepoints for logging errors
    From
    Date
    Add two trace points to log errors, one for vfs operations like mkdir or
    create, and one for I/O operations, like read, write or truncate.

    Also add the beginnings of a struct that is going to represent a data file
    and place a debugging ID in it for the tracepoints to record.

    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: linux-cachefs@redhat.com
    Link: https://lore.kernel.org/r/163819625632.215744.17907340966178411033.stgit@warthog.procyon.org.uk/ # v1
    ---

    fs/cachefiles/internal.h | 1
    include/trace/events/cachefiles.h | 94 +++++++++++++++++++++++++++++++++++++
    2 files changed, 95 insertions(+)

    diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h
    index 1f2fea902d3e..b51146a29aca 100644
    --- a/fs/cachefiles/internal.h
    +++ b/fs/cachefiles/internal.h
    @@ -62,6 +62,7 @@ struct cachefiles_cache {
    char *tag; /* cache binding tag */
    };

    +#include <trace/events/cachefiles.h>

    /*
    * error_inject.c
    diff --git a/include/trace/events/cachefiles.h b/include/trace/events/cachefiles.h
    index 5ee0aabb20be..9bd5a8a60801 100644
    --- a/include/trace/events/cachefiles.h
    +++ b/include/trace/events/cachefiles.h
    @@ -18,11 +18,49 @@
    #ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
    #define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY

    +enum cachefiles_error_trace {
    + cachefiles_trace_fallocate_error,
    + cachefiles_trace_getxattr_error,
    + cachefiles_trace_link_error,
    + cachefiles_trace_lookup_error,
    + cachefiles_trace_mkdir_error,
    + cachefiles_trace_notify_change_error,
    + cachefiles_trace_open_error,
    + cachefiles_trace_read_error,
    + cachefiles_trace_remxattr_error,
    + cachefiles_trace_rename_error,
    + cachefiles_trace_seek_error,
    + cachefiles_trace_setxattr_error,
    + cachefiles_trace_statfs_error,
    + cachefiles_trace_tmpfile_error,
    + cachefiles_trace_trunc_error,
    + cachefiles_trace_unlink_error,
    + cachefiles_trace_write_error,
    +};
    +
    #endif

    /*
    * Define enum -> string mappings for display.
    */
    +#define cachefiles_error_traces \
    + EM(cachefiles_trace_fallocate_error, "fallocate") \
    + EM(cachefiles_trace_getxattr_error, "getxattr") \
    + EM(cachefiles_trace_link_error, "link") \
    + EM(cachefiles_trace_lookup_error, "lookup") \
    + EM(cachefiles_trace_mkdir_error, "mkdir") \
    + EM(cachefiles_trace_notify_change_error, "notify_change") \
    + EM(cachefiles_trace_open_error, "open") \
    + EM(cachefiles_trace_read_error, "read") \
    + EM(cachefiles_trace_remxattr_error, "remxattr") \
    + EM(cachefiles_trace_rename_error, "rename") \
    + EM(cachefiles_trace_seek_error, "seek") \
    + EM(cachefiles_trace_setxattr_error, "setxattr") \
    + EM(cachefiles_trace_statfs_error, "statfs") \
    + EM(cachefiles_trace_tmpfile_error, "tmpfile") \
    + EM(cachefiles_trace_trunc_error, "trunc") \
    + EM(cachefiles_trace_unlink_error, "unlink") \
    + E_(cachefiles_trace_write_error, "write")


    /*
    @@ -33,6 +71,8 @@
    #define EM(a, b) TRACE_DEFINE_ENUM(a);
    #define E_(a, b) TRACE_DEFINE_ENUM(a);

    +cachefiles_error_traces;
    +
    /*
    * Now redefine the EM() and E_() macros to map the enums to the strings that
    * will be printed in the output.
    @@ -43,6 +83,60 @@
    #define E_(a, b) { a, b }


    +TRACE_EVENT(cachefiles_vfs_error,
    + TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
    + int error, enum cachefiles_error_trace where),
    +
    + TP_ARGS(obj, backer, error, where),
    +
    + TP_STRUCT__entry(
    + __field(unsigned int, obj )
    + __field(unsigned int, backer )
    + __field(enum cachefiles_error_trace, where )
    + __field(short, error )
    + ),
    +
    + TP_fast_assign(
    + __entry->obj = obj ? obj->debug_id : 0;
    + __entry->backer = backer->i_ino;
    + __entry->error = error;
    + __entry->where = where;
    + ),
    +
    + TP_printk("o=%08x b=%08x %s e=%d",
    + __entry->obj,
    + __entry->backer,
    + __print_symbolic(__entry->where, cachefiles_error_traces),
    + __entry->error)
    + );
    +
    +TRACE_EVENT(cachefiles_io_error,
    + TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
    + int error, enum cachefiles_error_trace where),
    +
    + TP_ARGS(obj, backer, error, where),
    +
    + TP_STRUCT__entry(
    + __field(unsigned int, obj )
    + __field(unsigned int, backer )
    + __field(enum cachefiles_error_trace, where )
    + __field(short, error )
    + ),
    +
    + TP_fast_assign(
    + __entry->obj = obj ? obj->debug_id : 0;
    + __entry->backer = backer->i_ino;
    + __entry->error = error;
    + __entry->where = where;
    + ),
    +
    + TP_printk("o=%08x b=%08x %s e=%d",
    + __entry->obj,
    + __entry->backer,
    + __print_symbolic(__entry->where, cachefiles_error_traces),
    + __entry->error)
    + );
    +
    #endif /* _TRACE_CACHEFILES_H */

    /* This part must be outside protection */

    \
     
     \ /
      Last update: 2021-12-09 18:02    [W:3.826 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site