*/
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+
+#include <linux/bug.h>
#include <linux/slab.h>
#include <linux/list.h>
#include <linux/mutex.h>
IL_FS
};
+static const char *level_name(enum init_level level)
+{
+ switch (level) {
+ case IL_CORE:
+ return "core";
+ case IL_FS:
+ return "fs";
+ }
+
+ BUG();
+}
+
+
static swap_init_t sis_get_fn_init(struct swap_init_struct *init,
enum init_level level)
{
int ret;
ret = once();
- if (ret)
+ if (ret) {
+ pr_err("Cannot init %s.once(), ret=%d, %pS\n",
+ init->name, ret, once);
return ret;
+ }
init->once_flag = true;
}
int ret;
swap_init_t fn;
- if (sis_get_flag(init, level))
+ if (sis_get_flag(init, level)) {
+ pr_err("Module %s:%s already init\n",
+ init->name, level_name(level));
return -EPERM;
+ }
fn = sis_get_fn_init(init, level);
if (fn) {
ret = fn();
- if (ret)
+ if (ret) {
+ pr_err("Cannot init %s:%s_init(), ret=%d %pS\n",
+ init->name, level_name(level), ret, fn);
return ret;
+ }
}
sis_set_flag(init, level, true);
swap_uninit_t fs_uninit;
/* private fields */
+ const char *name;
struct list_head list;
unsigned once_flag:1;
unsigned core_flag:1;
.core_uninit = _uninit, \
.fs_init = _fs_init, \
.fs_uninit = _fs_uninit, \
+ .name = KBUILD_MODNAME, \
.list = LIST_HEAD_INIT(__init_struct.list), \
.once_flag = false, \
.core_flag = false, \