0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM dlm
0004
0005 #if !defined(_TRACE_DLM_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_DLM_H
0007
0008 #include <linux/dlm.h>
0009 #include <linux/dlmconstants.h>
0010 #include <linux/tracepoint.h>
0011
0012 #include "../../../fs/dlm/dlm_internal.h"
0013
0014 #define show_lock_flags(flags) __print_flags(flags, "|", \
0015 { DLM_LKF_NOQUEUE, "NOQUEUE" }, \
0016 { DLM_LKF_CANCEL, "CANCEL" }, \
0017 { DLM_LKF_CONVERT, "CONVERT" }, \
0018 { DLM_LKF_VALBLK, "VALBLK" }, \
0019 { DLM_LKF_QUECVT, "QUECVT" }, \
0020 { DLM_LKF_IVVALBLK, "IVVALBLK" }, \
0021 { DLM_LKF_CONVDEADLK, "CONVDEADLK" }, \
0022 { DLM_LKF_PERSISTENT, "PERSISTENT" }, \
0023 { DLM_LKF_NODLCKWT, "NODLCKWT" }, \
0024 { DLM_LKF_NODLCKBLK, "NODLCKBLK" }, \
0025 { DLM_LKF_EXPEDITE, "EXPEDITE" }, \
0026 { DLM_LKF_NOQUEUEBAST, "NOQUEUEBAST" }, \
0027 { DLM_LKF_HEADQUE, "HEADQUE" }, \
0028 { DLM_LKF_NOORDER, "NOORDER" }, \
0029 { DLM_LKF_ORPHAN, "ORPHAN" }, \
0030 { DLM_LKF_ALTPR, "ALTPR" }, \
0031 { DLM_LKF_ALTCW, "ALTCW" }, \
0032 { DLM_LKF_FORCEUNLOCK, "FORCEUNLOCK" }, \
0033 { DLM_LKF_TIMEOUT, "TIMEOUT" })
0034
0035 #define show_lock_mode(mode) __print_symbolic(mode, \
0036 { DLM_LOCK_IV, "IV"}, \
0037 { DLM_LOCK_NL, "NL"}, \
0038 { DLM_LOCK_CR, "CR"}, \
0039 { DLM_LOCK_CW, "CW"}, \
0040 { DLM_LOCK_PR, "PR"}, \
0041 { DLM_LOCK_PW, "PW"}, \
0042 { DLM_LOCK_EX, "EX"})
0043
0044 #define show_dlm_sb_flags(flags) __print_flags(flags, "|", \
0045 { DLM_SBF_DEMOTED, "DEMOTED" }, \
0046 { DLM_SBF_VALNOTVALID, "VALNOTVALID" }, \
0047 { DLM_SBF_ALTMODE, "ALTMODE" })
0048
0049
0050 TRACE_EVENT(dlm_lock_start,
0051
0052 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, void *name,
0053 unsigned int namelen, int mode, __u32 flags),
0054
0055 TP_ARGS(ls, lkb, name, namelen, mode, flags),
0056
0057 TP_STRUCT__entry(
0058 __field(__u32, ls_id)
0059 __field(__u32, lkb_id)
0060 __field(int, mode)
0061 __field(__u32, flags)
0062 __dynamic_array(unsigned char, res_name,
0063 lkb->lkb_resource ? lkb->lkb_resource->res_length : namelen)
0064 ),
0065
0066 TP_fast_assign(
0067 struct dlm_rsb *r;
0068
0069 __entry->ls_id = ls->ls_global_id;
0070 __entry->lkb_id = lkb->lkb_id;
0071 __entry->mode = mode;
0072 __entry->flags = flags;
0073
0074 r = lkb->lkb_resource;
0075 if (r)
0076 memcpy(__get_dynamic_array(res_name), r->res_name,
0077 __get_dynamic_array_len(res_name));
0078 else if (name)
0079 memcpy(__get_dynamic_array(res_name), name,
0080 __get_dynamic_array_len(res_name));
0081 ),
0082
0083 TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s res_name=%s",
0084 __entry->ls_id, __entry->lkb_id,
0085 show_lock_mode(__entry->mode),
0086 show_lock_flags(__entry->flags),
0087 __print_hex_str(__get_dynamic_array(res_name),
0088 __get_dynamic_array_len(res_name)))
0089
0090 );
0091
0092 TRACE_EVENT(dlm_lock_end,
0093
0094 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, void *name,
0095 unsigned int namelen, int mode, __u32 flags, int error),
0096
0097 TP_ARGS(ls, lkb, name, namelen, mode, flags, error),
0098
0099 TP_STRUCT__entry(
0100 __field(__u32, ls_id)
0101 __field(__u32, lkb_id)
0102 __field(int, mode)
0103 __field(__u32, flags)
0104 __field(int, error)
0105 __dynamic_array(unsigned char, res_name,
0106 lkb->lkb_resource ? lkb->lkb_resource->res_length : namelen)
0107 ),
0108
0109 TP_fast_assign(
0110 struct dlm_rsb *r;
0111
0112 __entry->ls_id = ls->ls_global_id;
0113 __entry->lkb_id = lkb->lkb_id;
0114 __entry->mode = mode;
0115 __entry->flags = flags;
0116
0117 r = lkb->lkb_resource;
0118 if (r)
0119 memcpy(__get_dynamic_array(res_name), r->res_name,
0120 __get_dynamic_array_len(res_name));
0121 else if (name)
0122 memcpy(__get_dynamic_array(res_name), name,
0123 __get_dynamic_array_len(res_name));
0124
0125
0126
0127
0128
0129 if (error == -EAGAIN || error == -EDEADLK)
0130 __entry->error = 0;
0131 else
0132 __entry->error = error;
0133
0134 ),
0135
0136 TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s error=%d res_name=%s",
0137 __entry->ls_id, __entry->lkb_id,
0138 show_lock_mode(__entry->mode),
0139 show_lock_flags(__entry->flags), __entry->error,
0140 __print_hex_str(__get_dynamic_array(res_name),
0141 __get_dynamic_array_len(res_name)))
0142
0143 );
0144
0145 TRACE_EVENT(dlm_bast,
0146
0147 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, int mode),
0148
0149 TP_ARGS(ls, lkb, mode),
0150
0151 TP_STRUCT__entry(
0152 __field(__u32, ls_id)
0153 __field(__u32, lkb_id)
0154 __field(int, mode)
0155 __dynamic_array(unsigned char, res_name,
0156 lkb->lkb_resource ? lkb->lkb_resource->res_length : 0)
0157 ),
0158
0159 TP_fast_assign(
0160 struct dlm_rsb *r;
0161
0162 __entry->ls_id = ls->ls_global_id;
0163 __entry->lkb_id = lkb->lkb_id;
0164 __entry->mode = mode;
0165
0166 r = lkb->lkb_resource;
0167 if (r)
0168 memcpy(__get_dynamic_array(res_name), r->res_name,
0169 __get_dynamic_array_len(res_name));
0170 ),
0171
0172 TP_printk("ls_id=%u lkb_id=%x mode=%s res_name=%s",
0173 __entry->ls_id, __entry->lkb_id,
0174 show_lock_mode(__entry->mode),
0175 __print_hex_str(__get_dynamic_array(res_name),
0176 __get_dynamic_array_len(res_name)))
0177
0178 );
0179
0180 TRACE_EVENT(dlm_ast,
0181
0182 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb),
0183
0184 TP_ARGS(ls, lkb),
0185
0186 TP_STRUCT__entry(
0187 __field(__u32, ls_id)
0188 __field(__u32, lkb_id)
0189 __field(u8, sb_flags)
0190 __field(int, sb_status)
0191 __dynamic_array(unsigned char, res_name,
0192 lkb->lkb_resource ? lkb->lkb_resource->res_length : 0)
0193 ),
0194
0195 TP_fast_assign(
0196 struct dlm_rsb *r;
0197
0198 __entry->ls_id = ls->ls_global_id;
0199 __entry->lkb_id = lkb->lkb_id;
0200 __entry->sb_flags = lkb->lkb_lksb->sb_flags;
0201 __entry->sb_status = lkb->lkb_lksb->sb_status;
0202
0203 r = lkb->lkb_resource;
0204 if (r)
0205 memcpy(__get_dynamic_array(res_name), r->res_name,
0206 __get_dynamic_array_len(res_name));
0207 ),
0208
0209 TP_printk("ls_id=%u lkb_id=%x sb_flags=%s sb_status=%d res_name=%s",
0210 __entry->ls_id, __entry->lkb_id,
0211 show_dlm_sb_flags(__entry->sb_flags), __entry->sb_status,
0212 __print_hex_str(__get_dynamic_array(res_name),
0213 __get_dynamic_array_len(res_name)))
0214
0215 );
0216
0217
0218 TRACE_EVENT(dlm_unlock_start,
0219
0220 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags),
0221
0222 TP_ARGS(ls, lkb, flags),
0223
0224 TP_STRUCT__entry(
0225 __field(__u32, ls_id)
0226 __field(__u32, lkb_id)
0227 __field(__u32, flags)
0228 __dynamic_array(unsigned char, res_name,
0229 lkb->lkb_resource ? lkb->lkb_resource->res_length : 0)
0230 ),
0231
0232 TP_fast_assign(
0233 struct dlm_rsb *r;
0234
0235 __entry->ls_id = ls->ls_global_id;
0236 __entry->lkb_id = lkb->lkb_id;
0237 __entry->flags = flags;
0238
0239 r = lkb->lkb_resource;
0240 if (r)
0241 memcpy(__get_dynamic_array(res_name), r->res_name,
0242 __get_dynamic_array_len(res_name));
0243 ),
0244
0245 TP_printk("ls_id=%u lkb_id=%x flags=%s res_name=%s",
0246 __entry->ls_id, __entry->lkb_id,
0247 show_lock_flags(__entry->flags),
0248 __print_hex_str(__get_dynamic_array(res_name),
0249 __get_dynamic_array_len(res_name)))
0250
0251 );
0252
0253 TRACE_EVENT(dlm_unlock_end,
0254
0255 TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags,
0256 int error),
0257
0258 TP_ARGS(ls, lkb, flags, error),
0259
0260 TP_STRUCT__entry(
0261 __field(__u32, ls_id)
0262 __field(__u32, lkb_id)
0263 __field(__u32, flags)
0264 __field(int, error)
0265 __dynamic_array(unsigned char, res_name,
0266 lkb->lkb_resource ? lkb->lkb_resource->res_length : 0)
0267 ),
0268
0269 TP_fast_assign(
0270 struct dlm_rsb *r;
0271
0272 __entry->ls_id = ls->ls_global_id;
0273 __entry->lkb_id = lkb->lkb_id;
0274 __entry->flags = flags;
0275 __entry->error = error;
0276
0277 r = lkb->lkb_resource;
0278 if (r)
0279 memcpy(__get_dynamic_array(res_name), r->res_name,
0280 __get_dynamic_array_len(res_name));
0281 ),
0282
0283 TP_printk("ls_id=%u lkb_id=%x flags=%s error=%d res_name=%s",
0284 __entry->ls_id, __entry->lkb_id,
0285 show_lock_flags(__entry->flags), __entry->error,
0286 __print_hex_str(__get_dynamic_array(res_name),
0287 __get_dynamic_array_len(res_name)))
0288
0289 );
0290
0291 TRACE_EVENT(dlm_send,
0292
0293 TP_PROTO(int nodeid, int ret),
0294
0295 TP_ARGS(nodeid, ret),
0296
0297 TP_STRUCT__entry(
0298 __field(int, nodeid)
0299 __field(int, ret)
0300 ),
0301
0302 TP_fast_assign(
0303 __entry->nodeid = nodeid;
0304 __entry->ret = ret;
0305 ),
0306
0307 TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret)
0308
0309 );
0310
0311 TRACE_EVENT(dlm_recv,
0312
0313 TP_PROTO(int nodeid, int ret),
0314
0315 TP_ARGS(nodeid, ret),
0316
0317 TP_STRUCT__entry(
0318 __field(int, nodeid)
0319 __field(int, ret)
0320 ),
0321
0322 TP_fast_assign(
0323 __entry->nodeid = nodeid;
0324 __entry->ret = ret;
0325 ),
0326
0327 TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret)
0328
0329 );
0330
0331 #endif
0332
0333
0334 #include <trace/define_trace.h>