123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- /* SPDX-License-Identifier: GPL-2.0-or-later */
- /* Network filesystem support module tracepoints
- *
- * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
- * Written by David Howells ([email protected])
- */
- #undef TRACE_SYSTEM
- #define TRACE_SYSTEM netfs
- #if !defined(_TRACE_NETFS_H) || defined(TRACE_HEADER_MULTI_READ)
- #define _TRACE_NETFS_H
- #include <linux/tracepoint.h>
- /*
- * Define enums for tracing information.
- */
- #define netfs_read_traces \
- EM(netfs_read_trace_expanded, "EXPANDED ") \
- EM(netfs_read_trace_readahead, "READAHEAD") \
- EM(netfs_read_trace_readpage, "READPAGE ") \
- E_(netfs_read_trace_write_begin, "WRITEBEGN")
- #define netfs_rreq_origins \
- EM(NETFS_READAHEAD, "RA") \
- EM(NETFS_READPAGE, "RP") \
- E_(NETFS_READ_FOR_WRITE, "RW")
- #define netfs_rreq_traces \
- EM(netfs_rreq_trace_assess, "ASSESS ") \
- EM(netfs_rreq_trace_copy, "COPY ") \
- EM(netfs_rreq_trace_done, "DONE ") \
- EM(netfs_rreq_trace_free, "FREE ") \
- EM(netfs_rreq_trace_resubmit, "RESUBMT") \
- EM(netfs_rreq_trace_unlock, "UNLOCK ") \
- E_(netfs_rreq_trace_unmark, "UNMARK ")
- #define netfs_sreq_sources \
- EM(NETFS_FILL_WITH_ZEROES, "ZERO") \
- EM(NETFS_DOWNLOAD_FROM_SERVER, "DOWN") \
- EM(NETFS_READ_FROM_CACHE, "READ") \
- E_(NETFS_INVALID_READ, "INVL") \
- #define netfs_sreq_traces \
- EM(netfs_sreq_trace_download_instead, "RDOWN") \
- EM(netfs_sreq_trace_free, "FREE ") \
- EM(netfs_sreq_trace_prepare, "PREP ") \
- EM(netfs_sreq_trace_resubmit_short, "SHORT") \
- EM(netfs_sreq_trace_submit, "SUBMT") \
- EM(netfs_sreq_trace_terminated, "TERM ") \
- EM(netfs_sreq_trace_write, "WRITE") \
- EM(netfs_sreq_trace_write_skip, "SKIP ") \
- E_(netfs_sreq_trace_write_term, "WTERM")
- #define netfs_failures \
- EM(netfs_fail_check_write_begin, "check-write-begin") \
- EM(netfs_fail_copy_to_cache, "copy-to-cache") \
- EM(netfs_fail_read, "read") \
- EM(netfs_fail_short_read, "short-read") \
- E_(netfs_fail_prepare_write, "prep-write")
- #define netfs_rreq_ref_traces \
- EM(netfs_rreq_trace_get_hold, "GET HOLD ") \
- EM(netfs_rreq_trace_get_subreq, "GET SUBREQ ") \
- EM(netfs_rreq_trace_put_complete, "PUT COMPLT ") \
- EM(netfs_rreq_trace_put_discard, "PUT DISCARD") \
- EM(netfs_rreq_trace_put_failed, "PUT FAILED ") \
- EM(netfs_rreq_trace_put_hold, "PUT HOLD ") \
- EM(netfs_rreq_trace_put_subreq, "PUT SUBREQ ") \
- EM(netfs_rreq_trace_put_zero_len, "PUT ZEROLEN") \
- E_(netfs_rreq_trace_new, "NEW ")
- #define netfs_sreq_ref_traces \
- EM(netfs_sreq_trace_get_copy_to_cache, "GET COPY2C ") \
- EM(netfs_sreq_trace_get_resubmit, "GET RESUBMIT") \
- EM(netfs_sreq_trace_get_short_read, "GET SHORTRD") \
- EM(netfs_sreq_trace_new, "NEW ") \
- EM(netfs_sreq_trace_put_clear, "PUT CLEAR ") \
- EM(netfs_sreq_trace_put_failed, "PUT FAILED ") \
- EM(netfs_sreq_trace_put_merged, "PUT MERGED ") \
- EM(netfs_sreq_trace_put_no_copy, "PUT NO COPY") \
- E_(netfs_sreq_trace_put_terminated, "PUT TERM ")
- #ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
- #define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
- #undef EM
- #undef E_
- #define EM(a, b) a,
- #define E_(a, b) a
- enum netfs_read_trace { netfs_read_traces } __mode(byte);
- enum netfs_rreq_trace { netfs_rreq_traces } __mode(byte);
- enum netfs_sreq_trace { netfs_sreq_traces } __mode(byte);
- enum netfs_failure { netfs_failures } __mode(byte);
- enum netfs_rreq_ref_trace { netfs_rreq_ref_traces } __mode(byte);
- enum netfs_sreq_ref_trace { netfs_sreq_ref_traces } __mode(byte);
- #endif
- /*
- * 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);
- netfs_read_traces;
- netfs_rreq_origins;
- netfs_rreq_traces;
- netfs_sreq_sources;
- netfs_sreq_traces;
- netfs_failures;
- netfs_rreq_ref_traces;
- netfs_sreq_ref_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(netfs_read,
- TP_PROTO(struct netfs_io_request *rreq,
- loff_t start, size_t len,
- enum netfs_read_trace what),
- TP_ARGS(rreq, start, len, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(unsigned int, cookie )
- __field(loff_t, start )
- __field(size_t, len )
- __field(enum netfs_read_trace, what )
- __field(unsigned int, netfs_inode )
- ),
- TP_fast_assign(
- __entry->rreq = rreq->debug_id;
- __entry->cookie = rreq->cache_resources.debug_id;
- __entry->start = start;
- __entry->len = len;
- __entry->what = what;
- __entry->netfs_inode = rreq->inode->i_ino;
- ),
- TP_printk("R=%08x %s c=%08x ni=%x s=%llx %zx",
- __entry->rreq,
- __print_symbolic(__entry->what, netfs_read_traces),
- __entry->cookie,
- __entry->netfs_inode,
- __entry->start, __entry->len)
- );
- TRACE_EVENT(netfs_rreq,
- TP_PROTO(struct netfs_io_request *rreq,
- enum netfs_rreq_trace what),
- TP_ARGS(rreq, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(unsigned int, flags )
- __field(enum netfs_io_origin, origin )
- __field(enum netfs_rreq_trace, what )
- ),
- TP_fast_assign(
- __entry->rreq = rreq->debug_id;
- __entry->flags = rreq->flags;
- __entry->origin = rreq->origin;
- __entry->what = what;
- ),
- TP_printk("R=%08x %s %s f=%02x",
- __entry->rreq,
- __print_symbolic(__entry->origin, netfs_rreq_origins),
- __print_symbolic(__entry->what, netfs_rreq_traces),
- __entry->flags)
- );
- TRACE_EVENT(netfs_sreq,
- TP_PROTO(struct netfs_io_subrequest *sreq,
- enum netfs_sreq_trace what),
- TP_ARGS(sreq, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(unsigned short, index )
- __field(short, error )
- __field(unsigned short, flags )
- __field(enum netfs_io_source, source )
- __field(enum netfs_sreq_trace, what )
- __field(size_t, len )
- __field(size_t, transferred )
- __field(loff_t, start )
- ),
- TP_fast_assign(
- __entry->rreq = sreq->rreq->debug_id;
- __entry->index = sreq->debug_index;
- __entry->error = sreq->error;
- __entry->flags = sreq->flags;
- __entry->source = sreq->source;
- __entry->what = what;
- __entry->len = sreq->len;
- __entry->transferred = sreq->transferred;
- __entry->start = sreq->start;
- ),
- TP_printk("R=%08x[%u] %s %s f=%02x s=%llx %zx/%zx e=%d",
- __entry->rreq, __entry->index,
- __print_symbolic(__entry->source, netfs_sreq_sources),
- __print_symbolic(__entry->what, netfs_sreq_traces),
- __entry->flags,
- __entry->start, __entry->transferred, __entry->len,
- __entry->error)
- );
- TRACE_EVENT(netfs_failure,
- TP_PROTO(struct netfs_io_request *rreq,
- struct netfs_io_subrequest *sreq,
- int error, enum netfs_failure what),
- TP_ARGS(rreq, sreq, error, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(short, index )
- __field(short, error )
- __field(unsigned short, flags )
- __field(enum netfs_io_source, source )
- __field(enum netfs_failure, what )
- __field(size_t, len )
- __field(size_t, transferred )
- __field(loff_t, start )
- ),
- TP_fast_assign(
- __entry->rreq = rreq->debug_id;
- __entry->index = sreq ? sreq->debug_index : -1;
- __entry->error = error;
- __entry->flags = sreq ? sreq->flags : 0;
- __entry->source = sreq ? sreq->source : NETFS_INVALID_READ;
- __entry->what = what;
- __entry->len = sreq ? sreq->len : rreq->len;
- __entry->transferred = sreq ? sreq->transferred : 0;
- __entry->start = sreq ? sreq->start : 0;
- ),
- TP_printk("R=%08x[%d] %s f=%02x s=%llx %zx/%zx %s e=%d",
- __entry->rreq, __entry->index,
- __print_symbolic(__entry->source, netfs_sreq_sources),
- __entry->flags,
- __entry->start, __entry->transferred, __entry->len,
- __print_symbolic(__entry->what, netfs_failures),
- __entry->error)
- );
- TRACE_EVENT(netfs_rreq_ref,
- TP_PROTO(unsigned int rreq_debug_id, int ref,
- enum netfs_rreq_ref_trace what),
- TP_ARGS(rreq_debug_id, ref, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(int, ref )
- __field(enum netfs_rreq_ref_trace, what )
- ),
- TP_fast_assign(
- __entry->rreq = rreq_debug_id;
- __entry->ref = ref;
- __entry->what = what;
- ),
- TP_printk("R=%08x %s r=%u",
- __entry->rreq,
- __print_symbolic(__entry->what, netfs_rreq_ref_traces),
- __entry->ref)
- );
- TRACE_EVENT(netfs_sreq_ref,
- TP_PROTO(unsigned int rreq_debug_id, unsigned int subreq_debug_index,
- int ref, enum netfs_sreq_ref_trace what),
- TP_ARGS(rreq_debug_id, subreq_debug_index, ref, what),
- TP_STRUCT__entry(
- __field(unsigned int, rreq )
- __field(unsigned int, subreq )
- __field(int, ref )
- __field(enum netfs_sreq_ref_trace, what )
- ),
- TP_fast_assign(
- __entry->rreq = rreq_debug_id;
- __entry->subreq = subreq_debug_index;
- __entry->ref = ref;
- __entry->what = what;
- ),
- TP_printk("R=%08x[%x] %s r=%u",
- __entry->rreq,
- __entry->subreq,
- __print_symbolic(__entry->what, netfs_sreq_ref_traces),
- __entry->ref)
- );
- #undef EM
- #undef E_
- #endif /* _TRACE_NETFS_H */
- /* This part must be outside protection */
- #include <trace/define_trace.h>
|