| 1 |
|
| 2 | |
| 3 | *
|
| 4 | * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
|
| 5 | * Written by David Howells ([email protected])
|
| 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 |
|
| 21 | enum cachefiles_obj_ref_trace {
|
| 22 | cachefiles_obj_get_ioreq,
|
| 23 | cachefiles_obj_new,
|
| 24 | cachefiles_obj_put_alloc_fail,
|
| 25 | cachefiles_obj_put_detach,
|
| 26 | cachefiles_obj_put_ioreq,
|
| 27 | cachefiles_obj_see_clean_commit,
|
| 28 | cachefiles_obj_see_clean_delete,
|
| 29 | cachefiles_obj_see_clean_drop_tmp,
|
| 30 | cachefiles_obj_see_lookup_cookie,
|
| 31 | cachefiles_obj_see_lookup_failed,
|
| 32 | cachefiles_obj_see_withdraw_cookie,
|
| 33 | cachefiles_obj_see_withdrawal,
|
| 34 | };
|
| 35 |
|
| 36 | enum fscache_why_object_killed {
|
| 37 | FSCACHE_OBJECT_IS_STALE,
|
| 38 | FSCACHE_OBJECT_IS_WEIRD,
|
| 39 | FSCACHE_OBJECT_INVALIDATED,
|
| 40 | FSCACHE_OBJECT_NO_SPACE,
|
| 41 | FSCACHE_OBJECT_WAS_RETIRED,
|
| 42 | FSCACHE_OBJECT_WAS_CULLED,
|
| 43 | FSCACHE_VOLUME_IS_WEIRD,
|
| 44 | };
|
| 45 |
|
| 46 | enum cachefiles_coherency_trace {
|
| 47 | cachefiles_coherency_check_aux,
|
| 48 | cachefiles_coherency_check_content,
|
| 49 | cachefiles_coherency_check_dirty,
|
| 50 | cachefiles_coherency_check_len,
|
| 51 | cachefiles_coherency_check_objsize,
|
| 52 | cachefiles_coherency_check_ok,
|
| 53 | cachefiles_coherency_check_type,
|
| 54 | cachefiles_coherency_check_xattr,
|
| 55 | cachefiles_coherency_discontiguous,
|
| 56 | cachefiles_coherency_remove,
|
| 57 | cachefiles_coherency_set_fail,
|
| 58 | cachefiles_coherency_set_ok,
|
| 59 | cachefiles_coherency_vol_check_cmp,
|
| 60 | cachefiles_coherency_vol_check_ok,
|
| 61 | cachefiles_coherency_vol_check_resv,
|
| 62 | cachefiles_coherency_vol_check_xattr,
|
| 63 | cachefiles_coherency_vol_set_fail,
|
| 64 | cachefiles_coherency_vol_set_ok,
|
| 65 | };
|
| 66 |
|
| 67 | enum cachefiles_trunc_trace {
|
| 68 | cachefiles_trunc_clear_padding,
|
| 69 | cachefiles_trunc_dio_adjust,
|
| 70 | cachefiles_trunc_expand_tmpfile,
|
| 71 | cachefiles_trunc_shrink,
|
| 72 | cachefiles_trunc_zap,
|
| 73 | };
|
| 74 |
|
| 75 | enum cachefiles_prepare_read_trace {
|
| 76 | cachefiles_trace_read_after_eof,
|
| 77 | cachefiles_trace_read_found_hole,
|
| 78 | cachefiles_trace_read_found_part,
|
| 79 | cachefiles_trace_read_have_data,
|
| 80 | cachefiles_trace_read_no_data,
|
| 81 | cachefiles_trace_read_no_file,
|
| 82 | cachefiles_trace_read_seek_error,
|
| 83 | cachefiles_trace_read_seek_nxio,
|
| 84 | };
|
| 85 |
|
| 86 | enum cachefiles_error_trace {
|
| 87 | cachefiles_trace_alignment_error,
|
| 88 | cachefiles_trace_create_nospace,
|
| 89 | cachefiles_trace_fallocate_error,
|
| 90 | cachefiles_trace_getxattr_error,
|
| 91 | cachefiles_trace_link_error,
|
| 92 | cachefiles_trace_lookup_error,
|
| 93 | cachefiles_trace_mkdir_error,
|
| 94 | cachefiles_trace_mkdir_nospace,
|
| 95 | cachefiles_trace_notify_change_error,
|
| 96 | cachefiles_trace_open_error,
|
| 97 | cachefiles_trace_read_error,
|
| 98 | cachefiles_trace_remxattr_error,
|
| 99 | cachefiles_trace_rename_error,
|
| 100 | cachefiles_trace_seek_error,
|
| 101 | cachefiles_trace_setxattr_error,
|
| 102 | cachefiles_trace_statfs_error,
|
| 103 | cachefiles_trace_tmpfile_error,
|
| 104 | cachefiles_trace_trunc_error,
|
| 105 | cachefiles_trace_unlink_error,
|
| 106 | cachefiles_trace_write_error,
|
| 107 | cachefiles_trace_write_nospace,
|
| 108 | cachefiles_trace_write_nospace_2,
|
| 109 | };
|
| 110 |
|
| 111 | #endif
|
| 112 |
|
| 113 | |
| 114 | * Define enum -> string mappings for display.
|
| 115 |
|
| 116 | #define cachefiles_obj_kill_traces \
|
| 117 | EM(FSCACHE_OBJECT_IS_STALE, "stale") \
|
| 118 | EM(FSCACHE_OBJECT_IS_WEIRD, "weird") \
|
| 119 | EM(FSCACHE_OBJECT_INVALIDATED, "inval") \
|
| 120 | EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \
|
| 121 | EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
|
| 122 | EM(FSCACHE_OBJECT_WAS_CULLED, "was_culled") \
|
| 123 | E_(FSCACHE_VOLUME_IS_WEIRD, "volume_weird")
|
| 124 |
|
| 125 | #define cachefiles_obj_ref_traces \
|
| 126 | EM(cachefiles_obj_get_ioreq, "GET ioreq") \
|
| 127 | EM(cachefiles_obj_new, "NEW obj") \
|
| 128 | EM(cachefiles_obj_put_alloc_fail, "PUT alloc_fail") \
|
| 129 | EM(cachefiles_obj_put_detach, "PUT detach") \
|
| 130 | EM(cachefiles_obj_put_ioreq, "PUT ioreq") \
|
| 131 | EM(cachefiles_obj_see_clean_commit, "SEE clean_commit") \
|
| 132 | EM(cachefiles_obj_see_clean_delete, "SEE clean_delete") \
|
| 133 | EM(cachefiles_obj_see_clean_drop_tmp, "SEE clean_drop_tmp") \
|
| 134 | EM(cachefiles_obj_see_lookup_cookie, "SEE lookup_cookie") \
|
| 135 | EM(cachefiles_obj_see_lookup_failed, "SEE lookup_failed") \
|
| 136 | EM(cachefiles_obj_see_withdraw_cookie, "SEE withdraw_cookie") \
|
| 137 | E_(cachefiles_obj_see_withdrawal, "SEE withdrawal")
|
| 138 |
|
| 139 | #define cachefiles_coherency_traces \
|
| 140 | EM(cachefiles_coherency_check_aux, "BAD aux ") \
|
| 141 | EM(cachefiles_coherency_check_content, "BAD cont") \
|
| 142 | EM(cachefiles_coherency_check_dirty, "BAD dirt") \
|
| 143 | EM(cachefiles_coherency_check_len, "BAD len ") \
|
| 144 | EM(cachefiles_coherency_check_objsize, "BAD osiz") \
|
| 145 | EM(cachefiles_coherency_check_ok, "OK ") \
|
| 146 | EM(cachefiles_coherency_check_type, "BAD type") \
|
| 147 | EM(cachefiles_coherency_check_xattr, "BAD xatt") \
|
| 148 | EM(cachefiles_coherency_discontiguous, "--- gap ") \
|
| 149 | EM(cachefiles_coherency_remove, "REMOVE ") \
|
| 150 | EM(cachefiles_coherency_set_fail, "SET fail") \
|
| 151 | EM(cachefiles_coherency_set_ok, "SET ok ") \
|
| 152 | EM(cachefiles_coherency_vol_check_cmp, "VOL BAD cmp ") \
|
| 153 | EM(cachefiles_coherency_vol_check_ok, "VOL OK ") \
|
| 154 | EM(cachefiles_coherency_vol_check_resv, "VOL BAD resv") \
|
| 155 | EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt") \
|
| 156 | EM(cachefiles_coherency_vol_set_fail, "VOL SET fail") \
|
| 157 | E_(cachefiles_coherency_vol_set_ok, "VOL SET ok ")
|
| 158 |
|
| 159 | #define cachefiles_trunc_traces \
|
| 160 | EM(cachefiles_trunc_clear_padding, "CLRPAD") \
|
| 161 | EM(cachefiles_trunc_dio_adjust, "DIOADJ") \
|
| 162 | EM(cachefiles_trunc_expand_tmpfile, "EXPTMP") \
|
| 163 | EM(cachefiles_trunc_shrink, "SHRINK") \
|
| 164 | E_(cachefiles_trunc_zap, "ZAP ")
|
| 165 |
|
| 166 | #define cachefiles_prepare_read_traces \
|
| 167 | EM(cachefiles_trace_read_after_eof, "after-eof ") \
|
| 168 | EM(cachefiles_trace_read_found_hole, "found-hole") \
|
| 169 | EM(cachefiles_trace_read_found_part, "found-part") \
|
| 170 | EM(cachefiles_trace_read_have_data, "have-data ") \
|
| 171 | EM(cachefiles_trace_read_no_data, "no-data ") \
|
| 172 | EM(cachefiles_trace_read_no_file, "no-file ") \
|
| 173 | EM(cachefiles_trace_read_seek_error, "seek-error") \
|
| 174 | E_(cachefiles_trace_read_seek_nxio, "seek-enxio")
|
| 175 |
|
| 176 | #define cachefiles_error_traces \
|
| 177 | EM(cachefiles_trace_alignment_error, "align") \
|
| 178 | EM(cachefiles_trace_create_nospace, "create-nospace") \
|
| 179 | EM(cachefiles_trace_fallocate_error, "fallocate") \
|
| 180 | EM(cachefiles_trace_getxattr_error, "getxattr") \
|
| 181 | EM(cachefiles_trace_link_error, "link") \
|
| 182 | EM(cachefiles_trace_lookup_error, "lookup") \
|
| 183 | EM(cachefiles_trace_mkdir_error, "mkdir") \
|
| 184 | EM(cachefiles_trace_mkdir_nospace, "mkdir-nospace") \
|
| 185 | EM(cachefiles_trace_notify_change_error, "notify_change") \
|
| 186 | EM(cachefiles_trace_open_error, "open") \
|
| 187 | EM(cachefiles_trace_read_error, "read") \
|
| 188 | EM(cachefiles_trace_remxattr_error, "remxattr") \
|
| 189 | EM(cachefiles_trace_rename_error, "rename") \
|
| 190 | EM(cachefiles_trace_seek_error, "seek") \
|
| 191 | EM(cachefiles_trace_setxattr_error, "setxattr") \
|
| 192 | EM(cachefiles_trace_statfs_error, "statfs") \
|
| 193 | EM(cachefiles_trace_tmpfile_error, "tmpfile") \
|
| 194 | EM(cachefiles_trace_trunc_error, "trunc") \
|
| 195 | EM(cachefiles_trace_unlink_error, "unlink") \
|
| 196 | EM(cachefiles_trace_write_error, "write") \
|
| 197 | EM(cachefiles_trace_write_nospace, "write-nospace") \
|
| 198 | E_(cachefiles_trace_write_nospace_2, "write-nospace-2")
|
| 199 |
|
| 200 |
|
| 201 | |
| 202 | * Export enum symbols via userspace.
|
| 203 |
|
| 204 | #undef EM
|
| 205 | #undef E_
|
| 206 | #define EM(a, b) TRACE_DEFINE_ENUM(a);
|
| 207 | #define E_(a, b) TRACE_DEFINE_ENUM(a);
|
| 208 |
|
| 209 | cachefiles_obj_kill_traces;
|
| 210 | cachefiles_obj_ref_traces;
|
| 211 | cachefiles_coherency_traces;
|
| 212 | cachefiles_trunc_traces;
|
| 213 | cachefiles_prepare_read_traces;
|
| 214 | cachefiles_error_traces;
|
| 215 |
|
| 216 | |
| 217 | * Now redefine the EM() and E_() macros to map the enums to the strings that
|
| 218 | * will be printed in the output.
|
| 219 |
|
| 220 | #undef EM
|
| 221 | #undef E_
|
| 222 | #define EM(a, b) { a, b },
|
| 223 | #define E_(a, b) { a, b }
|
| 224 |
|
| 225 |
|
| 226 | TRACE_EVENT(cachefiles_ref,
|
| 227 | TP_PROTO(unsigned int object_debug_id,
|
| 228 | unsigned int cookie_debug_id,
|
| 229 | int usage,
|
| 230 | enum cachefiles_obj_ref_trace why),
|
| 231 |
|
| 232 | TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
|
| 233 |
|
| 234 |
|
| 235 | TP_STRUCT__entry(
|
| 236 | __field(unsigned int, obj)
|
| 237 | __field(unsigned int, cookie)
|
| 238 | __field(enum cachefiles_obj_ref_trace, why)
|
| 239 | __field(int, usage)
|
| 240 | ),
|
| 241 |
|
| 242 | TP_fast_assign(
|
| 243 | __entry->obj = object_debug_id;
|
| 244 | __entry->cookie = cookie_debug_id;
|
| 245 | __entry->usage = usage;
|
| 246 | __entry->why = why;
|
| 247 | ),
|
| 248 |
|
| 249 | TP_printk("c=%08x o=%08x u=%d %s",
|
| 250 | __entry->cookie, __entry->obj, __entry->usage,
|
| 251 | __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
|
| 252 | );
|
| 253 |
|
| 254 | TRACE_EVENT(cachefiles_lookup,
|
| 255 | TP_PROTO(struct cachefiles_object *obj,
|
| 256 | struct dentry *dir,
|
| 257 | struct dentry *de),
|
| 258 |
|
| 259 | TP_ARGS(obj, dir, de),
|
| 260 |
|
| 261 | TP_STRUCT__entry(
|
| 262 | __field(u64, dino)
|
| 263 | __field(u64, ino)
|
| 264 | __field(unsigned int, obj)
|
| 265 | __field(short, error)
|
| 266 | ),
|
| 267 |
|
| 268 | TP_fast_assign(
|
| 269 | __entry->obj = obj ? obj->debug_id : 0;
|
| 270 | __entry->dino = d_backing_inode(dir)->i_ino;
|
| 271 | __entry->ino = (!IS_ERR(de) && d_backing_inode(de) ?
|
| 272 | d_backing_inode(de)->i_ino : 0);
|
| 273 | __entry->error = IS_ERR(de) ? PTR_ERR(de) : 0;
|
| 274 | ),
|
| 275 |
|
| 276 | TP_printk("o=%08x dB=%llx B=%llx e=%d",
|
| 277 | __entry->obj, __entry->dino, __entry->ino, __entry->error)
|
| 278 | );
|
| 279 |
|
| 280 | TRACE_EVENT(cachefiles_mkdir,
|
| 281 | TP_PROTO(struct dentry *dir, struct dentry *subdir),
|
| 282 |
|
| 283 | TP_ARGS(dir, subdir),
|
| 284 |
|
| 285 | TP_STRUCT__entry(
|
| 286 | __field(unsigned int, dir)
|
| 287 | __field(unsigned int, subdir)
|
| 288 | ),
|
| 289 |
|
| 290 | TP_fast_assign(
|
| 291 | __entry->dir = d_backing_inode(dir)->i_ino;
|
| 292 | __entry->subdir = d_backing_inode(subdir)->i_ino;
|
| 293 | ),
|
| 294 |
|
| 295 | TP_printk("dB=%x sB=%x",
|
| 296 | __entry->dir,
|
| 297 | __entry->subdir)
|
| 298 | );
|
| 299 |
|
| 300 | TRACE_EVENT(cachefiles_tmpfile,
|
| 301 | TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
|
| 302 |
|
| 303 | TP_ARGS(obj, backer),
|
| 304 |
|
| 305 | TP_STRUCT__entry(
|
| 306 | __field(unsigned int, obj)
|
| 307 | __field(unsigned int, backer)
|
| 308 | ),
|
| 309 |
|
| 310 | TP_fast_assign(
|
| 311 | __entry->obj = obj->debug_id;
|
| 312 | __entry->backer = backer->i_ino;
|
| 313 | ),
|
| 314 |
|
| 315 | TP_printk("o=%08x B=%x",
|
| 316 | __entry->obj,
|
| 317 | __entry->backer)
|
| 318 | );
|
| 319 |
|
| 320 | TRACE_EVENT(cachefiles_link,
|
| 321 | TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
|
| 322 |
|
| 323 | TP_ARGS(obj, backer),
|
| 324 |
|
| 325 | TP_STRUCT__entry(
|
| 326 | __field(unsigned int, obj)
|
| 327 | __field(unsigned int, backer)
|
| 328 | ),
|
| 329 |
|
| 330 | TP_fast_assign(
|
| 331 | __entry->obj = obj->debug_id;
|
| 332 | __entry->backer = backer->i_ino;
|
| 333 | ),
|
| 334 |
|
| 335 | TP_printk("o=%08x B=%x",
|
| 336 | __entry->obj,
|
| 337 | __entry->backer)
|
| 338 | );
|
| 339 |
|
| 340 | TRACE_EVENT(cachefiles_unlink,
|
| 341 | TP_PROTO(struct cachefiles_object *obj,
|
| 342 | ino_t ino,
|
| 343 | enum fscache_why_object_killed why),
|
| 344 |
|
| 345 | TP_ARGS(obj, ino, why),
|
| 346 |
|
| 347 |
|
| 348 | TP_STRUCT__entry(
|
| 349 | __field(unsigned int, obj)
|
| 350 | __field(unsigned int, ino)
|
| 351 | __field(enum fscache_why_object_killed, why)
|
| 352 | ),
|
| 353 |
|
| 354 | TP_fast_assign(
|
| 355 | __entry->obj = obj ? obj->debug_id : UINT_MAX;
|
| 356 | __entry->ino = ino;
|
| 357 | __entry->why = why;
|
| 358 | ),
|
| 359 |
|
| 360 | TP_printk("o=%08x B=%x w=%s",
|
| 361 | __entry->obj, __entry->ino,
|
| 362 | __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
| 363 | );
|
| 364 |
|
| 365 | TRACE_EVENT(cachefiles_rename,
|
| 366 | TP_PROTO(struct cachefiles_object *obj,
|
| 367 | ino_t ino,
|
| 368 | enum fscache_why_object_killed why),
|
| 369 |
|
| 370 | TP_ARGS(obj, ino, why),
|
| 371 |
|
| 372 |
|
| 373 | TP_STRUCT__entry(
|
| 374 | __field(unsigned int, obj)
|
| 375 | __field(unsigned int, ino)
|
| 376 | __field(enum fscache_why_object_killed, why)
|
| 377 | ),
|
| 378 |
|
| 379 | TP_fast_assign(
|
| 380 | __entry->obj = obj ? obj->debug_id : UINT_MAX;
|
| 381 | __entry->ino = ino;
|
| 382 | __entry->why = why;
|
| 383 | ),
|
| 384 |
|
| 385 | TP_printk("o=%08x B=%x w=%s",
|
| 386 | __entry->obj, __entry->ino,
|
| 387 | __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
|
| 388 | );
|
| 389 |
|
| 390 | TRACE_EVENT(cachefiles_coherency,
|
| 391 | TP_PROTO(struct cachefiles_object *obj,
|
| 392 | ino_t ino, uoff_t obj_size,
|
| 393 | const void *disk_aux,
|
| 394 | enum cachefiles_content content,
|
| 395 | enum cachefiles_coherency_trace why),
|
| 396 |
|
| 397 | TP_ARGS(obj, ino, obj_size, disk_aux, content, why),
|
| 398 |
|
| 399 |
|
| 400 | TP_STRUCT__entry(
|
| 401 | __field(unsigned int, obj)
|
| 402 | __field(enum cachefiles_coherency_trace, why)
|
| 403 | __field(enum cachefiles_content, content)
|
| 404 | __field(u64, ino)
|
| 405 | __field(u64, obj_size)
|
| 406 | __field(u64, aux)
|
| 407 | __field(u64, disk_aux)
|
| 408 | ),
|
| 409 |
|
| 410 | TP_fast_assign(
|
| 411 | union {
|
| 412 | __be16 s[4];
|
| 413 | __be64 ll;
|
| 414 | } x;
|
| 415 |
|
| 416 | __entry->obj = obj->debug_id;
|
| 417 | __entry->why = why;
|
| 418 | __entry->content = content;
|
| 419 | __entry->ino = ino;
|
| 420 | __entry->obj_size = obj_size;
|
| 421 | __entry->aux = be64_to_cpup((__be64 *)obj->cookie->inline_aux);
|
| 422 |
|
| 423 |
|
| 424 | if (disk_aux) {
|
| 425 | x.s[0] = ((__be16 *)disk_aux)[0];
|
| 426 | x.s[1] = ((__be16 *)disk_aux)[1];
|
| 427 | x.s[2] = ((__be16 *)disk_aux)[2];
|
| 428 | x.s[3] = ((__be16 *)disk_aux)[3];
|
| 429 | __entry->disk_aux = be64_to_cpu(x.ll);
|
| 430 | } else {
|
| 431 | __entry->disk_aux = 0;
|
| 432 | }
|
| 433 | ),
|
| 434 |
|
| 435 | TP_printk("o=%08x %s B=%llx oz=%llx c=%u aux=%llx dsk=%llx",
|
| 436 | __entry->obj,
|
| 437 | __print_symbolic(__entry->why, cachefiles_coherency_traces),
|
| 438 | __entry->ino,
|
| 439 | __entry->obj_size,
|
| 440 | __entry->content,
|
| 441 | __entry->aux,
|
| 442 | __entry->disk_aux)
|
| 443 | );
|
| 444 |
|
| 445 | TRACE_EVENT(cachefiles_vol_coherency,
|
| 446 | TP_PROTO(struct cachefiles_volume *volume,
|
| 447 | ino_t ino,
|
| 448 | enum cachefiles_coherency_trace why),
|
| 449 |
|
| 450 | TP_ARGS(volume, ino, why),
|
| 451 |
|
| 452 |
|
| 453 | TP_STRUCT__entry(
|
| 454 | __field(unsigned int, vol)
|
| 455 | __field(enum cachefiles_coherency_trace, why)
|
| 456 | __field(u64, ino)
|
| 457 | ),
|
| 458 |
|
| 459 | TP_fast_assign(
|
| 460 | __entry->vol = volume->vcookie->debug_id;
|
| 461 | __entry->why = why;
|
| 462 | __entry->ino = ino;
|
| 463 | ),
|
| 464 |
|
| 465 | TP_printk("V=%08x %s B=%llx",
|
| 466 | __entry->vol,
|
| 467 | __print_symbolic(__entry->why, cachefiles_coherency_traces),
|
| 468 | __entry->ino)
|
| 469 | );
|
| 470 |
|
| 471 | TRACE_EVENT(cachefiles_prep_read,
|
| 472 | TP_PROTO(struct cachefiles_object *obj,
|
| 473 | uoff_t start,
|
| 474 | size_t len,
|
| 475 | unsigned short flags,
|
| 476 | enum netfs_io_source source,
|
| 477 | enum cachefiles_prepare_read_trace why,
|
| 478 | ino_t cache_inode, ino_t netfs_inode),
|
| 479 |
|
| 480 | TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
|
| 481 |
|
| 482 | TP_STRUCT__entry(
|
| 483 | __field(unsigned int, obj)
|
| 484 | __field(unsigned short, flags)
|
| 485 | __field(enum netfs_io_source, source)
|
| 486 | __field(enum cachefiles_prepare_read_trace, why)
|
| 487 | __field(size_t, len)
|
| 488 | __field(uoff_t, start)
|
| 489 | __field(unsigned int, netfs_inode)
|
| 490 | __field(unsigned int, cache_inode)
|
| 491 | ),
|
| 492 |
|
| 493 | TP_fast_assign(
|
| 494 | __entry->obj = obj ? obj->debug_id : 0;
|
| 495 | __entry->flags = flags;
|
| 496 | __entry->source = source;
|
| 497 | __entry->why = why;
|
| 498 | __entry->len = len;
|
| 499 | __entry->start = start;
|
| 500 | __entry->netfs_inode = netfs_inode;
|
| 501 | __entry->cache_inode = cache_inode;
|
| 502 | ),
|
| 503 |
|
| 504 | TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
|
| 505 | __entry->obj,
|
| 506 | __print_symbolic(__entry->source, netfs_sreq_sources),
|
| 507 | __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
|
| 508 | __entry->flags,
|
| 509 | __entry->start, __entry->len,
|
| 510 | __entry->netfs_inode, __entry->cache_inode)
|
| 511 | );
|
| 512 |
|
| 513 | TRACE_EVENT(cachefiles_read,
|
| 514 | TP_PROTO(struct cachefiles_object *obj,
|
| 515 | struct inode *backer,
|
| 516 | uoff_t start,
|
| 517 | size_t len),
|
| 518 |
|
| 519 | TP_ARGS(obj, backer, start, len),
|
| 520 |
|
| 521 | TP_STRUCT__entry(
|
| 522 | __field(unsigned int, obj)
|
| 523 | __field(unsigned int, backer)
|
| 524 | __field(size_t, len)
|
| 525 | __field(uoff_t, start)
|
| 526 | ),
|
| 527 |
|
| 528 | TP_fast_assign(
|
| 529 | __entry->obj = obj->debug_id;
|
| 530 | __entry->backer = backer->i_ino;
|
| 531 | __entry->start = start;
|
| 532 | __entry->len = len;
|
| 533 | ),
|
| 534 |
|
| 535 | TP_printk("o=%08x B=%x s=%llx l=%zx",
|
| 536 | __entry->obj,
|
| 537 | __entry->backer,
|
| 538 | __entry->start,
|
| 539 | __entry->len)
|
| 540 | );
|
| 541 |
|
| 542 | TRACE_EVENT(cachefiles_write,
|
| 543 | TP_PROTO(struct cachefiles_object *obj,
|
| 544 | struct inode *backer,
|
| 545 | uoff_t start,
|
| 546 | size_t len),
|
| 547 |
|
| 548 | TP_ARGS(obj, backer, start, len),
|
| 549 |
|
| 550 | TP_STRUCT__entry(
|
| 551 | __field(unsigned int, obj)
|
| 552 | __field(unsigned int, backer)
|
| 553 | __field(size_t, len)
|
| 554 | __field(uoff_t, start)
|
| 555 | ),
|
| 556 |
|
| 557 | TP_fast_assign(
|
| 558 | __entry->obj = obj->debug_id;
|
| 559 | __entry->backer = backer->i_ino;
|
| 560 | __entry->start = start;
|
| 561 | __entry->len = len;
|
| 562 | ),
|
| 563 |
|
| 564 | TP_printk("o=%08x B=%x s=%llx l=%zx",
|
| 565 | __entry->obj,
|
| 566 | __entry->backer,
|
| 567 | __entry->start,
|
| 568 | __entry->len)
|
| 569 | );
|
| 570 |
|
| 571 | TRACE_EVENT(cachefiles_trunc,
|
| 572 | TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
|
| 573 | uoff_t from, uoff_t to, enum cachefiles_trunc_trace why),
|
| 574 |
|
| 575 | TP_ARGS(obj, backer, from, to, why),
|
| 576 |
|
| 577 | TP_STRUCT__entry(
|
| 578 | __field(unsigned int, obj)
|
| 579 | __field(unsigned int, backer)
|
| 580 | __field(enum cachefiles_trunc_trace, why)
|
| 581 | __field(uoff_t, from)
|
| 582 | __field(uoff_t, to)
|
| 583 | ),
|
| 584 |
|
| 585 | TP_fast_assign(
|
| 586 | __entry->obj = obj->debug_id;
|
| 587 | __entry->backer = backer->i_ino;
|
| 588 | __entry->from = from;
|
| 589 | __entry->to = to;
|
| 590 | __entry->why = why;
|
| 591 | ),
|
| 592 |
|
| 593 | TP_printk("o=%08x B=%x %s l=%llx->%llx",
|
| 594 | __entry->obj,
|
| 595 | __entry->backer,
|
| 596 | __print_symbolic(__entry->why, cachefiles_trunc_traces),
|
| 597 | __entry->from,
|
| 598 | __entry->to)
|
| 599 | );
|
| 600 |
|
| 601 | TRACE_EVENT(cachefiles_mark_active,
|
| 602 | TP_PROTO(struct cachefiles_object *obj,
|
| 603 | struct inode *inode),
|
| 604 |
|
| 605 | TP_ARGS(obj, inode),
|
| 606 |
|
| 607 |
|
| 608 | TP_STRUCT__entry(
|
| 609 | __field(u64, inode)
|
| 610 | __field(unsigned int, obj)
|
| 611 | ),
|
| 612 |
|
| 613 | TP_fast_assign(
|
| 614 | __entry->obj = obj ? obj->debug_id : 0;
|
| 615 | __entry->inode = inode->i_ino;
|
| 616 | ),
|
| 617 |
|
| 618 | TP_printk("o=%08x B=%llx",
|
| 619 | __entry->obj, __entry->inode)
|
| 620 | );
|
| 621 |
|
| 622 | TRACE_EVENT(cachefiles_mark_failed,
|
| 623 | TP_PROTO(struct cachefiles_object *obj,
|
| 624 | struct inode *inode),
|
| 625 |
|
| 626 | TP_ARGS(obj, inode),
|
| 627 |
|
| 628 |
|
| 629 | TP_STRUCT__entry(
|
| 630 | __field(u64, inode)
|
| 631 | __field(unsigned int, obj)
|
| 632 | ),
|
| 633 |
|
| 634 | TP_fast_assign(
|
| 635 | __entry->obj = obj ? obj->debug_id : 0;
|
| 636 | __entry->inode = inode->i_ino;
|
| 637 | ),
|
| 638 |
|
| 639 | TP_printk("o=%08x B=%llx",
|
| 640 | __entry->obj, __entry->inode)
|
| 641 | );
|
| 642 |
|
| 643 | TRACE_EVENT(cachefiles_mark_inactive,
|
| 644 | TP_PROTO(struct cachefiles_object *obj,
|
| 645 | struct inode *inode),
|
| 646 |
|
| 647 | TP_ARGS(obj, inode),
|
| 648 |
|
| 649 |
|
| 650 | TP_STRUCT__entry(
|
| 651 | __field(u64, inode)
|
| 652 | __field(unsigned int, obj)
|
| 653 | ),
|
| 654 |
|
| 655 | TP_fast_assign(
|
| 656 | __entry->obj = obj ? obj->debug_id : 0;
|
| 657 | __entry->inode = inode->i_ino;
|
| 658 | ),
|
| 659 |
|
| 660 | TP_printk("o=%08x B=%llx",
|
| 661 | __entry->obj, __entry->inode)
|
| 662 | );
|
| 663 |
|
| 664 | TRACE_EVENT(cachefiles_vfs_error,
|
| 665 | TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
|
| 666 | int error, enum cachefiles_error_trace where),
|
| 667 |
|
| 668 | TP_ARGS(obj, backer, error, where),
|
| 669 |
|
| 670 | TP_STRUCT__entry(
|
| 671 | __field(unsigned int, obj)
|
| 672 | __field(unsigned int, backer)
|
| 673 | __field(enum cachefiles_error_trace, where)
|
| 674 | __field(short, error)
|
| 675 | ),
|
| 676 |
|
| 677 | TP_fast_assign(
|
| 678 | __entry->obj = obj ? obj->debug_id : 0;
|
| 679 | __entry->backer = backer->i_ino;
|
| 680 | __entry->error = error;
|
| 681 | __entry->where = where;
|
| 682 | ),
|
| 683 |
|
| 684 | TP_printk("o=%08x B=%x %s e=%d",
|
| 685 | __entry->obj,
|
| 686 | __entry->backer,
|
| 687 | __print_symbolic(__entry->where, cachefiles_error_traces),
|
| 688 | __entry->error)
|
| 689 | );
|
| 690 |
|
| 691 | TRACE_EVENT(cachefiles_io_error,
|
| 692 | TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
|
| 693 | int error, enum cachefiles_error_trace where),
|
| 694 |
|
| 695 | TP_ARGS(obj, backer, error, where),
|
| 696 |
|
| 697 | TP_STRUCT__entry(
|
| 698 | __field(unsigned int, obj)
|
| 699 | __field(unsigned int, backer)
|
| 700 | __field(enum cachefiles_error_trace, where)
|
| 701 | __field(short, error)
|
| 702 | ),
|
| 703 |
|
| 704 | TP_fast_assign(
|
| 705 | __entry->obj = obj ? obj->debug_id : 0;
|
| 706 | __entry->backer = backer->i_ino;
|
| 707 | __entry->error = error;
|
| 708 | __entry->where = where;
|
| 709 | ),
|
| 710 |
|
| 711 | TP_printk("o=%08x B=%x %s e=%d",
|
| 712 | __entry->obj,
|
| 713 | __entry->backer,
|
| 714 | __print_symbolic(__entry->where, cachefiles_error_traces),
|
| 715 | __entry->error)
|
| 716 | );
|
| 717 |
|
| 718 | TRACE_EVENT(cachefiles_no_space,
|
| 719 | TP_PROTO(struct cachefiles_object *obj, enum cachefiles_error_trace trace),
|
| 720 |
|
| 721 | TP_ARGS(obj, trace),
|
| 722 |
|
| 723 | TP_STRUCT__entry(
|
| 724 | __field(unsigned int, obj)
|
| 725 | __field(enum cachefiles_error_trace, trace)
|
| 726 | ),
|
| 727 |
|
| 728 | TP_fast_assign(
|
| 729 | __entry->obj = obj ? obj->debug_id : 0;
|
| 730 | __entry->trace = trace;
|
| 731 | ),
|
| 732 |
|
| 733 | TP_printk("o=%08x %s",
|
| 734 | __entry->obj,
|
| 735 | __print_symbolic(__entry->trace, cachefiles_error_traces))
|
| 736 | );
|
| 737 |
|
| 738 | #endif
|
| 739 |
|
| 740 |
|
| 741 | #include <trace/define_trace.h>
|