Move the fail_point_entry definition from fail.h to kern_fail.c, which
allows putting the enumeration constants of fail point types with the text string that matches them. MFC after: 1 week
This commit is contained in:
parent
a8d61afdc2
commit
d26b794591
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=216616
@ -76,6 +76,43 @@ MTX_SYSINIT(g_fp_mtx, &g_fp_mtx, "fail point mtx", MTX_DEF);
|
||||
#define FP_LOCK() mtx_lock(&g_fp_mtx)
|
||||
#define FP_UNLOCK() mtx_unlock(&g_fp_mtx)
|
||||
|
||||
/**
|
||||
* Failpoint types.
|
||||
* Don't change these without changing fail_type_strings in fail.c.
|
||||
* @ingroup failpoint_private
|
||||
*/
|
||||
enum fail_point_t {
|
||||
FAIL_POINT_OFF, /**< don't fail */
|
||||
FAIL_POINT_PANIC, /**< panic */
|
||||
FAIL_POINT_RETURN, /**< return an errorcode */
|
||||
FAIL_POINT_BREAK, /**< break into the debugger */
|
||||
FAIL_POINT_PRINT, /**< print a message */
|
||||
FAIL_POINT_SLEEP, /**< sleep for some msecs */
|
||||
FAIL_POINT_INVALID, /**< placeholder */
|
||||
};
|
||||
|
||||
static const char *fail_type_strings[] = {
|
||||
"off",
|
||||
"panic",
|
||||
"return",
|
||||
"break",
|
||||
"print",
|
||||
"sleep",
|
||||
};
|
||||
|
||||
/**
|
||||
* Internal structure tracking a single term of a complete failpoint.
|
||||
* @ingroup failpoint_private
|
||||
*/
|
||||
struct fail_point_entry {
|
||||
enum fail_point_t fe_type; /**< type of entry */
|
||||
int fe_arg; /**< argument to type (e.g. return value) */
|
||||
int fe_prob; /**< likelihood of firing in millionths */
|
||||
int fe_count; /**< number of times to fire, 0 means always */
|
||||
|
||||
TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */
|
||||
};
|
||||
|
||||
static inline void
|
||||
fail_point_sleep(struct fail_point *fp, struct fail_point_entry *ent,
|
||||
int msecs, enum fail_point_return_code *pret)
|
||||
@ -102,15 +139,6 @@ enum {
|
||||
PROB_DIGITS = 6, /* number of zero's in above number */
|
||||
};
|
||||
|
||||
static const char *fail_type_strings[] = {
|
||||
"off",
|
||||
"panic",
|
||||
"return",
|
||||
"break",
|
||||
"print",
|
||||
"sleep",
|
||||
};
|
||||
|
||||
static char *parse_fail_point(struct fail_point_entries *, char *);
|
||||
static char *parse_term(struct fail_point_entries *, char *);
|
||||
static char *parse_number(int *out_units, int *out_decimal, char *);
|
||||
|
@ -39,22 +39,6 @@
|
||||
#include <sys/queue.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
|
||||
/**
|
||||
* Failpoint types.
|
||||
* Don't change these without changing fail_type_strings in fail.c.
|
||||
* @ingroup failpoint_private
|
||||
*/
|
||||
enum fail_point_t {
|
||||
FAIL_POINT_OFF, /**< don't fail */
|
||||
FAIL_POINT_PANIC, /**< panic */
|
||||
FAIL_POINT_RETURN, /**< return an errorcode */
|
||||
FAIL_POINT_BREAK, /**< break into the debugger */
|
||||
FAIL_POINT_PRINT, /**< print a message */
|
||||
FAIL_POINT_SLEEP, /**< sleep for some msecs */
|
||||
FAIL_POINT_INVALID, /**< placeholder */
|
||||
};
|
||||
|
||||
/**
|
||||
* Failpoint return codes, used internally.
|
||||
* @ingroup failpoint_private
|
||||
@ -65,6 +49,7 @@ enum fail_point_return_code {
|
||||
FAIL_POINT_RC_QUEUED, /**< sleep_fn will be called */
|
||||
};
|
||||
|
||||
struct fail_point_entry;
|
||||
TAILQ_HEAD(fail_point_entries, fail_point_entry);
|
||||
/**
|
||||
* Internal failpoint structure, tracking all the current details of the
|
||||
@ -84,18 +69,7 @@ struct fail_point {
|
||||
|
||||
#define FAIL_POINT_DYNAMIC_NAME 0x01 /**< Must free name on destroy */
|
||||
|
||||
/**
|
||||
* Internal structure tracking a single term of a complete failpoint.
|
||||
* @ingroup failpoint_private
|
||||
*/
|
||||
struct fail_point_entry {
|
||||
enum fail_point_t fe_type; /**< type of entry */
|
||||
int fe_arg; /**< argument to type (e.g. return value) */
|
||||
int fe_prob; /**< likelihood of firing in millionths */
|
||||
int fe_count; /**< number of times to fire, 0 means always */
|
||||
|
||||
TAILQ_ENTRY(fail_point_entry) fe_entries; /**< next entry in fail point */
|
||||
};
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Private failpoint eval function -- use fail_point_eval() instead. */
|
||||
enum fail_point_return_code fail_point_eval_nontrivial(struct fail_point *,
|
||||
@ -152,6 +126,8 @@ fail_point_eval(struct fail_point *fp, int *ret)
|
||||
return (fail_point_eval_nontrivial(fp, ret));
|
||||
}
|
||||
|
||||
__END_DECLS
|
||||
|
||||
/* Declare a fail_point and its sysctl in a function. */
|
||||
#define _FAIL_POINT_NAME(name) _fail_point_##name
|
||||
#define _STRINGIFY_HELPER(x) #x
|
||||
@ -233,7 +209,7 @@ fail_point_eval(struct fail_point *fp, int *ret)
|
||||
NULL, NULL, \
|
||||
}; \
|
||||
SYSCTL_OID(parent, OID_AUTO, name, \
|
||||
CTLTYPE_STRING | CTLFLAG_RW, \
|
||||
CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, \
|
||||
&_FAIL_POINT_NAME(name), 0, fail_point_sysctl, \
|
||||
"A", ""); \
|
||||
\
|
||||
@ -254,7 +230,7 @@ int fail_point_sysctl(SYSCTL_HANDLER_ARGS);
|
||||
|
||||
/* The fail point sysctl tree. */
|
||||
SYSCTL_DECL(_debug_fail_point);
|
||||
#define DEBUG_FP _debug_fail_point
|
||||
#endif
|
||||
#define DEBUG_FP _debug_fail_point
|
||||
|
||||
#endif /* _SYS_FAIL_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user