#include "module.h"
static struct list_head modules[FAULTD_MODULE_TYPE_MAX];
+static int category_disabled[FAULTD_MODULE_TYPE_MAX];
static void init_heads(void)
{
unsigned i;
- for (i = 0; i < ARRAY_SIZE(modules); ++i)
+ for (i = 0; i < ARRAY_SIZE(modules); ++i) {
INIT_LIST_HEAD(modules + i);
+ category_disabled[i] = 0;
+ }
}
int faultd_module_register(struct faultd_module *module)
init_heads();
for (i = 0; i < (int)(ARRAY_SIZE(modules)); ++i) {
+ if (category_disabled[i]) {
+ log_debug("Skipping modules category %d", i);
+ continue;
+ }
+
log_debug("Initializing modules category %d", i);
list_for_each_entry(module, modules + i, node) {
if (module->disabled)
err_cleanup:
for (; i >= 0; --i) {
+ if (category_disabled[i])
+ continue;
+
log_debug("Cleaning up modules category %d", i);
/* From first element of the list... */
for (module_to_clean = list_first_entry(modules + i,
int i;
for (i = FAULTD_MODULE_TYPE_MAX - 1; i >= 0; --i) {
+ if (category_disabled[i])
+ continue;
+
log_debug("Cleaning up modules category %d", i);
list_for_each_entry(module, modules + i, node) {
if (module->disabled)
return NULL;
}
+
+void faultd_disable_module_category(int category)
+{
+ category_disabled[category] = 1;
+}
int c, r;
enum {
ARG_LOG_LEVEL = 0x100,
+ ARG_NO_ACTION,
};
static const struct option options[] = {
{"log-level", required_argument, NULL, ARG_LOG_LEVEL},
{"disable-module", required_argument, NULL, 'd'},
+ {"no-action", no_argument, NULL, ARG_NO_ACTION},
{}
};
}
break;
+
+ case ARG_NO_ACTION:
+ faultd_disable_module_category(FAULTD_MODULE_TYPE_ACTION);
+ break;
+
default:
return -EINVAL;
}