Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /* FS-Cache tracepoints
0003  *
0004  * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
0005  * Written by David Howells (dhowells@redhat.com)
0006  */
0007 #undef TRACE_SYSTEM
0008 #define TRACE_SYSTEM fscache
0009 
0010 #if !defined(_TRACE_FSCACHE_H) || defined(TRACE_HEADER_MULTI_READ)
0011 #define _TRACE_FSCACHE_H
0012 
0013 #include <linux/fscache.h>
0014 #include <linux/tracepoint.h>
0015 
0016 /*
0017  * Define enums for tracing information.
0018  */
0019 #ifndef __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY
0020 #define __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY
0021 
0022 enum fscache_cache_trace {
0023     fscache_cache_collision,
0024     fscache_cache_get_acquire,
0025     fscache_cache_new_acquire,
0026     fscache_cache_put_alloc_volume,
0027     fscache_cache_put_cache,
0028     fscache_cache_put_prep_failed,
0029     fscache_cache_put_relinquish,
0030     fscache_cache_put_volume,
0031 };
0032 
0033 enum fscache_volume_trace {
0034     fscache_volume_collision,
0035     fscache_volume_get_cookie,
0036     fscache_volume_get_create_work,
0037     fscache_volume_get_hash_collision,
0038     fscache_volume_free,
0039     fscache_volume_new_acquire,
0040     fscache_volume_put_cookie,
0041     fscache_volume_put_create_work,
0042     fscache_volume_put_hash_collision,
0043     fscache_volume_put_relinquish,
0044     fscache_volume_see_create_work,
0045     fscache_volume_see_hash_wake,
0046     fscache_volume_wait_create_work,
0047 };
0048 
0049 enum fscache_cookie_trace {
0050     fscache_cookie_collision,
0051     fscache_cookie_discard,
0052     fscache_cookie_failed,
0053     fscache_cookie_get_attach_object,
0054     fscache_cookie_get_end_access,
0055     fscache_cookie_get_hash_collision,
0056     fscache_cookie_get_inval_work,
0057     fscache_cookie_get_lru,
0058     fscache_cookie_get_use_work,
0059     fscache_cookie_new_acquire,
0060     fscache_cookie_put_hash_collision,
0061     fscache_cookie_put_lru,
0062     fscache_cookie_put_object,
0063     fscache_cookie_put_over_queued,
0064     fscache_cookie_put_relinquish,
0065     fscache_cookie_put_withdrawn,
0066     fscache_cookie_put_work,
0067     fscache_cookie_see_active,
0068     fscache_cookie_see_lru_discard,
0069     fscache_cookie_see_lru_do_one,
0070     fscache_cookie_see_relinquish,
0071     fscache_cookie_see_withdraw,
0072     fscache_cookie_see_work,
0073 };
0074 
0075 enum fscache_active_trace {
0076     fscache_active_use,
0077     fscache_active_use_modify,
0078     fscache_active_unuse,
0079 };
0080 
0081 enum fscache_access_trace {
0082     fscache_access_acquire_volume,
0083     fscache_access_acquire_volume_end,
0084     fscache_access_cache_pin,
0085     fscache_access_cache_unpin,
0086     fscache_access_invalidate_cookie,
0087     fscache_access_invalidate_cookie_end,
0088     fscache_access_io_end,
0089     fscache_access_io_not_live,
0090     fscache_access_io_read,
0091     fscache_access_io_resize,
0092     fscache_access_io_wait,
0093     fscache_access_io_write,
0094     fscache_access_lookup_cookie,
0095     fscache_access_lookup_cookie_end,
0096     fscache_access_lookup_cookie_end_failed,
0097     fscache_access_relinquish_volume,
0098     fscache_access_relinquish_volume_end,
0099     fscache_access_unlive,
0100 };
0101 
0102 #endif
0103 
0104 /*
0105  * Declare tracing information enums and their string mappings for display.
0106  */
0107 #define fscache_cache_traces                        \
0108     EM(fscache_cache_collision,     "*COLLIDE*")        \
0109     EM(fscache_cache_get_acquire,       "GET acq  ")        \
0110     EM(fscache_cache_new_acquire,       "NEW acq  ")        \
0111     EM(fscache_cache_put_alloc_volume,  "PUT alvol")        \
0112     EM(fscache_cache_put_cache,     "PUT cache")        \
0113     EM(fscache_cache_put_prep_failed,   "PUT pfail")        \
0114     EM(fscache_cache_put_relinquish,    "PUT relnq")        \
0115     E_(fscache_cache_put_volume,        "PUT vol  ")
0116 
0117 #define fscache_volume_traces                       \
0118     EM(fscache_volume_collision,        "*COLLIDE*")        \
0119     EM(fscache_volume_get_cookie,       "GET cook ")        \
0120     EM(fscache_volume_get_create_work,  "GET creat")        \
0121     EM(fscache_volume_get_hash_collision,   "GET hcoll")        \
0122     EM(fscache_volume_free,         "FREE     ")        \
0123     EM(fscache_volume_new_acquire,      "NEW acq  ")        \
0124     EM(fscache_volume_put_cookie,       "PUT cook ")        \
0125     EM(fscache_volume_put_create_work,  "PUT creat")        \
0126     EM(fscache_volume_put_hash_collision,   "PUT hcoll")        \
0127     EM(fscache_volume_put_relinquish,   "PUT relnq")        \
0128     EM(fscache_volume_see_create_work,  "SEE creat")        \
0129     EM(fscache_volume_see_hash_wake,    "SEE hwake")        \
0130     E_(fscache_volume_wait_create_work, "WAIT crea")
0131 
0132 #define fscache_cookie_traces                       \
0133     EM(fscache_cookie_collision,        "*COLLIDE*")        \
0134     EM(fscache_cookie_discard,      "DISCARD  ")        \
0135     EM(fscache_cookie_failed,       "FAILED   ")        \
0136     EM(fscache_cookie_get_attach_object,    "GET attch")        \
0137     EM(fscache_cookie_get_hash_collision,   "GET hcoll")        \
0138     EM(fscache_cookie_get_end_access,   "GQ  endac")        \
0139     EM(fscache_cookie_get_inval_work,   "GQ  inval")        \
0140     EM(fscache_cookie_get_lru,      "GET lru  ")        \
0141     EM(fscache_cookie_get_use_work,     "GQ  use  ")        \
0142     EM(fscache_cookie_new_acquire,      "NEW acq  ")        \
0143     EM(fscache_cookie_put_hash_collision,   "PUT hcoll")        \
0144     EM(fscache_cookie_put_lru,      "PUT lru  ")        \
0145     EM(fscache_cookie_put_object,       "PUT obj  ")        \
0146     EM(fscache_cookie_put_over_queued,  "PQ  overq")        \
0147     EM(fscache_cookie_put_relinquish,   "PUT relnq")        \
0148     EM(fscache_cookie_put_withdrawn,    "PUT wthdn")        \
0149     EM(fscache_cookie_put_work,     "PQ  work ")        \
0150     EM(fscache_cookie_see_active,       "-   activ")        \
0151     EM(fscache_cookie_see_lru_discard,  "-   x-lru")        \
0152     EM(fscache_cookie_see_lru_do_one,   "-   lrudo")        \
0153     EM(fscache_cookie_see_relinquish,   "-   x-rlq")        \
0154     EM(fscache_cookie_see_withdraw,     "-   x-wth")        \
0155     E_(fscache_cookie_see_work,     "-   work ")
0156 
0157 #define fscache_active_traces       \
0158     EM(fscache_active_use,          "USE          ")    \
0159     EM(fscache_active_use_modify,       "USE-m        ")    \
0160     E_(fscache_active_unuse,        "UNUSE        ")
0161 
0162 #define fscache_access_traces       \
0163     EM(fscache_access_acquire_volume,   "BEGIN acq_vol")    \
0164     EM(fscache_access_acquire_volume_end,   "END   acq_vol")    \
0165     EM(fscache_access_cache_pin,        "PIN   cache  ")    \
0166     EM(fscache_access_cache_unpin,      "UNPIN cache  ")    \
0167     EM(fscache_access_invalidate_cookie,    "BEGIN inval  ")    \
0168     EM(fscache_access_invalidate_cookie_end,"END   inval  ")    \
0169     EM(fscache_access_io_end,       "END   io     ")    \
0170     EM(fscache_access_io_not_live,      "END   io_notl")    \
0171     EM(fscache_access_io_read,      "BEGIN io_read")    \
0172     EM(fscache_access_io_resize,        "BEGIN io_resz")    \
0173     EM(fscache_access_io_wait,      "WAIT  io     ")    \
0174     EM(fscache_access_io_write,     "BEGIN io_writ")    \
0175     EM(fscache_access_lookup_cookie,    "BEGIN lookup ")    \
0176     EM(fscache_access_lookup_cookie_end,    "END   lookup ")    \
0177     EM(fscache_access_lookup_cookie_end_failed,"END   lookupf") \
0178     EM(fscache_access_relinquish_volume,    "BEGIN rlq_vol")    \
0179     EM(fscache_access_relinquish_volume_end,"END   rlq_vol")    \
0180     E_(fscache_access_unlive,       "END   unlive ")
0181 
0182 /*
0183  * Export enum symbols via userspace.
0184  */
0185 #undef EM
0186 #undef E_
0187 #define EM(a, b) TRACE_DEFINE_ENUM(a);
0188 #define E_(a, b) TRACE_DEFINE_ENUM(a);
0189 
0190 fscache_cache_traces;
0191 fscache_volume_traces;
0192 fscache_cookie_traces;
0193 fscache_access_traces;
0194 
0195 /*
0196  * Now redefine the EM() and E_() macros to map the enums to the strings that
0197  * will be printed in the output.
0198  */
0199 #undef EM
0200 #undef E_
0201 #define EM(a, b)    { a, b },
0202 #define E_(a, b)    { a, b }
0203 
0204 
0205 TRACE_EVENT(fscache_cache,
0206         TP_PROTO(unsigned int cache_debug_id,
0207              int usage,
0208              enum fscache_cache_trace where),
0209 
0210         TP_ARGS(cache_debug_id, usage, where),
0211 
0212         TP_STRUCT__entry(
0213             __field(unsigned int,       cache       )
0214             __field(int,            usage       )
0215             __field(enum fscache_cache_trace,   where       )
0216                  ),
0217 
0218         TP_fast_assign(
0219             __entry->cache  = cache_debug_id;
0220             __entry->usage  = usage;
0221             __entry->where  = where;
0222                ),
0223 
0224         TP_printk("C=%08x %s r=%d",
0225               __entry->cache,
0226               __print_symbolic(__entry->where, fscache_cache_traces),
0227               __entry->usage)
0228         );
0229 
0230 TRACE_EVENT(fscache_volume,
0231         TP_PROTO(unsigned int volume_debug_id,
0232              int usage,
0233              enum fscache_volume_trace where),
0234 
0235         TP_ARGS(volume_debug_id, usage, where),
0236 
0237         TP_STRUCT__entry(
0238             __field(unsigned int,       volume      )
0239             __field(int,            usage       )
0240             __field(enum fscache_volume_trace,  where       )
0241                  ),
0242 
0243         TP_fast_assign(
0244             __entry->volume = volume_debug_id;
0245             __entry->usage  = usage;
0246             __entry->where  = where;
0247                ),
0248 
0249         TP_printk("V=%08x %s u=%d",
0250               __entry->volume,
0251               __print_symbolic(__entry->where, fscache_volume_traces),
0252               __entry->usage)
0253         );
0254 
0255 TRACE_EVENT(fscache_cookie,
0256         TP_PROTO(unsigned int cookie_debug_id,
0257              int ref,
0258              enum fscache_cookie_trace where),
0259 
0260         TP_ARGS(cookie_debug_id, ref, where),
0261 
0262         TP_STRUCT__entry(
0263             __field(unsigned int,       cookie      )
0264             __field(int,            ref     )
0265             __field(enum fscache_cookie_trace,  where       )
0266                  ),
0267 
0268         TP_fast_assign(
0269             __entry->cookie = cookie_debug_id;
0270             __entry->ref    = ref;
0271             __entry->where  = where;
0272                ),
0273 
0274         TP_printk("c=%08x %s r=%d",
0275               __entry->cookie,
0276               __print_symbolic(__entry->where, fscache_cookie_traces),
0277               __entry->ref)
0278         );
0279 
0280 TRACE_EVENT(fscache_active,
0281         TP_PROTO(unsigned int cookie_debug_id,
0282              int ref,
0283              int n_active,
0284              int n_accesses,
0285              enum fscache_active_trace why),
0286 
0287         TP_ARGS(cookie_debug_id, ref, n_active, n_accesses, why),
0288 
0289         TP_STRUCT__entry(
0290             __field(unsigned int,       cookie      )
0291             __field(int,            ref     )
0292             __field(int,            n_active    )
0293             __field(int,            n_accesses  )
0294             __field(enum fscache_active_trace,  why     )
0295                  ),
0296 
0297         TP_fast_assign(
0298             __entry->cookie = cookie_debug_id;
0299             __entry->ref    = ref;
0300             __entry->n_active   = n_active;
0301             __entry->n_accesses = n_accesses;
0302             __entry->why    = why;
0303                ),
0304 
0305         TP_printk("c=%08x %s r=%d a=%d c=%d",
0306               __entry->cookie,
0307               __print_symbolic(__entry->why, fscache_active_traces),
0308               __entry->ref,
0309               __entry->n_accesses,
0310               __entry->n_active)
0311         );
0312 
0313 TRACE_EVENT(fscache_access_cache,
0314         TP_PROTO(unsigned int cache_debug_id,
0315              int ref,
0316              int n_accesses,
0317              enum fscache_access_trace why),
0318 
0319         TP_ARGS(cache_debug_id, ref, n_accesses, why),
0320 
0321         TP_STRUCT__entry(
0322             __field(unsigned int,       cache       )
0323             __field(int,            ref     )
0324             __field(int,            n_accesses  )
0325             __field(enum fscache_access_trace,  why     )
0326                  ),
0327 
0328         TP_fast_assign(
0329             __entry->cache  = cache_debug_id;
0330             __entry->ref    = ref;
0331             __entry->n_accesses = n_accesses;
0332             __entry->why    = why;
0333                ),
0334 
0335         TP_printk("C=%08x %s r=%d a=%d",
0336               __entry->cache,
0337               __print_symbolic(__entry->why, fscache_access_traces),
0338               __entry->ref,
0339               __entry->n_accesses)
0340         );
0341 
0342 TRACE_EVENT(fscache_access_volume,
0343         TP_PROTO(unsigned int volume_debug_id,
0344              unsigned int cookie_debug_id,
0345              int ref,
0346              int n_accesses,
0347              enum fscache_access_trace why),
0348 
0349         TP_ARGS(volume_debug_id, cookie_debug_id, ref, n_accesses, why),
0350 
0351         TP_STRUCT__entry(
0352             __field(unsigned int,       volume      )
0353             __field(unsigned int,       cookie      )
0354             __field(int,            ref     )
0355             __field(int,            n_accesses  )
0356             __field(enum fscache_access_trace,  why     )
0357                  ),
0358 
0359         TP_fast_assign(
0360             __entry->volume = volume_debug_id;
0361             __entry->cookie = cookie_debug_id;
0362             __entry->ref    = ref;
0363             __entry->n_accesses = n_accesses;
0364             __entry->why    = why;
0365                ),
0366 
0367         TP_printk("V=%08x c=%08x %s r=%d a=%d",
0368               __entry->volume,
0369               __entry->cookie,
0370               __print_symbolic(__entry->why, fscache_access_traces),
0371               __entry->ref,
0372               __entry->n_accesses)
0373         );
0374 
0375 TRACE_EVENT(fscache_access,
0376         TP_PROTO(unsigned int cookie_debug_id,
0377              int ref,
0378              int n_accesses,
0379              enum fscache_access_trace why),
0380 
0381         TP_ARGS(cookie_debug_id, ref, n_accesses, why),
0382 
0383         TP_STRUCT__entry(
0384             __field(unsigned int,       cookie      )
0385             __field(int,            ref     )
0386             __field(int,            n_accesses  )
0387             __field(enum fscache_access_trace,  why     )
0388                  ),
0389 
0390         TP_fast_assign(
0391             __entry->cookie = cookie_debug_id;
0392             __entry->ref    = ref;
0393             __entry->n_accesses = n_accesses;
0394             __entry->why    = why;
0395                ),
0396 
0397         TP_printk("c=%08x %s r=%d a=%d",
0398               __entry->cookie,
0399               __print_symbolic(__entry->why, fscache_access_traces),
0400               __entry->ref,
0401               __entry->n_accesses)
0402         );
0403 
0404 TRACE_EVENT(fscache_acquire,
0405         TP_PROTO(struct fscache_cookie *cookie),
0406 
0407         TP_ARGS(cookie),
0408 
0409         TP_STRUCT__entry(
0410             __field(unsigned int,       cookie      )
0411             __field(unsigned int,       volume      )
0412             __field(int,            v_ref       )
0413             __field(int,            v_n_cookies )
0414                  ),
0415 
0416         TP_fast_assign(
0417             __entry->cookie     = cookie->debug_id;
0418             __entry->volume     = cookie->volume->debug_id;
0419             __entry->v_ref      = refcount_read(&cookie->volume->ref);
0420             __entry->v_n_cookies    = atomic_read(&cookie->volume->n_cookies);
0421                ),
0422 
0423         TP_printk("c=%08x V=%08x vr=%d vc=%d",
0424               __entry->cookie,
0425               __entry->volume, __entry->v_ref, __entry->v_n_cookies)
0426         );
0427 
0428 TRACE_EVENT(fscache_relinquish,
0429         TP_PROTO(struct fscache_cookie *cookie, bool retire),
0430 
0431         TP_ARGS(cookie, retire),
0432 
0433         TP_STRUCT__entry(
0434             __field(unsigned int,       cookie      )
0435             __field(unsigned int,       volume      )
0436             __field(int,            ref     )
0437             __field(int,            n_active    )
0438             __field(u8,             flags       )
0439             __field(bool,           retire      )
0440                  ),
0441 
0442         TP_fast_assign(
0443             __entry->cookie = cookie->debug_id;
0444             __entry->volume = cookie->volume->debug_id;
0445             __entry->ref    = refcount_read(&cookie->ref);
0446             __entry->n_active   = atomic_read(&cookie->n_active);
0447             __entry->flags  = cookie->flags;
0448             __entry->retire = retire;
0449                ),
0450 
0451         TP_printk("c=%08x V=%08x r=%d U=%d f=%02x rt=%u",
0452               __entry->cookie, __entry->volume, __entry->ref,
0453               __entry->n_active, __entry->flags, __entry->retire)
0454         );
0455 
0456 TRACE_EVENT(fscache_invalidate,
0457         TP_PROTO(struct fscache_cookie *cookie, loff_t new_size),
0458 
0459         TP_ARGS(cookie, new_size),
0460 
0461         TP_STRUCT__entry(
0462             __field(unsigned int,       cookie      )
0463             __field(loff_t,         new_size    )
0464                  ),
0465 
0466         TP_fast_assign(
0467             __entry->cookie = cookie->debug_id;
0468             __entry->new_size   = new_size;
0469                ),
0470 
0471         TP_printk("c=%08x sz=%llx",
0472               __entry->cookie, __entry->new_size)
0473         );
0474 
0475 TRACE_EVENT(fscache_resize,
0476         TP_PROTO(struct fscache_cookie *cookie, loff_t new_size),
0477 
0478         TP_ARGS(cookie, new_size),
0479 
0480         TP_STRUCT__entry(
0481             __field(unsigned int,       cookie      )
0482             __field(loff_t,         old_size    )
0483             __field(loff_t,         new_size    )
0484                  ),
0485 
0486         TP_fast_assign(
0487             __entry->cookie = cookie->debug_id;
0488             __entry->old_size   = cookie->object_size;
0489             __entry->new_size   = new_size;
0490                ),
0491 
0492         TP_printk("c=%08x os=%08llx sz=%08llx",
0493               __entry->cookie,
0494               __entry->old_size,
0495               __entry->new_size)
0496         );
0497 
0498 #endif /* _TRACE_FSCACHE_H */
0499 
0500 /* This part must be outside protection */
0501 #include <trace/define_trace.h>