18e8d7f13SDavid Howells /* AFS tracepoints 28e8d7f13SDavid Howells * 38e8d7f13SDavid Howells * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved. 48e8d7f13SDavid Howells * Written by David Howells (dhowells@redhat.com) 58e8d7f13SDavid Howells * 68e8d7f13SDavid Howells * This program is free software; you can redistribute it and/or 78e8d7f13SDavid Howells * modify it under the terms of the GNU General Public Licence 88e8d7f13SDavid Howells * as published by the Free Software Foundation; either version 98e8d7f13SDavid Howells * 2 of the Licence, or (at your option) any later version. 108e8d7f13SDavid Howells */ 118e8d7f13SDavid Howells #undef TRACE_SYSTEM 128e8d7f13SDavid Howells #define TRACE_SYSTEM afs 138e8d7f13SDavid Howells 148e8d7f13SDavid Howells #if !defined(_TRACE_AFS_H) || defined(TRACE_HEADER_MULTI_READ) 158e8d7f13SDavid Howells #define _TRACE_AFS_H 168e8d7f13SDavid Howells 178e8d7f13SDavid Howells #include <linux/tracepoint.h> 188e8d7f13SDavid Howells 19341f741fSDavid Howells /* 20341f741fSDavid Howells * Define enums for tracing information. 21341f741fSDavid Howells */ 22341f741fSDavid Howells #ifndef __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY 23341f741fSDavid Howells #define __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY 24341f741fSDavid Howells 25341f741fSDavid Howells enum afs_call_trace { 26341f741fSDavid Howells afs_call_trace_alloc, 27341f741fSDavid Howells afs_call_trace_free, 28341f741fSDavid Howells afs_call_trace_put, 29341f741fSDavid Howells afs_call_trace_wake, 30341f741fSDavid Howells afs_call_trace_work, 31341f741fSDavid Howells }; 32341f741fSDavid Howells 33025db80cSDavid Howells enum afs_fs_operation { 34025db80cSDavid Howells afs_FS_FetchData = 130, /* AFS Fetch file data */ 35025db80cSDavid Howells afs_FS_FetchStatus = 132, /* AFS Fetch file status */ 36025db80cSDavid Howells afs_FS_StoreData = 133, /* AFS Store file data */ 37025db80cSDavid Howells afs_FS_StoreStatus = 135, /* AFS Store file status */ 38025db80cSDavid Howells afs_FS_RemoveFile = 136, /* AFS Remove a file */ 39025db80cSDavid Howells afs_FS_CreateFile = 137, /* AFS Create a file */ 40025db80cSDavid Howells afs_FS_Rename = 138, /* AFS Rename or move a file or directory */ 41025db80cSDavid Howells afs_FS_Symlink = 139, /* AFS Create a symbolic link */ 42025db80cSDavid Howells afs_FS_Link = 140, /* AFS Create a hard link */ 43025db80cSDavid Howells afs_FS_MakeDir = 141, /* AFS Create a directory */ 44025db80cSDavid Howells afs_FS_RemoveDir = 142, /* AFS Remove a directory */ 45025db80cSDavid Howells afs_FS_GetVolumeInfo = 148, /* AFS Get information about a volume */ 46025db80cSDavid Howells afs_FS_GetVolumeStatus = 149, /* AFS Get volume status information */ 47025db80cSDavid Howells afs_FS_GetRootVolume = 151, /* AFS Get root volume name */ 48025db80cSDavid Howells afs_FS_SetLock = 156, /* AFS Request a file lock */ 49025db80cSDavid Howells afs_FS_ExtendLock = 157, /* AFS Extend a file lock */ 50025db80cSDavid Howells afs_FS_ReleaseLock = 158, /* AFS Release a file lock */ 51025db80cSDavid Howells afs_FS_Lookup = 161, /* AFS lookup file in directory */ 52025db80cSDavid Howells afs_FS_FetchData64 = 65537, /* AFS Fetch file data */ 53025db80cSDavid Howells afs_FS_StoreData64 = 65538, /* AFS Store file data */ 54025db80cSDavid Howells afs_FS_GiveUpAllCallBacks = 65539, /* AFS Give up all our callbacks on a server */ 55025db80cSDavid Howells afs_FS_GetCapabilities = 65540, /* AFS Get FS server capabilities */ 56025db80cSDavid Howells }; 57025db80cSDavid Howells 58025db80cSDavid Howells enum afs_vl_operation { 59025db80cSDavid Howells afs_VL_GetEntryByNameU = 527, /* AFS Get Vol Entry By Name operation ID */ 60025db80cSDavid Howells afs_VL_GetAddrsU = 533, /* AFS Get FS server addresses */ 61025db80cSDavid Howells afs_YFSVL_GetEndpoints = 64002, /* YFS Get FS & Vol server addresses */ 62025db80cSDavid Howells afs_VL_GetCapabilities = 65537, /* AFS Get VL server capabilities */ 63025db80cSDavid Howells }; 64025db80cSDavid Howells 65341f741fSDavid Howells #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */ 66341f741fSDavid Howells 67341f741fSDavid Howells /* 68341f741fSDavid Howells * Declare tracing information enums and their string mappings for display. 69341f741fSDavid Howells */ 70341f741fSDavid Howells #define afs_call_traces \ 71341f741fSDavid Howells EM(afs_call_trace_alloc, "ALLOC") \ 72341f741fSDavid Howells EM(afs_call_trace_free, "FREE ") \ 73341f741fSDavid Howells EM(afs_call_trace_put, "PUT ") \ 74341f741fSDavid Howells EM(afs_call_trace_wake, "WAKE ") \ 75341f741fSDavid Howells E_(afs_call_trace_work, "WORK ") 76341f741fSDavid Howells 77025db80cSDavid Howells #define afs_fs_operations \ 78025db80cSDavid Howells EM(afs_FS_FetchData, "FS.FetchData") \ 79025db80cSDavid Howells EM(afs_FS_FetchStatus, "FS.FetchStatus") \ 80025db80cSDavid Howells EM(afs_FS_StoreData, "FS.StoreData") \ 81025db80cSDavid Howells EM(afs_FS_StoreStatus, "FS.StoreStatus") \ 82025db80cSDavid Howells EM(afs_FS_RemoveFile, "FS.RemoveFile") \ 83025db80cSDavid Howells EM(afs_FS_CreateFile, "FS.CreateFile") \ 84025db80cSDavid Howells EM(afs_FS_Rename, "FS.Rename") \ 85025db80cSDavid Howells EM(afs_FS_Symlink, "FS.Symlink") \ 86025db80cSDavid Howells EM(afs_FS_Link, "FS.Link") \ 87025db80cSDavid Howells EM(afs_FS_MakeDir, "FS.MakeDir") \ 88025db80cSDavid Howells EM(afs_FS_RemoveDir, "FS.RemoveDir") \ 89025db80cSDavid Howells EM(afs_FS_GetVolumeInfo, "FS.GetVolumeInfo") \ 90025db80cSDavid Howells EM(afs_FS_GetVolumeStatus, "FS.GetVolumeStatus") \ 91025db80cSDavid Howells EM(afs_FS_GetRootVolume, "FS.GetRootVolume") \ 92025db80cSDavid Howells EM(afs_FS_SetLock, "FS.SetLock") \ 93025db80cSDavid Howells EM(afs_FS_ExtendLock, "FS.ExtendLock") \ 94025db80cSDavid Howells EM(afs_FS_ReleaseLock, "FS.ReleaseLock") \ 95025db80cSDavid Howells EM(afs_FS_Lookup, "FS.Lookup") \ 96025db80cSDavid Howells EM(afs_FS_FetchData64, "FS.FetchData64") \ 97025db80cSDavid Howells EM(afs_FS_StoreData64, "FS.StoreData64") \ 98025db80cSDavid Howells EM(afs_FS_GiveUpAllCallBacks, "FS.GiveUpAllCallBacks") \ 99025db80cSDavid Howells E_(afs_FS_GetCapabilities, "FS.GetCapabilities") 100025db80cSDavid Howells 101025db80cSDavid Howells #define afs_vl_operations \ 102025db80cSDavid Howells EM(afs_VL_GetEntryByNameU, "VL.GetEntryByNameU") \ 103025db80cSDavid Howells EM(afs_VL_GetAddrsU, "VL.GetAddrsU") \ 104025db80cSDavid Howells EM(afs_YFSVL_GetEndpoints, "YFSVL.GetEndpoints") \ 105025db80cSDavid Howells E_(afs_VL_GetCapabilities, "VL.GetCapabilities") 106025db80cSDavid Howells 107025db80cSDavid Howells 108341f741fSDavid Howells /* 109341f741fSDavid Howells * Export enum symbols via userspace. 110341f741fSDavid Howells */ 111341f741fSDavid Howells #undef EM 112341f741fSDavid Howells #undef E_ 113341f741fSDavid Howells #define EM(a, b) TRACE_DEFINE_ENUM(a); 114341f741fSDavid Howells #define E_(a, b) TRACE_DEFINE_ENUM(a); 115341f741fSDavid Howells 116341f741fSDavid Howells afs_call_traces; 117025db80cSDavid Howells afs_fs_operations; 118025db80cSDavid Howells afs_vl_operations; 119341f741fSDavid Howells 120341f741fSDavid Howells /* 121341f741fSDavid Howells * Now redefine the EM() and E_() macros to map the enums to the strings that 122341f741fSDavid Howells * will be printed in the output. 123341f741fSDavid Howells */ 124341f741fSDavid Howells #undef EM 125341f741fSDavid Howells #undef E_ 126341f741fSDavid Howells #define EM(a, b) { a, b }, 127341f741fSDavid Howells #define E_(a, b) { a, b } 128341f741fSDavid Howells 1298e8d7f13SDavid Howells TRACE_EVENT(afs_recv_data, 1308e8d7f13SDavid Howells TP_PROTO(struct afs_call *call, unsigned count, unsigned offset, 1318e8d7f13SDavid Howells bool want_more, int ret), 1328e8d7f13SDavid Howells 1338e8d7f13SDavid Howells TP_ARGS(call, count, offset, want_more, ret), 1348e8d7f13SDavid Howells 1358e8d7f13SDavid Howells TP_STRUCT__entry( 136a25e21f0SDavid Howells __field(unsigned int, call ) 1378e8d7f13SDavid Howells __field(enum afs_call_state, state ) 1388e8d7f13SDavid Howells __field(unsigned int, count ) 1398e8d7f13SDavid Howells __field(unsigned int, offset ) 1408e8d7f13SDavid Howells __field(unsigned short, unmarshall ) 1418e8d7f13SDavid Howells __field(bool, want_more ) 1428e8d7f13SDavid Howells __field(int, ret ) 1438e8d7f13SDavid Howells ), 1448e8d7f13SDavid Howells 1458e8d7f13SDavid Howells TP_fast_assign( 146a25e21f0SDavid Howells __entry->call = call->debug_id; 1478e8d7f13SDavid Howells __entry->state = call->state; 1488e8d7f13SDavid Howells __entry->unmarshall = call->unmarshall; 1498e8d7f13SDavid Howells __entry->count = count; 1508e8d7f13SDavid Howells __entry->offset = offset; 1518e8d7f13SDavid Howells __entry->want_more = want_more; 1528e8d7f13SDavid Howells __entry->ret = ret; 1538e8d7f13SDavid Howells ), 1548e8d7f13SDavid Howells 155a25e21f0SDavid Howells TP_printk("c=%08x s=%u u=%u %u/%u wm=%u ret=%d", 1568e8d7f13SDavid Howells __entry->call, 1578e8d7f13SDavid Howells __entry->state, __entry->unmarshall, 1588e8d7f13SDavid Howells __entry->offset, __entry->count, 1598e8d7f13SDavid Howells __entry->want_more, __entry->ret) 1608e8d7f13SDavid Howells ); 1618e8d7f13SDavid Howells 1628e8d7f13SDavid Howells TRACE_EVENT(afs_notify_call, 1638e8d7f13SDavid Howells TP_PROTO(struct rxrpc_call *rxcall, struct afs_call *call), 1648e8d7f13SDavid Howells 1658e8d7f13SDavid Howells TP_ARGS(rxcall, call), 1668e8d7f13SDavid Howells 1678e8d7f13SDavid Howells TP_STRUCT__entry( 168a25e21f0SDavid Howells __field(unsigned int, call ) 1698e8d7f13SDavid Howells __field(enum afs_call_state, state ) 1708e8d7f13SDavid Howells __field(unsigned short, unmarshall ) 1718e8d7f13SDavid Howells ), 1728e8d7f13SDavid Howells 1738e8d7f13SDavid Howells TP_fast_assign( 174a25e21f0SDavid Howells __entry->call = call->debug_id; 1758e8d7f13SDavid Howells __entry->state = call->state; 1768e8d7f13SDavid Howells __entry->unmarshall = call->unmarshall; 1778e8d7f13SDavid Howells ), 1788e8d7f13SDavid Howells 179a25e21f0SDavid Howells TP_printk("c=%08x s=%u u=%u", 1808e8d7f13SDavid Howells __entry->call, 1818e8d7f13SDavid Howells __entry->state, __entry->unmarshall) 1828e8d7f13SDavid Howells ); 1838e8d7f13SDavid Howells 1848e8d7f13SDavid Howells TRACE_EVENT(afs_cb_call, 1858e8d7f13SDavid Howells TP_PROTO(struct afs_call *call), 1868e8d7f13SDavid Howells 1878e8d7f13SDavid Howells TP_ARGS(call), 1888e8d7f13SDavid Howells 1898e8d7f13SDavid Howells TP_STRUCT__entry( 190a25e21f0SDavid Howells __field(unsigned int, call ) 1918e8d7f13SDavid Howells __field(const char *, name ) 1928e8d7f13SDavid Howells __field(u32, op ) 1938e8d7f13SDavid Howells ), 1948e8d7f13SDavid Howells 1958e8d7f13SDavid Howells TP_fast_assign( 196a25e21f0SDavid Howells __entry->call = call->debug_id; 1978e8d7f13SDavid Howells __entry->name = call->type->name; 1988e8d7f13SDavid Howells __entry->op = call->operation_ID; 1998e8d7f13SDavid Howells ), 2008e8d7f13SDavid Howells 201a25e21f0SDavid Howells TP_printk("c=%08x %s o=%u", 2028e8d7f13SDavid Howells __entry->call, 2038e8d7f13SDavid Howells __entry->name, 2048e8d7f13SDavid Howells __entry->op) 2058e8d7f13SDavid Howells ); 2068e8d7f13SDavid Howells 207341f741fSDavid Howells TRACE_EVENT(afs_call, 208341f741fSDavid Howells TP_PROTO(struct afs_call *call, enum afs_call_trace op, 209341f741fSDavid Howells int usage, int outstanding, const void *where), 210341f741fSDavid Howells 211341f741fSDavid Howells TP_ARGS(call, op, usage, outstanding, where), 212341f741fSDavid Howells 213341f741fSDavid Howells TP_STRUCT__entry( 214a25e21f0SDavid Howells __field(unsigned int, call ) 215341f741fSDavid Howells __field(int, op ) 216341f741fSDavid Howells __field(int, usage ) 217341f741fSDavid Howells __field(int, outstanding ) 218341f741fSDavid Howells __field(const void *, where ) 219341f741fSDavid Howells ), 220341f741fSDavid Howells 221341f741fSDavid Howells TP_fast_assign( 222a25e21f0SDavid Howells __entry->call = call->debug_id; 223341f741fSDavid Howells __entry->op = op; 224341f741fSDavid Howells __entry->usage = usage; 225341f741fSDavid Howells __entry->outstanding = outstanding; 226341f741fSDavid Howells __entry->where = where; 227341f741fSDavid Howells ), 228341f741fSDavid Howells 229a25e21f0SDavid Howells TP_printk("c=%08x %s u=%d o=%d sp=%pSR", 230341f741fSDavid Howells __entry->call, 231341f741fSDavid Howells __print_symbolic(__entry->op, afs_call_traces), 232341f741fSDavid Howells __entry->usage, 233341f741fSDavid Howells __entry->outstanding, 234341f741fSDavid Howells __entry->where) 235341f741fSDavid Howells ); 236341f741fSDavid Howells 237025db80cSDavid Howells TRACE_EVENT(afs_make_fs_call, 238025db80cSDavid Howells TP_PROTO(struct afs_call *call, const struct afs_fid *fid), 239025db80cSDavid Howells 240025db80cSDavid Howells TP_ARGS(call, fid), 241025db80cSDavid Howells 242025db80cSDavid Howells TP_STRUCT__entry( 243a25e21f0SDavid Howells __field(unsigned int, call ) 244025db80cSDavid Howells __field(enum afs_fs_operation, op ) 245025db80cSDavid Howells __field_struct(struct afs_fid, fid ) 246025db80cSDavid Howells ), 247025db80cSDavid Howells 248025db80cSDavid Howells TP_fast_assign( 249a25e21f0SDavid Howells __entry->call = call->debug_id; 250025db80cSDavid Howells __entry->op = call->operation_ID; 251025db80cSDavid Howells if (fid) { 252025db80cSDavid Howells __entry->fid = *fid; 253025db80cSDavid Howells } else { 254025db80cSDavid Howells __entry->fid.vid = 0; 255025db80cSDavid Howells __entry->fid.vnode = 0; 256025db80cSDavid Howells __entry->fid.unique = 0; 257025db80cSDavid Howells } 258025db80cSDavid Howells ), 259025db80cSDavid Howells 260a25e21f0SDavid Howells TP_printk("c=%08x %06x:%06x:%06x %s", 261025db80cSDavid Howells __entry->call, 262025db80cSDavid Howells __entry->fid.vid, 263025db80cSDavid Howells __entry->fid.vnode, 264025db80cSDavid Howells __entry->fid.unique, 265025db80cSDavid Howells __print_symbolic(__entry->op, afs_fs_operations)) 266025db80cSDavid Howells ); 267025db80cSDavid Howells 268025db80cSDavid Howells TRACE_EVENT(afs_make_vl_call, 269025db80cSDavid Howells TP_PROTO(struct afs_call *call), 270025db80cSDavid Howells 271025db80cSDavid Howells TP_ARGS(call), 272025db80cSDavid Howells 273025db80cSDavid Howells TP_STRUCT__entry( 274a25e21f0SDavid Howells __field(unsigned int, call ) 275025db80cSDavid Howells __field(enum afs_vl_operation, op ) 276025db80cSDavid Howells ), 277025db80cSDavid Howells 278025db80cSDavid Howells TP_fast_assign( 279a25e21f0SDavid Howells __entry->call = call->debug_id; 280025db80cSDavid Howells __entry->op = call->operation_ID; 281025db80cSDavid Howells ), 282025db80cSDavid Howells 283a25e21f0SDavid Howells TP_printk("c=%08x %s", 284025db80cSDavid Howells __entry->call, 285025db80cSDavid Howells __print_symbolic(__entry->op, afs_vl_operations)) 286025db80cSDavid Howells ); 287025db80cSDavid Howells 288025db80cSDavid Howells TRACE_EVENT(afs_call_done, 289025db80cSDavid Howells TP_PROTO(struct afs_call *call), 290025db80cSDavid Howells 291025db80cSDavid Howells TP_ARGS(call), 292025db80cSDavid Howells 293025db80cSDavid Howells TP_STRUCT__entry( 294a25e21f0SDavid Howells __field(unsigned int, call ) 295025db80cSDavid Howells __field(struct rxrpc_call *, rx_call ) 296025db80cSDavid Howells __field(int, ret ) 297025db80cSDavid Howells __field(u32, abort_code ) 298025db80cSDavid Howells ), 299025db80cSDavid Howells 300025db80cSDavid Howells TP_fast_assign( 301a25e21f0SDavid Howells __entry->call = call->debug_id; 302025db80cSDavid Howells __entry->rx_call = call->rxcall; 303025db80cSDavid Howells __entry->ret = call->error; 304025db80cSDavid Howells __entry->abort_code = call->abort_code; 305025db80cSDavid Howells ), 306025db80cSDavid Howells 307a25e21f0SDavid Howells TP_printk(" c=%08x ret=%d ab=%d [%p]", 308025db80cSDavid Howells __entry->call, 309025db80cSDavid Howells __entry->ret, 310025db80cSDavid Howells __entry->abort_code, 311025db80cSDavid Howells __entry->rx_call) 312025db80cSDavid Howells ); 313025db80cSDavid Howells 3142c099014SDavid Howells TRACE_EVENT(afs_send_pages, 3152c099014SDavid Howells TP_PROTO(struct afs_call *call, struct msghdr *msg, 3162c099014SDavid Howells pgoff_t first, pgoff_t last, unsigned int offset), 3172c099014SDavid Howells 3182c099014SDavid Howells TP_ARGS(call, msg, first, last, offset), 3192c099014SDavid Howells 3202c099014SDavid Howells TP_STRUCT__entry( 321a25e21f0SDavid Howells __field(unsigned int, call ) 3222c099014SDavid Howells __field(pgoff_t, first ) 3232c099014SDavid Howells __field(pgoff_t, last ) 3242c099014SDavid Howells __field(unsigned int, nr ) 3252c099014SDavid Howells __field(unsigned int, bytes ) 3262c099014SDavid Howells __field(unsigned int, offset ) 3272c099014SDavid Howells __field(unsigned int, flags ) 3282c099014SDavid Howells ), 3292c099014SDavid Howells 3302c099014SDavid Howells TP_fast_assign( 331a25e21f0SDavid Howells __entry->call = call->debug_id; 3322c099014SDavid Howells __entry->first = first; 3332c099014SDavid Howells __entry->last = last; 3342c099014SDavid Howells __entry->nr = msg->msg_iter.nr_segs; 3352c099014SDavid Howells __entry->bytes = msg->msg_iter.count; 3362c099014SDavid Howells __entry->offset = offset; 3372c099014SDavid Howells __entry->flags = msg->msg_flags; 3382c099014SDavid Howells ), 3392c099014SDavid Howells 340a25e21f0SDavid Howells TP_printk(" c=%08x %lx-%lx-%lx b=%x o=%x f=%x", 3412c099014SDavid Howells __entry->call, 3422c099014SDavid Howells __entry->first, __entry->first + __entry->nr - 1, __entry->last, 3432c099014SDavid Howells __entry->bytes, __entry->offset, 3442c099014SDavid Howells __entry->flags) 3452c099014SDavid Howells ); 3462c099014SDavid Howells 3472c099014SDavid Howells TRACE_EVENT(afs_sent_pages, 3482c099014SDavid Howells TP_PROTO(struct afs_call *call, pgoff_t first, pgoff_t last, 3492c099014SDavid Howells pgoff_t cursor, int ret), 3502c099014SDavid Howells 3512c099014SDavid Howells TP_ARGS(call, first, last, cursor, ret), 3522c099014SDavid Howells 3532c099014SDavid Howells TP_STRUCT__entry( 354a25e21f0SDavid Howells __field(unsigned int, call ) 3552c099014SDavid Howells __field(pgoff_t, first ) 3562c099014SDavid Howells __field(pgoff_t, last ) 3572c099014SDavid Howells __field(pgoff_t, cursor ) 3582c099014SDavid Howells __field(int, ret ) 3592c099014SDavid Howells ), 3602c099014SDavid Howells 3612c099014SDavid Howells TP_fast_assign( 362a25e21f0SDavid Howells __entry->call = call->debug_id; 3632c099014SDavid Howells __entry->first = first; 3642c099014SDavid Howells __entry->last = last; 3652c099014SDavid Howells __entry->cursor = cursor; 3662c099014SDavid Howells __entry->ret = ret; 3672c099014SDavid Howells ), 3682c099014SDavid Howells 369a25e21f0SDavid Howells TP_printk(" c=%08x %lx-%lx c=%lx r=%d", 3702c099014SDavid Howells __entry->call, 3712c099014SDavid Howells __entry->first, __entry->last, 3722c099014SDavid Howells __entry->cursor, __entry->ret) 3732c099014SDavid Howells ); 3742c099014SDavid Howells 375dab17c1aSDavid Howells TRACE_EVENT(afs_dir_check_failed, 376dab17c1aSDavid Howells TP_PROTO(struct afs_vnode *vnode, loff_t off, loff_t i_size), 377dab17c1aSDavid Howells 378dab17c1aSDavid Howells TP_ARGS(vnode, off, i_size), 379dab17c1aSDavid Howells 380dab17c1aSDavid Howells TP_STRUCT__entry( 381dab17c1aSDavid Howells __field(struct afs_vnode *, vnode ) 382dab17c1aSDavid Howells __field(loff_t, off ) 383dab17c1aSDavid Howells __field(loff_t, i_size ) 384dab17c1aSDavid Howells ), 385dab17c1aSDavid Howells 386dab17c1aSDavid Howells TP_fast_assign( 387dab17c1aSDavid Howells __entry->vnode = vnode; 388dab17c1aSDavid Howells __entry->off = off; 389dab17c1aSDavid Howells __entry->i_size = i_size; 390dab17c1aSDavid Howells ), 391dab17c1aSDavid Howells 392dab17c1aSDavid Howells TP_printk("vn=%p %llx/%llx", 393dab17c1aSDavid Howells __entry->vnode, __entry->off, __entry->i_size) 394dab17c1aSDavid Howells ); 395dab17c1aSDavid Howells 39613524ab3SDavid Howells /* 39713524ab3SDavid Howells * We use page->private to hold the amount of the page that we've written to, 39813524ab3SDavid Howells * splitting the field into two parts. However, we need to represent a range 39913524ab3SDavid Howells * 0...PAGE_SIZE inclusive, so we can't support 64K pages on a 32-bit system. 40013524ab3SDavid Howells */ 40113524ab3SDavid Howells #if PAGE_SIZE > 32768 40213524ab3SDavid Howells #define AFS_PRIV_MAX 0xffffffff 40313524ab3SDavid Howells #define AFS_PRIV_SHIFT 32 40413524ab3SDavid Howells #else 40513524ab3SDavid Howells #define AFS_PRIV_MAX 0xffff 40613524ab3SDavid Howells #define AFS_PRIV_SHIFT 16 40713524ab3SDavid Howells #endif 40813524ab3SDavid Howells 40913524ab3SDavid Howells TRACE_EVENT(afs_page_dirty, 41013524ab3SDavid Howells TP_PROTO(struct afs_vnode *vnode, const char *where, 41113524ab3SDavid Howells pgoff_t page, unsigned long priv), 41213524ab3SDavid Howells 41313524ab3SDavid Howells TP_ARGS(vnode, where, page, priv), 41413524ab3SDavid Howells 41513524ab3SDavid Howells TP_STRUCT__entry( 41613524ab3SDavid Howells __field(struct afs_vnode *, vnode ) 41713524ab3SDavid Howells __field(const char *, where ) 41813524ab3SDavid Howells __field(pgoff_t, page ) 41913524ab3SDavid Howells __field(unsigned long, priv ) 42013524ab3SDavid Howells ), 42113524ab3SDavid Howells 42213524ab3SDavid Howells TP_fast_assign( 42313524ab3SDavid Howells __entry->vnode = vnode; 42413524ab3SDavid Howells __entry->where = where; 42513524ab3SDavid Howells __entry->page = page; 42613524ab3SDavid Howells __entry->priv = priv; 42713524ab3SDavid Howells ), 42813524ab3SDavid Howells 42913524ab3SDavid Howells TP_printk("vn=%p %lx %s %lu-%lu", 43013524ab3SDavid Howells __entry->vnode, __entry->page, __entry->where, 43113524ab3SDavid Howells __entry->priv & AFS_PRIV_MAX, 43213524ab3SDavid Howells __entry->priv >> AFS_PRIV_SHIFT) 43313524ab3SDavid Howells ); 43413524ab3SDavid Howells 43598bf40cdSDavid Howells TRACE_EVENT(afs_call_state, 43698bf40cdSDavid Howells TP_PROTO(struct afs_call *call, 43798bf40cdSDavid Howells enum afs_call_state from, 43898bf40cdSDavid Howells enum afs_call_state to, 43998bf40cdSDavid Howells int ret, u32 remote_abort), 44098bf40cdSDavid Howells 44198bf40cdSDavid Howells TP_ARGS(call, from, to, ret, remote_abort), 44298bf40cdSDavid Howells 44398bf40cdSDavid Howells TP_STRUCT__entry( 444a25e21f0SDavid Howells __field(unsigned int, call ) 44598bf40cdSDavid Howells __field(enum afs_call_state, from ) 44698bf40cdSDavid Howells __field(enum afs_call_state, to ) 44798bf40cdSDavid Howells __field(int, ret ) 44898bf40cdSDavid Howells __field(u32, abort ) 44998bf40cdSDavid Howells ), 45098bf40cdSDavid Howells 45198bf40cdSDavid Howells TP_fast_assign( 452a25e21f0SDavid Howells __entry->call = call->debug_id; 45398bf40cdSDavid Howells __entry->from = from; 45498bf40cdSDavid Howells __entry->to = to; 45598bf40cdSDavid Howells __entry->ret = ret; 45698bf40cdSDavid Howells __entry->abort = remote_abort; 45798bf40cdSDavid Howells ), 45898bf40cdSDavid Howells 459a25e21f0SDavid Howells TP_printk("c=%08x %u->%u r=%d ab=%d", 46098bf40cdSDavid Howells __entry->call, 46198bf40cdSDavid Howells __entry->from, __entry->to, 46298bf40cdSDavid Howells __entry->ret, __entry->abort) 46398bf40cdSDavid Howells ); 46498bf40cdSDavid Howells 4658e8d7f13SDavid Howells #endif /* _TRACE_AFS_H */ 4668e8d7f13SDavid Howells 4678e8d7f13SDavid Howells /* This part must be outside protection */ 4688e8d7f13SDavid Howells #include <trace/define_trace.h> 469