svn commit: r216616 - in head/sys: kern sys

mdf at FreeBSD.org mdf at FreeBSD.org
Tue Dec 21 16:46:35 UTC 2010


On Tue, Dec 21, 2010 at 8:29 AM, Matthew D Fleming <mdf at freebsd.org> wrote:
> Author: mdf
> Date: Tue Dec 21 16:29:58 2010
> New Revision: 216616
> URL: http://svn.freebsd.org/changeset/base/216616
>
> Log:
>  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.

Forgot the other part of the change.  Mark the oid as MPSAFE since it
runs using an internal lock, add __BEGIN_DECLS/__END_DECLS tag around
the function declarations, and move a #define under the guard, since
using the define makes no sense if the sysctl node is not declared.

Thanks,
matthew

>
>  MFC after:    1 week
>
> Modified:
>  head/sys/kern/kern_fail.c
>  head/sys/sys/fail.h
>
> Modified: head/sys/kern/kern_fail.c
> ==============================================================================
> --- head/sys/kern/kern_fail.c   Tue Dec 21 13:45:29 2010        (r216615)
> +++ head/sys/kern/kern_fail.c   Tue Dec 21 16:29:58 2010        (r216616)
> @@ -76,6 +76,43 @@ MTX_SYSINIT(g_fp_mtx, &g_fp_mtx, "fail p
>  #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 *);
>
> Modified: head/sys/sys/fail.h
> ==============================================================================
> --- head/sys/sys/fail.h Tue Dec 21 13:45:29 2010        (r216615)
> +++ head/sys/sys/fail.h Tue Dec 21 16:29:58 2010        (r216616)
> @@ -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, i
>        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, i
>                        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_ARG
>
>  /* 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_ */
>


More information about the svn-src-all mailing list