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