]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/sys/trace_zil.h
8659 static dtrace probes unavailable on non-GPL modules
[FreeBSD/FreeBSD.git] / include / sys / trace_zil.h
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21
22 #if defined(_KERNEL)
23 #if defined(HAVE_DECLARE_EVENT_CLASS)
24
25 #undef TRACE_SYSTEM
26 #define TRACE_SYSTEM zfs
27
28 #undef TRACE_SYSTEM_VAR
29 #define TRACE_SYSTEM_VAR zfs_zil
30
31 #if !defined(_TRACE_ZIL_H) || defined(TRACE_HEADER_MULTI_READ)
32 #define _TRACE_ZIL_H
33
34 #include <linux/tracepoint.h>
35 #include <sys/types.h>
36
37 #define ZILOG_TP_STRUCT_ENTRY                                               \
38                 __field(uint64_t,       zl_lr_seq)                          \
39                 __field(uint64_t,       zl_commit_lr_seq)                   \
40                 __field(uint64_t,       zl_destroy_txg)                     \
41                 __field(uint64_t,       zl_replaying_seq)                   \
42                 __field(uint32_t,       zl_suspend)                         \
43                 __field(uint8_t,        zl_suspending)                      \
44                 __field(uint8_t,        zl_keep_first)                      \
45                 __field(uint8_t,        zl_replay)                          \
46                 __field(uint8_t,        zl_stop_sync)                       \
47                 __field(uint8_t,        zl_logbias)                         \
48                 __field(uint8_t,        zl_sync)                            \
49                 __field(int,            zl_parse_error)                     \
50                 __field(uint64_t,       zl_parse_blk_seq)                   \
51                 __field(uint64_t,       zl_parse_lr_seq)                    \
52                 __field(uint64_t,       zl_parse_blk_count)                 \
53                 __field(uint64_t,       zl_parse_lr_count)                  \
54                 __field(uint64_t,       zl_cur_used)                        \
55                 __field(clock_t,        zl_replay_time)                     \
56                 __field(uint64_t,       zl_replay_blks)
57
58 #define ZILOG_TP_FAST_ASSIGN                                                \
59                 __entry->zl_lr_seq              = zilog->zl_lr_seq;         \
60                 __entry->zl_commit_lr_seq       = zilog->zl_commit_lr_seq;  \
61                 __entry->zl_destroy_txg = zilog->zl_destroy_txg;            \
62                 __entry->zl_replaying_seq       = zilog->zl_replaying_seq;  \
63                 __entry->zl_suspend             = zilog->zl_suspend;        \
64                 __entry->zl_suspending  = zilog->zl_suspending;             \
65                 __entry->zl_keep_first  = zilog->zl_keep_first;             \
66                 __entry->zl_replay              = zilog->zl_replay;         \
67                 __entry->zl_stop_sync   = zilog->zl_stop_sync;              \
68                 __entry->zl_logbias             = zilog->zl_logbias;        \
69                 __entry->zl_sync                = zilog->zl_sync;           \
70                 __entry->zl_parse_error = zilog->zl_parse_error;            \
71                 __entry->zl_parse_blk_seq       = zilog->zl_parse_blk_seq;  \
72                 __entry->zl_parse_lr_seq        = zilog->zl_parse_lr_seq;   \
73                 __entry->zl_parse_blk_count     = zilog->zl_parse_blk_count;\
74                 __entry->zl_parse_lr_count      = zilog->zl_parse_lr_count; \
75                 __entry->zl_cur_used    = zilog->zl_cur_used;               \
76                 __entry->zl_replay_time = zilog->zl_replay_time;            \
77                 __entry->zl_replay_blks = zilog->zl_replay_blks;
78
79 #define ZILOG_TP_PRINTK_FMT                                                 \
80         "zl { lr_seq %llu commit_lr_seq %llu destroy_txg %llu "             \
81         "replaying_seq %llu suspend %u suspending %u keep_first %u "        \
82         "replay %u stop_sync %u logbias %u sync %u "                        \
83         "parse_error %u parse_blk_seq %llu parse_lr_seq %llu "              \
84         "parse_blk_count %llu parse_lr_count %llu "                         \
85         "cur_used %llu replay_time %lu replay_blks %llu }"
86
87 #define ZILOG_TP_PRINTK_ARGS                                                \
88             __entry->zl_lr_seq, __entry->zl_commit_lr_seq,                  \
89             __entry->zl_destroy_txg, __entry->zl_replaying_seq,             \
90             __entry->zl_suspend, __entry->zl_suspending,                    \
91             __entry->zl_keep_first, __entry->zl_replay,                     \
92             __entry->zl_stop_sync, __entry->zl_logbias, __entry->zl_sync,   \
93             __entry->zl_parse_error, __entry->zl_parse_blk_seq,             \
94             __entry->zl_parse_lr_seq, __entry->zl_parse_blk_count,          \
95             __entry->zl_parse_lr_count, __entry->zl_cur_used,               \
96             __entry->zl_replay_time, __entry->zl_replay_blks
97
98 #define ITX_TP_STRUCT_ENTRY                                                 \
99                 __field(itx_wr_state_t, itx_wr_state)                       \
100                 __field(uint8_t,        itx_sync)                           \
101                 __field(zil_callback_t, itx_callback)                       \
102                 __field(void *,         itx_callback_data)                  \
103                 __field(uint64_t,       itx_oid)                            \
104                                                                             \
105                 __field(uint64_t,       lrc_txtype)                         \
106                 __field(uint64_t,       lrc_reclen)                         \
107                 __field(uint64_t,       lrc_txg)                            \
108                 __field(uint64_t,       lrc_seq)
109
110 #define ITX_TP_FAST_ASSIGN                                                  \
111                 __entry->itx_wr_state           = itx->itx_wr_state;        \
112                 __entry->itx_sync               = itx->itx_sync;            \
113                 __entry->itx_callback           = itx->itx_callback;        \
114                 __entry->itx_callback_data      = itx->itx_callback_data;   \
115                 __entry->itx_oid                = itx->itx_oid;             \
116                                                                             \
117                 __entry->lrc_txtype             = itx->itx_lr.lrc_txtype;   \
118                 __entry->lrc_reclen             = itx->itx_lr.lrc_reclen;   \
119                 __entry->lrc_txg                = itx->itx_lr.lrc_txg;      \
120                 __entry->lrc_seq                = itx->itx_lr.lrc_seq;
121
122 #define ITX_TP_PRINTK_FMT                                                   \
123         "itx { wr_state %u sync %u callback %p callback_data %p oid %llu"   \
124         " { txtype %llu reclen %llu txg %llu seq %llu } }"
125
126 #define ITX_TP_PRINTK_ARGS                                                  \
127             __entry->itx_wr_state, __entry->itx_sync, __entry->itx_callback,\
128             __entry->itx_callback_data, __entry->itx_oid,                   \
129             __entry->lrc_txtype, __entry->lrc_reclen, __entry->lrc_txg,     \
130             __entry->lrc_seq
131
132 #define ZCW_TP_STRUCT_ENTRY                                                 \
133                 __field(lwb_t *,        zcw_lwb)                            \
134                 __field(boolean_t,      zcw_done)                           \
135                 __field(int,            zcw_zio_error)                      \
136
137 #define ZCW_TP_FAST_ASSIGN                                                  \
138                 __entry->zcw_lwb                = zcw->zcw_lwb;             \
139                 __entry->zcw_done               = zcw->zcw_done;            \
140                 __entry->zcw_zio_error          = zcw->zcw_zio_error;
141
142 #define ZCW_TP_PRINTK_FMT                                                   \
143         "zcw { lwb %p done %u error %u }"
144
145 #define ZCW_TP_PRINTK_ARGS                                                  \
146             __entry->zcw_lwb, __entry->zcw_done, __entry->zcw_zio_error
147
148 /*
149  * Generic support for two argument tracepoints of the form:
150  *
151  * DTRACE_PROBE2(...,
152  *     zilog_t *, ...,
153  *     itx_t *, ...);
154  */
155 /* BEGIN CSTYLED */
156 DECLARE_EVENT_CLASS(zfs_zil_process_itx_class,
157         TP_PROTO(zilog_t *zilog, itx_t *itx),
158         TP_ARGS(zilog, itx),
159         TP_STRUCT__entry(
160             ZILOG_TP_STRUCT_ENTRY
161             ITX_TP_STRUCT_ENTRY
162         ),
163         TP_fast_assign(
164             ZILOG_TP_FAST_ASSIGN
165             ITX_TP_FAST_ASSIGN
166         ),
167         TP_printk(
168             ZILOG_TP_PRINTK_FMT " " ITX_TP_PRINTK_FMT,
169             ZILOG_TP_PRINTK_ARGS, ITX_TP_PRINTK_ARGS)
170 );
171 /* END CSTYLED */
172
173 /* BEGIN CSTYLED */
174 #define DEFINE_ZIL_PROCESS_ITX_EVENT(name) \
175 DEFINE_EVENT(zfs_zil_process_itx_class, name, \
176         TP_PROTO(zilog_t *zilog, itx_t *itx), \
177         TP_ARGS(zilog, itx))
178 DEFINE_ZIL_PROCESS_ITX_EVENT(zfs_zil__process__commit__itx);
179 DEFINE_ZIL_PROCESS_ITX_EVENT(zfs_zil__process__normal__itx);
180 /* END CSTYLED */
181
182 /*
183  * Generic support for two argument tracepoints of the form:
184  *
185  * DTRACE_PROBE2(...,
186  *     zilog_t *, ...,
187  *     zil_commit_waiter_t *, ...);
188  */
189 /* BEGIN CSTYLED */
190 DECLARE_EVENT_CLASS(zfs_zil_commit_io_error_class,
191         TP_PROTO(zilog_t *zilog, zil_commit_waiter_t *zcw),
192         TP_ARGS(zilog, zcw),
193         TP_STRUCT__entry(
194             ZILOG_TP_STRUCT_ENTRY
195             ZCW_TP_STRUCT_ENTRY
196         ),
197         TP_fast_assign(
198             ZILOG_TP_FAST_ASSIGN
199             ZCW_TP_FAST_ASSIGN
200         ),
201         TP_printk(
202             ZILOG_TP_PRINTK_FMT " " ZCW_TP_PRINTK_FMT,
203             ZILOG_TP_PRINTK_ARGS, ZCW_TP_PRINTK_ARGS)
204 );
205
206 /* BEGIN CSTYLED */
207 #define DEFINE_ZIL_COMMIT_IO_ERROR_EVENT(name) \
208 DEFINE_EVENT(zfs_zil_commit_io_error_class, name, \
209         TP_PROTO(zilog_t *zilog, zil_commit_waiter_t *zcw), \
210         TP_ARGS(zilog, zcw))
211 DEFINE_ZIL_COMMIT_IO_ERROR_EVENT(zfs_zil__commit__io__error);
212 /* END CSTYLED */
213
214 #endif /* _TRACE_ZIL_H */
215
216 #undef TRACE_INCLUDE_PATH
217 #undef TRACE_INCLUDE_FILE
218 #define TRACE_INCLUDE_PATH sys
219 #define TRACE_INCLUDE_FILE trace_zil
220 #include <trace/define_trace.h>
221
222 #else
223
224 DEFINE_DTRACE_PROBE2(zil__process__commit__itx);
225 DEFINE_DTRACE_PROBE2(zil__process__normal__itx);
226 DEFINE_DTRACE_PROBE2(zil__commit__io__error);
227
228 #endif /* HAVE_DECLARE_EVENT_CLASS */
229 #endif /* _KERNEL */