Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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 /* note: we begin tracing dlm_lock_start() only if ls and lkb are found */
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         /* return value will be zeroed in those cases by dlm_lock()
0126          * we do it here again to not introduce more overhead if
0127          * trace isn't running and error reflects the return value.
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 /* note: we begin tracing dlm_unlock_start() only if ls and lkb are found */
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 /* if !defined(_TRACE_DLM_H) || defined(TRACE_HEADER_MULTI_READ) */
0332 
0333 /* This part must be outside protection */
0334 #include <trace/define_trace.h>