Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742/* SPDX-License-Identifier: GPL-2.0-or-later *//* CacheFiles tracepoints * * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) */#undef TRACE_SYSTEM#define TRACE_SYSTEM cachefiles
#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)#define _TRACE_CACHEFILES_H
#include <linux/tracepoint.h>
/* * Define enums for tracing information. */#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
enum cachefiles_obj_ref_trace { cachefiles_obj_get_ioreq, cachefiles_obj_new, cachefiles_obj_put_alloc_fail, cachefiles_obj_put_detach, cachefiles_obj_put_ioreq, cachefiles_obj_see_clean_commit, cachefiles_obj_see_clean_delete, cachefiles_obj_see_clean_drop_tmp, cachefiles_obj_see_lookup_cookie, cachefiles_obj_see_lookup_failed, cachefiles_obj_see_withdraw_cookie, cachefiles_obj_see_withdrawal,};
enum fscache_why_object_killed { FSCACHE_OBJECT_IS_STALE, FSCACHE_OBJECT_IS_WEIRD, FSCACHE_OBJECT_INVALIDATED, FSCACHE_OBJECT_NO_SPACE, FSCACHE_OBJECT_WAS_RETIRED, FSCACHE_OBJECT_WAS_CULLED, FSCACHE_VOLUME_IS_WEIRD,};
enum cachefiles_coherency_trace { cachefiles_coherency_check_aux, cachefiles_coherency_check_content, cachefiles_coherency_check_dirty, cachefiles_coherency_check_len, cachefiles_coherency_check_objsize, cachefiles_coherency_check_ok, cachefiles_coherency_check_type, cachefiles_coherency_check_xattr, cachefiles_coherency_discontiguous, cachefiles_coherency_remove, cachefiles_coherency_set_fail, cachefiles_coherency_set_ok, cachefiles_coherency_vol_check_cmp, cachefiles_coherency_vol_check_ok, cachefiles_coherency_vol_check_resv, cachefiles_coherency_vol_check_xattr, cachefiles_coherency_vol_set_fail, cachefiles_coherency_vol_set_ok,};
enum cachefiles_trunc_trace { cachefiles_trunc_clear_padding, cachefiles_trunc_dio_adjust, cachefiles_trunc_expand_tmpfile, cachefiles_trunc_shrink, cachefiles_trunc_zap,};
enum cachefiles_prepare_read_trace { cachefiles_trace_read_after_eof, cachefiles_trace_read_found_hole, cachefiles_trace_read_found_part, cachefiles_trace_read_have_data, cachefiles_trace_read_no_data, cachefiles_trace_read_no_file, cachefiles_trace_read_seek_error, cachefiles_trace_read_seek_nxio,};
enum cachefiles_error_trace { cachefiles_trace_alignment_error, cachefiles_trace_create_nospace, cachefiles_trace_fallocate_error, cachefiles_trace_getxattr_error, cachefiles_trace_link_error, cachefiles_trace_lookup_error, cachefiles_trace_mkdir_error, cachefiles_trace_mkdir_nospace, cachefiles_trace_notify_change_error, cachefiles_trace_open_error, cachefiles_trace_read_error, cachefiles_trace_remxattr_error, cachefiles_trace_rename_error, cachefiles_trace_seek_error, cachefiles_trace_setxattr_error, cachefiles_trace_statfs_error, cachefiles_trace_tmpfile_error, cachefiles_trace_trunc_error, cachefiles_trace_unlink_error, cachefiles_trace_write_error, cachefiles_trace_write_nospace, cachefiles_trace_write_nospace_2,};
#endif
/* * Define enum -> string mappings for display. */#define cachefiles_obj_kill_traces \ EM(FSCACHE_OBJECT_IS_STALE, "stale") \ EM(FSCACHE_OBJECT_IS_WEIRD, "weird") \ EM(FSCACHE_OBJECT_INVALIDATED, "inval") \ EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \ EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \ EM(FSCACHE_OBJECT_WAS_CULLED, "was_culled") \ E_(FSCACHE_VOLUME_IS_WEIRD, "volume_weird")
#define cachefiles_obj_ref_traces \ EM(cachefiles_obj_get_ioreq, "GET ioreq") \ EM(cachefiles_obj_new, "NEW obj") \ EM(cachefiles_obj_put_alloc_fail, "PUT alloc_fail") \ EM(cachefiles_obj_put_detach, "PUT detach") \ EM(cachefiles_obj_put_ioreq, "PUT ioreq") \ EM(cachefiles_obj_see_clean_commit, "SEE clean_commit") \ EM(cachefiles_obj_see_clean_delete, "SEE clean_delete") \ EM(cachefiles_obj_see_clean_drop_tmp, "SEE clean_drop_tmp") \ EM(cachefiles_obj_see_lookup_cookie, "SEE lookup_cookie") \ EM(cachefiles_obj_see_lookup_failed, "SEE lookup_failed") \ EM(cachefiles_obj_see_withdraw_cookie, "SEE withdraw_cookie") \ E_(cachefiles_obj_see_withdrawal, "SEE withdrawal")
#define cachefiles_coherency_traces \ EM(cachefiles_coherency_check_aux, "BAD aux ") \ EM(cachefiles_coherency_check_content, "BAD cont") \ EM(cachefiles_coherency_check_dirty, "BAD dirt") \ EM(cachefiles_coherency_check_len, "BAD len ") \ EM(cachefiles_coherency_check_objsize, "BAD osiz") \ EM(cachefiles_coherency_check_ok, "OK ") \ EM(cachefiles_coherency_check_type, "BAD type") \ EM(cachefiles_coherency_check_xattr, "BAD xatt") \ EM(cachefiles_coherency_discontiguous, "--- gap ") \ EM(cachefiles_coherency_remove, "REMOVE ") \ EM(cachefiles_coherency_set_fail, "SET fail") \ EM(cachefiles_coherency_set_ok, "SET ok ") \ EM(cachefiles_coherency_vol_check_cmp, "VOL BAD cmp ") \ EM(cachefiles_coherency_vol_check_ok, "VOL OK ") \ EM(cachefiles_coherency_vol_check_resv, "VOL BAD resv") \ EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt") \ EM(cachefiles_coherency_vol_set_fail, "VOL SET fail") \ E_(cachefiles_coherency_vol_set_ok, "VOL SET ok ")
#define cachefiles_trunc_traces \ EM(cachefiles_trunc_clear_padding, "CLRPAD") \ EM(cachefiles_trunc_dio_adjust, "DIOADJ") \ EM(cachefiles_trunc_expand_tmpfile, "EXPTMP") \ EM(cachefiles_trunc_shrink, "SHRINK") \ E_(cachefiles_trunc_zap, "ZAP ")
#define cachefiles_prepare_read_traces \ EM(cachefiles_trace_read_after_eof, "after-eof ") \ EM(cachefiles_trace_read_found_hole, "found-hole") \ EM(cachefiles_trace_read_found_part, "found-part") \ EM(cachefiles_trace_read_have_data, "have-data ") \ EM(cachefiles_trace_read_no_data, "no-data ") \ EM(cachefiles_trace_read_no_file, "no-file ") \ EM(cachefiles_trace_read_seek_error, "seek-error") \ E_(cachefiles_trace_read_seek_nxio, "seek-enxio")
#define cachefiles_error_traces \ EM(cachefiles_trace_alignment_error, "align") \ EM(cachefiles_trace_create_nospace, "create-nospace") \ EM(cachefiles_trace_fallocate_error, "fallocate") \ EM(cachefiles_trace_getxattr_error, "getxattr") \ EM(cachefiles_trace_link_error, "link") \ EM(cachefiles_trace_lookup_error, "lookup") \ EM(cachefiles_trace_mkdir_error, "mkdir") \ EM(cachefiles_trace_mkdir_nospace, "mkdir-nospace") \ EM(cachefiles_trace_notify_change_error, "notify_change") \ EM(cachefiles_trace_open_error, "open") \ EM(cachefiles_trace_read_error, "read") \ EM(cachefiles_trace_remxattr_error, "remxattr") \ EM(cachefiles_trace_rename_error, "rename") \ EM(cachefiles_trace_seek_error, "seek") \ EM(cachefiles_trace_setxattr_error, "setxattr") \ EM(cachefiles_trace_statfs_error, "statfs") \ EM(cachefiles_trace_tmpfile_error, "tmpfile") \ EM(cachefiles_trace_trunc_error, "trunc") \ EM(cachefiles_trace_unlink_error, "unlink") \ EM(cachefiles_trace_write_error, "write") \ EM(cachefiles_trace_write_nospace, "write-nospace") \ E_(cachefiles_trace_write_nospace_2, "write-nospace-2")
/* * Export enum symbols via userspace. */#undef EM#undef E_#define EM(a, b) TRACE_DEFINE_ENUM(a);#define E_(a, b) TRACE_DEFINE_ENUM(a);
cachefiles_obj_kill_traces;cachefiles_obj_ref_traces;cachefiles_coherency_traces;cachefiles_trunc_traces;cachefiles_prepare_read_traces;cachefiles_error_traces;
/* * Now redefine the EM() and E_() macros to map the enums to the strings that * will be printed in the output. */#undef EM#undef E_#define EM(a, b) { a, b },#define E_(a, b) { a, b }
TRACE_EVENT(cachefiles_ref, TP_PROTO(unsigned int object_debug_id, unsigned int cookie_debug_id, int usage, enum cachefiles_obj_ref_trace why),
TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, cookie) __field(enum cachefiles_obj_ref_trace, why) __field(int, usage) ),
TP_fast_assign( __entry->obj = object_debug_id; __entry->cookie = cookie_debug_id; __entry->usage = usage; __entry->why = why; ),
TP_printk("c=%08x o=%08x u=%d %s", __entry->cookie, __entry->obj, __entry->usage, __print_symbolic(__entry->why, cachefiles_obj_ref_traces)) );
TRACE_EVENT(cachefiles_lookup, TP_PROTO(struct cachefiles_object *obj, struct dentry *dir, struct dentry *de),
TP_ARGS(obj, dir, de),
TP_STRUCT__entry( __field(u64, dino) __field(u64, ino) __field(unsigned int, obj) __field(short, error) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->dino = d_backing_inode(dir)->i_ino; __entry->ino = (!IS_ERR(de) && d_backing_inode(de) ? d_backing_inode(de)->i_ino : 0); __entry->error = IS_ERR(de) ? PTR_ERR(de) : 0; ),
TP_printk("o=%08x dB=%llx B=%llx e=%d", __entry->obj, __entry->dino, __entry->ino, __entry->error) );
TRACE_EVENT(cachefiles_mkdir, TP_PROTO(struct dentry *dir, struct dentry *subdir),
TP_ARGS(dir, subdir),
TP_STRUCT__entry( __field(unsigned int, dir) __field(unsigned int, subdir) ),
TP_fast_assign( __entry->dir = d_backing_inode(dir)->i_ino; __entry->subdir = d_backing_inode(subdir)->i_ino; ),
TP_printk("dB=%x sB=%x", __entry->dir, __entry->subdir) );
TRACE_EVENT(cachefiles_tmpfile, TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
TP_ARGS(obj, backer),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) ),
TP_fast_assign( __entry->obj = obj->debug_id; __entry->backer = backer->i_ino; ),
TP_printk("o=%08x B=%x", __entry->obj, __entry->backer) );
TRACE_EVENT(cachefiles_link, TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
TP_ARGS(obj, backer),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) ),
TP_fast_assign( __entry->obj = obj->debug_id; __entry->backer = backer->i_ino; ),
TP_printk("o=%08x B=%x", __entry->obj, __entry->backer) );
TRACE_EVENT(cachefiles_unlink, TP_PROTO(struct cachefiles_object *obj, ino_t ino, enum fscache_why_object_killed why),
TP_ARGS(obj, ino, why),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, ino) __field(enum fscache_why_object_killed, why) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : UINT_MAX; __entry->ino = ino; __entry->why = why; ),
TP_printk("o=%08x B=%x w=%s", __entry->obj, __entry->ino, __print_symbolic(__entry->why, cachefiles_obj_kill_traces)) );
TRACE_EVENT(cachefiles_rename, TP_PROTO(struct cachefiles_object *obj, ino_t ino, enum fscache_why_object_killed why),
TP_ARGS(obj, ino, why),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, ino) __field(enum fscache_why_object_killed, why) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : UINT_MAX; __entry->ino = ino; __entry->why = why; ),
TP_printk("o=%08x B=%x w=%s", __entry->obj, __entry->ino, __print_symbolic(__entry->why, cachefiles_obj_kill_traces)) );
TRACE_EVENT(cachefiles_coherency, TP_PROTO(struct cachefiles_object *obj, ino_t ino, uoff_t obj_size, const void *disk_aux, enum cachefiles_content content, enum cachefiles_coherency_trace why),
TP_ARGS(obj, ino, obj_size, disk_aux, content, why),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(unsigned int, obj) __field(enum cachefiles_coherency_trace, why) __field(enum cachefiles_content, content) __field(u64, ino) __field(u64, obj_size) __field(u64, aux) __field(u64, disk_aux) ),
TP_fast_assign( union { __be16 s[4]; __be64 ll; } x;
__entry->obj = obj->debug_id; __entry->why = why; __entry->content = content; __entry->ino = ino; __entry->obj_size = obj_size; __entry->aux = be64_to_cpup((__be64 *)obj->cookie->inline_aux);
/* cachefiles_xattr::data is 2-byte aligned but not 8-byte aligned. */ if (disk_aux) { x.s[0] = ((__be16 *)disk_aux)[0]; x.s[1] = ((__be16 *)disk_aux)[1]; x.s[2] = ((__be16 *)disk_aux)[2]; x.s[3] = ((__be16 *)disk_aux)[3]; __entry->disk_aux = be64_to_cpu(x.ll); } else { __entry->disk_aux = 0; } ),
TP_printk("o=%08x %s B=%llx oz=%llx c=%u aux=%llx dsk=%llx", __entry->obj, __print_symbolic(__entry->why, cachefiles_coherency_traces), __entry->ino, __entry->obj_size, __entry->content, __entry->aux, __entry->disk_aux) );
TRACE_EVENT(cachefiles_vol_coherency, TP_PROTO(struct cachefiles_volume *volume, ino_t ino, enum cachefiles_coherency_trace why),
TP_ARGS(volume, ino, why),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(unsigned int, vol) __field(enum cachefiles_coherency_trace, why) __field(u64, ino) ),
TP_fast_assign( __entry->vol = volume->vcookie->debug_id; __entry->why = why; __entry->ino = ino; ),
TP_printk("V=%08x %s B=%llx", __entry->vol, __print_symbolic(__entry->why, cachefiles_coherency_traces), __entry->ino) );
TRACE_EVENT(cachefiles_prep_read, TP_PROTO(struct cachefiles_object *obj, uoff_t start, size_t len, unsigned short flags, enum netfs_io_source source, enum cachefiles_prepare_read_trace why, ino_t cache_inode, ino_t netfs_inode),
TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned short, flags) __field(enum netfs_io_source, source) __field(enum cachefiles_prepare_read_trace, why) __field(size_t, len) __field(uoff_t, start) __field(unsigned int, netfs_inode) __field(unsigned int, cache_inode) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->flags = flags; __entry->source = source; __entry->why = why; __entry->len = len; __entry->start = start; __entry->netfs_inode = netfs_inode; __entry->cache_inode = cache_inode; ),
TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x", __entry->obj, __print_symbolic(__entry->source, netfs_sreq_sources), __print_symbolic(__entry->why, cachefiles_prepare_read_traces), __entry->flags, __entry->start, __entry->len, __entry->netfs_inode, __entry->cache_inode) );
TRACE_EVENT(cachefiles_read, TP_PROTO(struct cachefiles_object *obj, struct inode *backer, uoff_t start, size_t len),
TP_ARGS(obj, backer, start, len),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) __field(size_t, len) __field(uoff_t, start) ),
TP_fast_assign( __entry->obj = obj->debug_id; __entry->backer = backer->i_ino; __entry->start = start; __entry->len = len; ),
TP_printk("o=%08x B=%x s=%llx l=%zx", __entry->obj, __entry->backer, __entry->start, __entry->len) );
TRACE_EVENT(cachefiles_write, TP_PROTO(struct cachefiles_object *obj, struct inode *backer, uoff_t start, size_t len),
TP_ARGS(obj, backer, start, len),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) __field(size_t, len) __field(uoff_t, start) ),
TP_fast_assign( __entry->obj = obj->debug_id; __entry->backer = backer->i_ino; __entry->start = start; __entry->len = len; ),
TP_printk("o=%08x B=%x s=%llx l=%zx", __entry->obj, __entry->backer, __entry->start, __entry->len) );
TRACE_EVENT(cachefiles_trunc, TP_PROTO(struct cachefiles_object *obj, struct inode *backer, uoff_t from, uoff_t to, enum cachefiles_trunc_trace why),
TP_ARGS(obj, backer, from, to, why),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) __field(enum cachefiles_trunc_trace, why) __field(uoff_t, from) __field(uoff_t, to) ),
TP_fast_assign( __entry->obj = obj->debug_id; __entry->backer = backer->i_ino; __entry->from = from; __entry->to = to; __entry->why = why; ),
TP_printk("o=%08x B=%x %s l=%llx->%llx", __entry->obj, __entry->backer, __print_symbolic(__entry->why, cachefiles_trunc_traces), __entry->from, __entry->to) );
TRACE_EVENT(cachefiles_mark_active, TP_PROTO(struct cachefiles_object *obj, struct inode *inode),
TP_ARGS(obj, inode),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(u64, inode) __field(unsigned int, obj) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->inode = inode->i_ino; ),
TP_printk("o=%08x B=%llx", __entry->obj, __entry->inode) );
TRACE_EVENT(cachefiles_mark_failed, TP_PROTO(struct cachefiles_object *obj, struct inode *inode),
TP_ARGS(obj, inode),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(u64, inode) __field(unsigned int, obj) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->inode = inode->i_ino; ),
TP_printk("o=%08x B=%llx", __entry->obj, __entry->inode) );
TRACE_EVENT(cachefiles_mark_inactive, TP_PROTO(struct cachefiles_object *obj, struct inode *inode),
TP_ARGS(obj, inode),
/* Note that obj may be NULL */ TP_STRUCT__entry( __field(u64, inode) __field(unsigned int, obj) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->inode = inode->i_ino; ),
TP_printk("o=%08x B=%llx", __entry->obj, __entry->inode) );
TRACE_EVENT(cachefiles_vfs_error, TP_PROTO(struct cachefiles_object *obj, struct inode *backer, int error, enum cachefiles_error_trace where),
TP_ARGS(obj, backer, error, where),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) __field(enum cachefiles_error_trace, where) __field(short, error) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->backer = backer->i_ino; __entry->error = error; __entry->where = where; ),
TP_printk("o=%08x B=%x %s e=%d", __entry->obj, __entry->backer, __print_symbolic(__entry->where, cachefiles_error_traces), __entry->error) );
TRACE_EVENT(cachefiles_io_error, TP_PROTO(struct cachefiles_object *obj, struct inode *backer, int error, enum cachefiles_error_trace where),
TP_ARGS(obj, backer, error, where),
TP_STRUCT__entry( __field(unsigned int, obj) __field(unsigned int, backer) __field(enum cachefiles_error_trace, where) __field(short, error) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->backer = backer->i_ino; __entry->error = error; __entry->where = where; ),
TP_printk("o=%08x B=%x %s e=%d", __entry->obj, __entry->backer, __print_symbolic(__entry->where, cachefiles_error_traces), __entry->error) );
TRACE_EVENT(cachefiles_no_space, TP_PROTO(struct cachefiles_object *obj, enum cachefiles_error_trace trace),
TP_ARGS(obj, trace),
TP_STRUCT__entry( __field(unsigned int, obj) __field(enum cachefiles_error_trace, trace) ),
TP_fast_assign( __entry->obj = obj ? obj->debug_id : 0; __entry->trace = trace; ),
TP_printk("o=%08x %s", __entry->obj, __print_symbolic(__entry->trace, cachefiles_error_traces)) );
#endif /* _TRACE_CACHEFILES_H */
/* This part must be outside protection */#include <trace/define_trace.h>