23 #ifdef ENABLE_FAULT_INJECTION 26 #include <linux/kernel.h> 41 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_LIB 78 " Idx | Enb |TotHits|TotTrig|Hits|Trig| Type | Data | Module | File name | Line | Func name | Tag\n",
79 "-----+-----+-------+-------+----+----+----------+----------+--------+----------------------------------------+------+-----------------------------------+----------\n",
84 " %-3u %c %-7u %-7u %-4u %-4u %-10s %-10s %-8s %-40s %-4u %-35s %s\n";
109 si->si_total_hit_cnt = 0;
110 si->si_total_trigger_cnt = 0;
112 si->si_trigger_cnt = 0;
131 si->si_func =
s->fps_id.fpi_func;
132 si->si_tag =
s->fps_id.fpi_tag;
133 si->si_total_hit_cnt =
s->fps_total_hit_cnt;
134 si->si_total_trigger_cnt =
s->fps_total_trigger_cnt;
142 si->si_module =
fp->fp_module;
144 si->si_line_num =
fp->fp_line_num;
150 switch (
s->fps_data.fpd_type) {
152 snprintf(
si->si_data,
sizeof si->si_data,
"n=%u,m=%u",
153 s->fps_data.u.s1.fpd_n,
154 s->fps_data.u.s1.fpd_m);
157 snprintf(
si->si_data,
sizeof si->si_data,
"p=%u",
158 s->fps_data.u.fpd_p);
163 si->si_hit_cnt =
s->fps_data.fpd_hit_cnt;
164 si->si_trigger_cnt =
s->fps_data.fpd_trigger_cnt;
321 bool enabled =
false;
325 data->u.s1.fpd___n_cnt++;
326 if (
data->u.s1.fpd___n_cnt >
data->u.s1.fpd_n) {
328 data->u.s1.fpd___m_cnt++;
329 if (
data->u.s1.fpd___m_cnt >=
data->u.s1.fpd_m) {
330 data->u.s1.fpd___n_cnt = 0;
331 data->u.s1.fpd___m_cnt = 0;
427 .fpi_func =
fp->fp_func,
428 .fpi_tag =
fp->fp_tag,
439 fp->fp_state = state;
502 #undef M0_TRACE_SUBSYSTEM
static const char * fi_type_names[M0_FI_TYPES_NR]
struct m0_fi_fpoint_data::@247::@249 s2
static bool fi_fpoint_id_eq(const struct m0_fi_fpoint_id *id1, const struct m0_fi_fpoint_id *id2)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
struct m0_fi_fpoint_id fps_id
static void fi_enable_state(struct m0_fi_fpoint_state *fp_state, const struct m0_fi_fpoint_data *fp_data)
static bool fi_state_always(struct m0_fi_fpoint_state *fps)
M0_INTERNAL void m0_tlist_add(const struct m0_tl_descr *d, struct m0_tl *list, void *obj)
fp_state_func_t fps_trigger_func
M0_INTERNAL const struct m0_fi_fpoint_state * m0_fi_states_get(void)
static struct m0_fi_fpoint_state * __fi_state_find(const struct m0_fi_fpoint_id *fp_id)
static struct m0_fi_fpoint_state * fi_state_alloc(struct m0_fi_fpoint_id *id)
M0_INTERNAL enum m0_fi_fpoint_type m0_fi_fpoint_type_from_str(const char *type_name)
struct m0_fi_fpoint_data::@247::@248 s1
M0_INTERNAL void m0_tlist_init(const struct m0_tl_descr *d, struct m0_tl *list)
M0_INTERNAL void m0_tlist_fini(const struct m0_tl_descr *d, struct m0_tl *list)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
void m0_fi_register(struct m0_fi_fault_point *fp)
static struct m0_tl fi_dynamic_ids
M0_TL_DEFINE(fi_dynamic_ids, static, struct fi_dynamic_id)
M0_INTERNAL const char * m0_short_file_name(const char *fname)
M0_TL_DESCR_DEFINE(fi_dynamic_ids, "finject_dynamic_id", static, struct fi_dynamic_id, fdi_tlink, fdi_magic, M0_FI_DYNAMIC_ID_MAGIC, M0_FI_DYNAMIC_ID_HEAD_MAGIC)
uint32_t fps_total_trigger_cnt
return M0_ERR(-EOPNOTSUPP)
static void fi_state_info_init(struct m0_fi_fpoint_state_info *si)
static bool fi_state_random(struct m0_fi_fpoint_state *fps)
#define m0_tl_teardown(name, head, obj)
M0_INTERNAL void m0_fi_disable(const char *fp_func, const char *fp_tag)
enum m0_fi_fpoint_type fpd_type
static struct m0_fi_fpoint_state * fi_state_find(struct m0_fi_fpoint_id *fp_id)
static bool fi_state_user_func(struct m0_fi_fpoint_state *fps)
M0_INTERNAL uint32_t fi_random(void)
union m0_fi_fpoint_data::@247 u
M0_INTERNAL void fi_states_init(void)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_INTERNAL int m0_fi_add_dyn_id(char *str)
uint32_t fi_states_free_idx
M0_INTERNAL const char * m0_fi_fpoint_type_name(enum m0_fi_fpoint_type type)
const char m0_fi_states_print_format[]
struct m0_fi_fpoint_data fps_data
bool(* fp_state_func_t)(struct m0_fi_fpoint_state *fps)
M0_INTERNAL void m0_tlink_init(const struct m0_tl_descr *d, void *obj)
M0_INTERNAL uint32_t m0_fi_states_get_free_idx(void)
uint32_t fps_total_hit_cnt
M0_INTERNAL void m0_fi_enable_generic(const char *fp_func, const char *fp_tag, const struct m0_fi_fpoint_data *fp_data)
static const fp_state_func_t fi_trigger_funcs[M0_FI_TYPES_NR]
static bool fi_state_enabled(const struct m0_fi_fpoint_state *state)
#define M0_ALLOC_PTR(ptr)
static bool fi_state_off_n_on_m(struct m0_fi_fpoint_state *fps)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
bool m0_fi_enabled(struct m0_fi_fpoint_state *fps)
#define IS_IN_ARRAY(idx, array)
M0_INTERNAL void fi_states_fini(void)
struct m0_fi_fault_point * fps_fp
struct m0_mutex fi_states_mutex
struct m0_tlink fdi_tlink
static bool fi_state_oneshot(struct m0_fi_fpoint_state *fps)
M0_INTERNAL void m0_fi_states_get_state_info(const struct m0_fi_fpoint_state *s, struct m0_fi_fpoint_state_info *si)
const char * m0_fi_states_headline[]
static void fi_dynamic_ids_fini(void)
struct m0_mutex fps_mutex
static struct m0_addb2_source * s
static struct sync_interactions si
static void fi_disable_state(struct m0_fi_fpoint_state *fps)
static uint32_t fi_state_idx(const struct m0_fi_fpoint_state *s)
struct m0_fi_fpoint_state fi_states[FI_STATES_ARRAY_SIZE]