1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* FS-Cache tracepoints 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. 5*4882a593Smuzhiyun * Written by David Howells (dhowells@redhat.com) 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #undef TRACE_SYSTEM 8*4882a593Smuzhiyun #define TRACE_SYSTEM fscache 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #if !defined(_TRACE_FSCACHE_H) || defined(TRACE_HEADER_MULTI_READ) 11*4882a593Smuzhiyun #define _TRACE_FSCACHE_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/fscache.h> 14*4882a593Smuzhiyun #include <linux/tracepoint.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* 17*4882a593Smuzhiyun * Define enums for tracing information. 18*4882a593Smuzhiyun */ 19*4882a593Smuzhiyun #ifndef __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY 20*4882a593Smuzhiyun #define __FSCACHE_DECLARE_TRACE_ENUMS_ONCE_ONLY 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun enum fscache_cookie_trace { 23*4882a593Smuzhiyun fscache_cookie_collision, 24*4882a593Smuzhiyun fscache_cookie_discard, 25*4882a593Smuzhiyun fscache_cookie_get_acquire_parent, 26*4882a593Smuzhiyun fscache_cookie_get_attach_object, 27*4882a593Smuzhiyun fscache_cookie_get_reacquire, 28*4882a593Smuzhiyun fscache_cookie_get_register_netfs, 29*4882a593Smuzhiyun fscache_cookie_put_acquire_nobufs, 30*4882a593Smuzhiyun fscache_cookie_put_dup_netfs, 31*4882a593Smuzhiyun fscache_cookie_put_relinquish, 32*4882a593Smuzhiyun fscache_cookie_put_object, 33*4882a593Smuzhiyun fscache_cookie_put_parent, 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun enum fscache_page_trace { 37*4882a593Smuzhiyun fscache_page_cached, 38*4882a593Smuzhiyun fscache_page_inval, 39*4882a593Smuzhiyun fscache_page_maybe_release, 40*4882a593Smuzhiyun fscache_page_radix_clear_store, 41*4882a593Smuzhiyun fscache_page_radix_delete, 42*4882a593Smuzhiyun fscache_page_radix_insert, 43*4882a593Smuzhiyun fscache_page_radix_pend2store, 44*4882a593Smuzhiyun fscache_page_radix_set_pend, 45*4882a593Smuzhiyun fscache_page_uncache, 46*4882a593Smuzhiyun fscache_page_write, 47*4882a593Smuzhiyun fscache_page_write_end, 48*4882a593Smuzhiyun fscache_page_write_end_pend, 49*4882a593Smuzhiyun fscache_page_write_end_noc, 50*4882a593Smuzhiyun fscache_page_write_wait, 51*4882a593Smuzhiyun fscache_page_trace__nr 52*4882a593Smuzhiyun }; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun enum fscache_op_trace { 55*4882a593Smuzhiyun fscache_op_cancel, 56*4882a593Smuzhiyun fscache_op_cancel_all, 57*4882a593Smuzhiyun fscache_op_cancelled, 58*4882a593Smuzhiyun fscache_op_completed, 59*4882a593Smuzhiyun fscache_op_enqueue_async, 60*4882a593Smuzhiyun fscache_op_enqueue_mythread, 61*4882a593Smuzhiyun fscache_op_gc, 62*4882a593Smuzhiyun fscache_op_init, 63*4882a593Smuzhiyun fscache_op_put, 64*4882a593Smuzhiyun fscache_op_run, 65*4882a593Smuzhiyun fscache_op_signal, 66*4882a593Smuzhiyun fscache_op_submit, 67*4882a593Smuzhiyun fscache_op_submit_ex, 68*4882a593Smuzhiyun fscache_op_work, 69*4882a593Smuzhiyun fscache_op_trace__nr 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum fscache_page_op_trace { 73*4882a593Smuzhiyun fscache_page_op_alloc_one, 74*4882a593Smuzhiyun fscache_page_op_attr_changed, 75*4882a593Smuzhiyun fscache_page_op_check_consistency, 76*4882a593Smuzhiyun fscache_page_op_invalidate, 77*4882a593Smuzhiyun fscache_page_op_retr_multi, 78*4882a593Smuzhiyun fscache_page_op_retr_one, 79*4882a593Smuzhiyun fscache_page_op_write_one, 80*4882a593Smuzhiyun fscache_page_op_trace__nr 81*4882a593Smuzhiyun }; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #endif 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* 86*4882a593Smuzhiyun * Declare tracing information enums and their string mappings for display. 87*4882a593Smuzhiyun */ 88*4882a593Smuzhiyun #define fscache_cookie_traces \ 89*4882a593Smuzhiyun EM(fscache_cookie_collision, "*COLLISION*") \ 90*4882a593Smuzhiyun EM(fscache_cookie_discard, "DISCARD") \ 91*4882a593Smuzhiyun EM(fscache_cookie_get_acquire_parent, "GET prn") \ 92*4882a593Smuzhiyun EM(fscache_cookie_get_attach_object, "GET obj") \ 93*4882a593Smuzhiyun EM(fscache_cookie_get_reacquire, "GET raq") \ 94*4882a593Smuzhiyun EM(fscache_cookie_get_register_netfs, "GET net") \ 95*4882a593Smuzhiyun EM(fscache_cookie_put_acquire_nobufs, "PUT nbf") \ 96*4882a593Smuzhiyun EM(fscache_cookie_put_dup_netfs, "PUT dnt") \ 97*4882a593Smuzhiyun EM(fscache_cookie_put_relinquish, "PUT rlq") \ 98*4882a593Smuzhiyun EM(fscache_cookie_put_object, "PUT obj") \ 99*4882a593Smuzhiyun E_(fscache_cookie_put_parent, "PUT prn") 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define fscache_page_traces \ 102*4882a593Smuzhiyun EM(fscache_page_cached, "Cached ") \ 103*4882a593Smuzhiyun EM(fscache_page_inval, "InvalPg") \ 104*4882a593Smuzhiyun EM(fscache_page_maybe_release, "MayRels") \ 105*4882a593Smuzhiyun EM(fscache_page_uncache, "Uncache") \ 106*4882a593Smuzhiyun EM(fscache_page_radix_clear_store, "RxCStr ") \ 107*4882a593Smuzhiyun EM(fscache_page_radix_delete, "RxDel ") \ 108*4882a593Smuzhiyun EM(fscache_page_radix_insert, "RxIns ") \ 109*4882a593Smuzhiyun EM(fscache_page_radix_pend2store, "RxP2S ") \ 110*4882a593Smuzhiyun EM(fscache_page_radix_set_pend, "RxSPend ") \ 111*4882a593Smuzhiyun EM(fscache_page_write, "WritePg") \ 112*4882a593Smuzhiyun EM(fscache_page_write_end, "EndPgWr") \ 113*4882a593Smuzhiyun EM(fscache_page_write_end_pend, "EndPgWP") \ 114*4882a593Smuzhiyun EM(fscache_page_write_end_noc, "EndPgNC") \ 115*4882a593Smuzhiyun E_(fscache_page_write_wait, "WtOnWrt") 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define fscache_op_traces \ 118*4882a593Smuzhiyun EM(fscache_op_cancel, "Cancel1") \ 119*4882a593Smuzhiyun EM(fscache_op_cancel_all, "CancelA") \ 120*4882a593Smuzhiyun EM(fscache_op_cancelled, "Canclld") \ 121*4882a593Smuzhiyun EM(fscache_op_completed, "Complet") \ 122*4882a593Smuzhiyun EM(fscache_op_enqueue_async, "EnqAsyn") \ 123*4882a593Smuzhiyun EM(fscache_op_enqueue_mythread, "EnqMyTh") \ 124*4882a593Smuzhiyun EM(fscache_op_gc, "GC ") \ 125*4882a593Smuzhiyun EM(fscache_op_init, "Init ") \ 126*4882a593Smuzhiyun EM(fscache_op_put, "Put ") \ 127*4882a593Smuzhiyun EM(fscache_op_run, "Run ") \ 128*4882a593Smuzhiyun EM(fscache_op_signal, "Signal ") \ 129*4882a593Smuzhiyun EM(fscache_op_submit, "Submit ") \ 130*4882a593Smuzhiyun EM(fscache_op_submit_ex, "SubmitX") \ 131*4882a593Smuzhiyun E_(fscache_op_work, "Work ") 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun #define fscache_page_op_traces \ 134*4882a593Smuzhiyun EM(fscache_page_op_alloc_one, "Alloc1 ") \ 135*4882a593Smuzhiyun EM(fscache_page_op_attr_changed, "AttrChg") \ 136*4882a593Smuzhiyun EM(fscache_page_op_check_consistency, "CheckCn") \ 137*4882a593Smuzhiyun EM(fscache_page_op_invalidate, "Inval ") \ 138*4882a593Smuzhiyun EM(fscache_page_op_retr_multi, "RetrMul") \ 139*4882a593Smuzhiyun EM(fscache_page_op_retr_one, "Retr1 ") \ 140*4882a593Smuzhiyun E_(fscache_page_op_write_one, "Write1 ") 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* 143*4882a593Smuzhiyun * Export enum symbols via userspace. 144*4882a593Smuzhiyun */ 145*4882a593Smuzhiyun #undef EM 146*4882a593Smuzhiyun #undef E_ 147*4882a593Smuzhiyun #define EM(a, b) TRACE_DEFINE_ENUM(a); 148*4882a593Smuzhiyun #define E_(a, b) TRACE_DEFINE_ENUM(a); 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun fscache_cookie_traces; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun /* 153*4882a593Smuzhiyun * Now redefine the EM() and E_() macros to map the enums to the strings that 154*4882a593Smuzhiyun * will be printed in the output. 155*4882a593Smuzhiyun */ 156*4882a593Smuzhiyun #undef EM 157*4882a593Smuzhiyun #undef E_ 158*4882a593Smuzhiyun #define EM(a, b) { a, b }, 159*4882a593Smuzhiyun #define E_(a, b) { a, b } 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun TRACE_EVENT(fscache_cookie, 163*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, 164*4882a593Smuzhiyun enum fscache_cookie_trace where, 165*4882a593Smuzhiyun int usage), 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun TP_ARGS(cookie, where, usage), 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun TP_STRUCT__entry( 170*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 171*4882a593Smuzhiyun __field(struct fscache_cookie *, parent ) 172*4882a593Smuzhiyun __field(enum fscache_cookie_trace, where ) 173*4882a593Smuzhiyun __field(int, usage ) 174*4882a593Smuzhiyun __field(int, n_children ) 175*4882a593Smuzhiyun __field(int, n_active ) 176*4882a593Smuzhiyun __field(u8, flags ) 177*4882a593Smuzhiyun ), 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun TP_fast_assign( 180*4882a593Smuzhiyun __entry->cookie = cookie; 181*4882a593Smuzhiyun __entry->parent = cookie->parent; 182*4882a593Smuzhiyun __entry->where = where; 183*4882a593Smuzhiyun __entry->usage = usage; 184*4882a593Smuzhiyun __entry->n_children = atomic_read(&cookie->n_children); 185*4882a593Smuzhiyun __entry->n_active = atomic_read(&cookie->n_active); 186*4882a593Smuzhiyun __entry->flags = cookie->flags; 187*4882a593Smuzhiyun ), 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun TP_printk("%s c=%p u=%d p=%p Nc=%d Na=%d f=%02x", 190*4882a593Smuzhiyun __print_symbolic(__entry->where, fscache_cookie_traces), 191*4882a593Smuzhiyun __entry->cookie, __entry->usage, 192*4882a593Smuzhiyun __entry->parent, __entry->n_children, __entry->n_active, 193*4882a593Smuzhiyun __entry->flags) 194*4882a593Smuzhiyun ); 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun TRACE_EVENT(fscache_netfs, 197*4882a593Smuzhiyun TP_PROTO(struct fscache_netfs *netfs), 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun TP_ARGS(netfs), 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun TP_STRUCT__entry( 202*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 203*4882a593Smuzhiyun __array(char, name, 8 ) 204*4882a593Smuzhiyun ), 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun TP_fast_assign( 207*4882a593Smuzhiyun __entry->cookie = netfs->primary_index; 208*4882a593Smuzhiyun strncpy(__entry->name, netfs->name, 8); 209*4882a593Smuzhiyun __entry->name[7] = 0; 210*4882a593Smuzhiyun ), 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun TP_printk("c=%p n=%s", 213*4882a593Smuzhiyun __entry->cookie, __entry->name) 214*4882a593Smuzhiyun ); 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun TRACE_EVENT(fscache_acquire, 217*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie), 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun TP_ARGS(cookie), 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun TP_STRUCT__entry( 222*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 223*4882a593Smuzhiyun __field(struct fscache_cookie *, parent ) 224*4882a593Smuzhiyun __array(char, name, 8 ) 225*4882a593Smuzhiyun __field(int, p_usage ) 226*4882a593Smuzhiyun __field(int, p_n_children ) 227*4882a593Smuzhiyun __field(u8, p_flags ) 228*4882a593Smuzhiyun ), 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun TP_fast_assign( 231*4882a593Smuzhiyun __entry->cookie = cookie; 232*4882a593Smuzhiyun __entry->parent = cookie->parent; 233*4882a593Smuzhiyun __entry->p_usage = atomic_read(&cookie->parent->usage); 234*4882a593Smuzhiyun __entry->p_n_children = atomic_read(&cookie->parent->n_children); 235*4882a593Smuzhiyun __entry->p_flags = cookie->parent->flags; 236*4882a593Smuzhiyun memcpy(__entry->name, cookie->def->name, 8); 237*4882a593Smuzhiyun __entry->name[7] = 0; 238*4882a593Smuzhiyun ), 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun TP_printk("c=%p p=%p pu=%d pc=%d pf=%02x n=%s", 241*4882a593Smuzhiyun __entry->cookie, __entry->parent, __entry->p_usage, 242*4882a593Smuzhiyun __entry->p_n_children, __entry->p_flags, __entry->name) 243*4882a593Smuzhiyun ); 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun TRACE_EVENT(fscache_relinquish, 246*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, bool retire), 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun TP_ARGS(cookie, retire), 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun TP_STRUCT__entry( 251*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 252*4882a593Smuzhiyun __field(struct fscache_cookie *, parent ) 253*4882a593Smuzhiyun __field(int, usage ) 254*4882a593Smuzhiyun __field(int, n_children ) 255*4882a593Smuzhiyun __field(int, n_active ) 256*4882a593Smuzhiyun __field(u8, flags ) 257*4882a593Smuzhiyun __field(bool, retire ) 258*4882a593Smuzhiyun ), 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun TP_fast_assign( 261*4882a593Smuzhiyun __entry->cookie = cookie; 262*4882a593Smuzhiyun __entry->parent = cookie->parent; 263*4882a593Smuzhiyun __entry->usage = atomic_read(&cookie->usage); 264*4882a593Smuzhiyun __entry->n_children = atomic_read(&cookie->n_children); 265*4882a593Smuzhiyun __entry->n_active = atomic_read(&cookie->n_active); 266*4882a593Smuzhiyun __entry->flags = cookie->flags; 267*4882a593Smuzhiyun __entry->retire = retire; 268*4882a593Smuzhiyun ), 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun TP_printk("c=%p u=%d p=%p Nc=%d Na=%d f=%02x r=%u", 271*4882a593Smuzhiyun __entry->cookie, __entry->usage, 272*4882a593Smuzhiyun __entry->parent, __entry->n_children, __entry->n_active, 273*4882a593Smuzhiyun __entry->flags, __entry->retire) 274*4882a593Smuzhiyun ); 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun TRACE_EVENT(fscache_enable, 277*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie), 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun TP_ARGS(cookie), 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun TP_STRUCT__entry( 282*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 283*4882a593Smuzhiyun __field(int, usage ) 284*4882a593Smuzhiyun __field(int, n_children ) 285*4882a593Smuzhiyun __field(int, n_active ) 286*4882a593Smuzhiyun __field(u8, flags ) 287*4882a593Smuzhiyun ), 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun TP_fast_assign( 290*4882a593Smuzhiyun __entry->cookie = cookie; 291*4882a593Smuzhiyun __entry->usage = atomic_read(&cookie->usage); 292*4882a593Smuzhiyun __entry->n_children = atomic_read(&cookie->n_children); 293*4882a593Smuzhiyun __entry->n_active = atomic_read(&cookie->n_active); 294*4882a593Smuzhiyun __entry->flags = cookie->flags; 295*4882a593Smuzhiyun ), 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun TP_printk("c=%p u=%d Nc=%d Na=%d f=%02x", 298*4882a593Smuzhiyun __entry->cookie, __entry->usage, 299*4882a593Smuzhiyun __entry->n_children, __entry->n_active, __entry->flags) 300*4882a593Smuzhiyun ); 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun TRACE_EVENT(fscache_disable, 303*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie), 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun TP_ARGS(cookie), 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun TP_STRUCT__entry( 308*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 309*4882a593Smuzhiyun __field(int, usage ) 310*4882a593Smuzhiyun __field(int, n_children ) 311*4882a593Smuzhiyun __field(int, n_active ) 312*4882a593Smuzhiyun __field(u8, flags ) 313*4882a593Smuzhiyun ), 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun TP_fast_assign( 316*4882a593Smuzhiyun __entry->cookie = cookie; 317*4882a593Smuzhiyun __entry->usage = atomic_read(&cookie->usage); 318*4882a593Smuzhiyun __entry->n_children = atomic_read(&cookie->n_children); 319*4882a593Smuzhiyun __entry->n_active = atomic_read(&cookie->n_active); 320*4882a593Smuzhiyun __entry->flags = cookie->flags; 321*4882a593Smuzhiyun ), 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun TP_printk("c=%p u=%d Nc=%d Na=%d f=%02x", 324*4882a593Smuzhiyun __entry->cookie, __entry->usage, 325*4882a593Smuzhiyun __entry->n_children, __entry->n_active, __entry->flags) 326*4882a593Smuzhiyun ); 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun TRACE_EVENT(fscache_osm, 329*4882a593Smuzhiyun TP_PROTO(struct fscache_object *object, 330*4882a593Smuzhiyun const struct fscache_state *state, 331*4882a593Smuzhiyun bool wait, bool oob, s8 event_num), 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun TP_ARGS(object, state, wait, oob, event_num), 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun TP_STRUCT__entry( 336*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 337*4882a593Smuzhiyun __field(struct fscache_object *, object ) 338*4882a593Smuzhiyun __array(char, state, 8 ) 339*4882a593Smuzhiyun __field(bool, wait ) 340*4882a593Smuzhiyun __field(bool, oob ) 341*4882a593Smuzhiyun __field(s8, event_num ) 342*4882a593Smuzhiyun ), 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun TP_fast_assign( 345*4882a593Smuzhiyun __entry->cookie = object->cookie; 346*4882a593Smuzhiyun __entry->object = object; 347*4882a593Smuzhiyun __entry->wait = wait; 348*4882a593Smuzhiyun __entry->oob = oob; 349*4882a593Smuzhiyun __entry->event_num = event_num; 350*4882a593Smuzhiyun memcpy(__entry->state, state->short_name, 8); 351*4882a593Smuzhiyun ), 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun TP_printk("c=%p o=%p %s %s%sev=%d", 354*4882a593Smuzhiyun __entry->cookie, 355*4882a593Smuzhiyun __entry->object, 356*4882a593Smuzhiyun __entry->state, 357*4882a593Smuzhiyun __print_symbolic(__entry->wait, 358*4882a593Smuzhiyun { true, "WAIT" }, 359*4882a593Smuzhiyun { false, "WORK" }), 360*4882a593Smuzhiyun __print_symbolic(__entry->oob, 361*4882a593Smuzhiyun { true, " OOB " }, 362*4882a593Smuzhiyun { false, " " }), 363*4882a593Smuzhiyun __entry->event_num) 364*4882a593Smuzhiyun ); 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun TRACE_EVENT(fscache_page, 367*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct page *page, 368*4882a593Smuzhiyun enum fscache_page_trace why), 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun TP_ARGS(cookie, page, why), 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun TP_STRUCT__entry( 373*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 374*4882a593Smuzhiyun __field(pgoff_t, page ) 375*4882a593Smuzhiyun __field(enum fscache_page_trace, why ) 376*4882a593Smuzhiyun ), 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun TP_fast_assign( 379*4882a593Smuzhiyun __entry->cookie = cookie; 380*4882a593Smuzhiyun __entry->page = page->index; 381*4882a593Smuzhiyun __entry->why = why; 382*4882a593Smuzhiyun ), 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun TP_printk("c=%p %s pg=%lx", 385*4882a593Smuzhiyun __entry->cookie, 386*4882a593Smuzhiyun __print_symbolic(__entry->why, fscache_page_traces), 387*4882a593Smuzhiyun __entry->page) 388*4882a593Smuzhiyun ); 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun TRACE_EVENT(fscache_check_page, 391*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct page *page, 392*4882a593Smuzhiyun void *val, int n), 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun TP_ARGS(cookie, page, val, n), 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun TP_STRUCT__entry( 397*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 398*4882a593Smuzhiyun __field(void *, page ) 399*4882a593Smuzhiyun __field(void *, val ) 400*4882a593Smuzhiyun __field(int, n ) 401*4882a593Smuzhiyun ), 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun TP_fast_assign( 404*4882a593Smuzhiyun __entry->cookie = cookie; 405*4882a593Smuzhiyun __entry->page = page; 406*4882a593Smuzhiyun __entry->val = val; 407*4882a593Smuzhiyun __entry->n = n; 408*4882a593Smuzhiyun ), 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun TP_printk("c=%p pg=%p val=%p n=%d", 411*4882a593Smuzhiyun __entry->cookie, __entry->page, __entry->val, __entry->n) 412*4882a593Smuzhiyun ); 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun TRACE_EVENT(fscache_wake_cookie, 415*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie), 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun TP_ARGS(cookie), 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun TP_STRUCT__entry( 420*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 421*4882a593Smuzhiyun ), 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun TP_fast_assign( 424*4882a593Smuzhiyun __entry->cookie = cookie; 425*4882a593Smuzhiyun ), 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun TP_printk("c=%p", __entry->cookie) 428*4882a593Smuzhiyun ); 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun TRACE_EVENT(fscache_op, 431*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct fscache_operation *op, 432*4882a593Smuzhiyun enum fscache_op_trace why), 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun TP_ARGS(cookie, op, why), 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun TP_STRUCT__entry( 437*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 438*4882a593Smuzhiyun __field(struct fscache_operation *, op ) 439*4882a593Smuzhiyun __field(enum fscache_op_trace, why ) 440*4882a593Smuzhiyun ), 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun TP_fast_assign( 443*4882a593Smuzhiyun __entry->cookie = cookie; 444*4882a593Smuzhiyun __entry->op = op; 445*4882a593Smuzhiyun __entry->why = why; 446*4882a593Smuzhiyun ), 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun TP_printk("c=%p op=%p %s", 449*4882a593Smuzhiyun __entry->cookie, __entry->op, 450*4882a593Smuzhiyun __print_symbolic(__entry->why, fscache_op_traces)) 451*4882a593Smuzhiyun ); 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun TRACE_EVENT(fscache_page_op, 454*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct page *page, 455*4882a593Smuzhiyun struct fscache_operation *op, enum fscache_page_op_trace what), 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun TP_ARGS(cookie, page, op, what), 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun TP_STRUCT__entry( 460*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 461*4882a593Smuzhiyun __field(pgoff_t, page ) 462*4882a593Smuzhiyun __field(struct fscache_operation *, op ) 463*4882a593Smuzhiyun __field(enum fscache_page_op_trace, what ) 464*4882a593Smuzhiyun ), 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun TP_fast_assign( 467*4882a593Smuzhiyun __entry->cookie = cookie; 468*4882a593Smuzhiyun __entry->page = page ? page->index : 0; 469*4882a593Smuzhiyun __entry->op = op; 470*4882a593Smuzhiyun __entry->what = what; 471*4882a593Smuzhiyun ), 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun TP_printk("c=%p %s pg=%lx op=%p", 474*4882a593Smuzhiyun __entry->cookie, 475*4882a593Smuzhiyun __print_symbolic(__entry->what, fscache_page_op_traces), 476*4882a593Smuzhiyun __entry->page, __entry->op) 477*4882a593Smuzhiyun ); 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun TRACE_EVENT(fscache_wrote_page, 480*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct page *page, 481*4882a593Smuzhiyun struct fscache_operation *op, int ret), 482*4882a593Smuzhiyun 483*4882a593Smuzhiyun TP_ARGS(cookie, page, op, ret), 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun TP_STRUCT__entry( 486*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 487*4882a593Smuzhiyun __field(pgoff_t, page ) 488*4882a593Smuzhiyun __field(struct fscache_operation *, op ) 489*4882a593Smuzhiyun __field(int, ret ) 490*4882a593Smuzhiyun ), 491*4882a593Smuzhiyun 492*4882a593Smuzhiyun TP_fast_assign( 493*4882a593Smuzhiyun __entry->cookie = cookie; 494*4882a593Smuzhiyun __entry->page = page->index; 495*4882a593Smuzhiyun __entry->op = op; 496*4882a593Smuzhiyun __entry->ret = ret; 497*4882a593Smuzhiyun ), 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun TP_printk("c=%p pg=%lx op=%p ret=%d", 500*4882a593Smuzhiyun __entry->cookie, __entry->page, __entry->op, __entry->ret) 501*4882a593Smuzhiyun ); 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun TRACE_EVENT(fscache_gang_lookup, 504*4882a593Smuzhiyun TP_PROTO(struct fscache_cookie *cookie, struct fscache_operation *op, 505*4882a593Smuzhiyun void **results, int n, pgoff_t store_limit), 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun TP_ARGS(cookie, op, results, n, store_limit), 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun TP_STRUCT__entry( 510*4882a593Smuzhiyun __field(struct fscache_cookie *, cookie ) 511*4882a593Smuzhiyun __field(struct fscache_operation *, op ) 512*4882a593Smuzhiyun __field(pgoff_t, results0 ) 513*4882a593Smuzhiyun __field(int, n ) 514*4882a593Smuzhiyun __field(pgoff_t, store_limit ) 515*4882a593Smuzhiyun ), 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun TP_fast_assign( 518*4882a593Smuzhiyun __entry->cookie = cookie; 519*4882a593Smuzhiyun __entry->op = op; 520*4882a593Smuzhiyun __entry->results0 = results[0] ? ((struct page *)results[0])->index : (pgoff_t)-1; 521*4882a593Smuzhiyun __entry->n = n; 522*4882a593Smuzhiyun __entry->store_limit = store_limit; 523*4882a593Smuzhiyun ), 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun TP_printk("c=%p op=%p r0=%lx n=%d sl=%lx", 526*4882a593Smuzhiyun __entry->cookie, __entry->op, __entry->results0, __entry->n, 527*4882a593Smuzhiyun __entry->store_limit) 528*4882a593Smuzhiyun ); 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun #endif /* _TRACE_FSCACHE_H */ 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun /* This part must be outside protection */ 533*4882a593Smuzhiyun #include <trace/define_trace.h> 534