| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- /* SPDX-License-Identifier: GPL-2.0-or-later */
- /* Ceph filesystem support module tracepoints
- *
- * Copyright (C) 2025 IONOS SE. All Rights Reserved.
- * Written by Max Kellermann (max.kellermann@ionos.com)
- */
- #undef TRACE_SYSTEM
- #define TRACE_SYSTEM ceph
- #if !defined(_TRACE_CEPH_H) || defined(TRACE_HEADER_MULTI_READ)
- #define _TRACE_CEPH_H
- #include <linux/tracepoint.h>
- #define ceph_mdsc_suspend_reasons \
- EM(ceph_mdsc_suspend_reason_no_mdsmap, "no-mdsmap") \
- EM(ceph_mdsc_suspend_reason_no_active_mds, "no-active-mds") \
- EM(ceph_mdsc_suspend_reason_rejected, "rejected") \
- E_(ceph_mdsc_suspend_reason_session, "session")
- #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 ceph_mdsc_suspend_reason { ceph_mdsc_suspend_reasons } __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);
- ceph_mdsc_suspend_reasons;
- /*
- * 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(ceph_mdsc_submit_request,
- TP_PROTO(struct ceph_mds_client *mdsc,
- struct ceph_mds_request *req),
- TP_ARGS(mdsc, req),
- TP_STRUCT__entry(
- __field(u64, tid)
- __field(int, op)
- __field(u64, ino)
- __field(u64, snap)
- ),
- TP_fast_assign(
- struct inode *inode;
- __entry->tid = req->r_tid;
- __entry->op = req->r_op;
- inode = req->r_inode;
- if (inode == NULL && req->r_dentry)
- inode = d_inode(req->r_dentry);
- if (inode) {
- __entry->ino = ceph_ino(inode);
- __entry->snap = ceph_snap(inode);
- } else {
- __entry->ino = __entry->snap = 0;
- }
- ),
- TP_printk("R=%llu op=%s ino=%llx,%llx",
- __entry->tid,
- ceph_mds_op_name(__entry->op),
- __entry->ino, __entry->snap)
- );
- TRACE_EVENT(ceph_mdsc_suspend_request,
- TP_PROTO(struct ceph_mds_client *mdsc,
- struct ceph_mds_session *session,
- struct ceph_mds_request *req,
- enum ceph_mdsc_suspend_reason reason),
- TP_ARGS(mdsc, session, req, reason),
- TP_STRUCT__entry(
- __field(u64, tid)
- __field(int, op)
- __field(int, mds)
- __field(enum ceph_mdsc_suspend_reason, reason)
- ),
- TP_fast_assign(
- __entry->tid = req->r_tid;
- __entry->op = req->r_op;
- __entry->mds = session ? session->s_mds : -1;
- __entry->reason = reason;
- ),
- TP_printk("R=%llu op=%s reason=%s",
- __entry->tid,
- ceph_mds_op_name(__entry->op),
- __print_symbolic(__entry->reason, ceph_mdsc_suspend_reasons))
- );
- TRACE_EVENT(ceph_mdsc_resume_request,
- TP_PROTO(struct ceph_mds_client *mdsc,
- struct ceph_mds_request *req),
- TP_ARGS(mdsc, req),
- TP_STRUCT__entry(
- __field(u64, tid)
- __field(int, op)
- ),
- TP_fast_assign(
- __entry->tid = req->r_tid;
- __entry->op = req->r_op;
- ),
- TP_printk("R=%llu op=%s",
- __entry->tid,
- ceph_mds_op_name(__entry->op))
- );
- TRACE_EVENT(ceph_mdsc_send_request,
- TP_PROTO(struct ceph_mds_session *session,
- struct ceph_mds_request *req),
- TP_ARGS(session, req),
- TP_STRUCT__entry(
- __field(u64, tid)
- __field(int, op)
- __field(int, mds)
- ),
- TP_fast_assign(
- __entry->tid = req->r_tid;
- __entry->op = req->r_op;
- __entry->mds = session->s_mds;
- ),
- TP_printk("R=%llu op=%s mds=%d",
- __entry->tid,
- ceph_mds_op_name(__entry->op),
- __entry->mds)
- );
- TRACE_EVENT(ceph_mdsc_complete_request,
- TP_PROTO(struct ceph_mds_client *mdsc,
- struct ceph_mds_request *req),
- TP_ARGS(mdsc, req),
- TP_STRUCT__entry(
- __field(u64, tid)
- __field(int, op)
- __field(int, err)
- __field(unsigned long, latency_ns)
- ),
- TP_fast_assign(
- __entry->tid = req->r_tid;
- __entry->op = req->r_op;
- __entry->err = req->r_err;
- __entry->latency_ns = req->r_end_latency - req->r_start_latency;
- ),
- TP_printk("R=%llu op=%s err=%d latency_ns=%lu",
- __entry->tid,
- ceph_mds_op_name(__entry->op),
- __entry->err,
- __entry->latency_ns)
- );
- TRACE_EVENT(ceph_handle_caps,
- TP_PROTO(struct ceph_mds_client *mdsc,
- struct ceph_mds_session *session,
- int op,
- const struct ceph_vino *vino,
- struct ceph_inode_info *inode,
- u32 seq, u32 mseq, u32 issue_seq),
- TP_ARGS(mdsc, session, op, vino, inode, seq, mseq, issue_seq),
- TP_STRUCT__entry(
- __field(int, mds)
- __field(int, op)
- __field(u64, ino)
- __field(u64, snap)
- __field(u32, seq)
- __field(u32, mseq)
- __field(u32, issue_seq)
- ),
- TP_fast_assign(
- __entry->mds = session->s_mds;
- __entry->op = op;
- __entry->ino = vino->ino;
- __entry->snap = vino->snap;
- __entry->seq = seq;
- __entry->mseq = mseq;
- __entry->issue_seq = issue_seq;
- ),
- TP_printk("mds=%d op=%s vino=%llx.%llx seq=%u iseq=%u mseq=%u",
- __entry->mds,
- ceph_cap_op_name(__entry->op),
- __entry->ino,
- __entry->snap,
- __entry->seq,
- __entry->issue_seq,
- __entry->mseq)
- );
- #undef EM
- #undef E_
- #endif /* _TRACE_CEPH_H */
- /* This part must be outside protection */
- #include <trace/define_trace.h>
|