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