return 0;
}
- zlogger_device.minor = MISC_DYNAMIC_MINOR;
- zlogger_device.name = ZLOGGER_DEVICE_NAME;
- zlogger_device.fops = &zlogger_fops;
- zlogger_device.mode = 0666;
-#ifdef CONFIG_SECURITY_SMACK_SET_DEV_SMK_LABEL
- zlogger_device.lab_smk64 = ZLOGGER_SMACK_LABEL;
-#endif
- r = misc_register(&zlogger_device);
- if (unlikely(r)) {
- pr_err("Failed to register misc device for '%s' (%d)\n", ZLOGGER_DEVICE_NAME, r);
- return r;
- }
-
- r = sysfs_create_group(&zlogger_device.this_device->kobj, &zlogger_attr_group);
- if (unlikely(r)) {
- dev_err(zlogger_device.this_device, "failed to create sysfs nodes with (%d)\n", r);
- return r;
- }
-
g_thread_table = kzalloc(sizeof(struct thread_table), GFP_KERNEL);
if (g_thread_table == NULL)
return -ENOMEM;
#endif
run_task();
+ zlogger_device.minor = MISC_DYNAMIC_MINOR;
+ zlogger_device.name = ZLOGGER_DEVICE_NAME;
+ zlogger_device.fops = &zlogger_fops;
+ zlogger_device.mode = 0666;
+#ifdef CONFIG_SECURITY_SMACK_SET_DEV_SMK_LABEL
+ zlogger_device.lab_smk64 = ZLOGGER_SMACK_LABEL;
+#endif
+ r = misc_register(&zlogger_device);
+ if (unlikely(r)) {
+ pr_err("Failed to register misc device for '%s' (%d)\n", ZLOGGER_DEVICE_NAME, r);
+ goto out_free_zlog_task;
+ }
+
+ r = sysfs_create_group(&zlogger_device.this_device->kobj, &zlogger_attr_group);
+ if (unlikely(r)) {
+ dev_err(zlogger_device.this_device, "failed to create sysfs nodes with (%d)\n", r);
+ goto out_free_zlogger_device;
+ }
+
g_init = 1;
pr_info("Init success\n");
return 0;
+out_free_zlogger_device:
+ misc_deregister(&zlogger_device);
+
+out_free_zlog_task:
+ /* TODO: actually destroy this task.
+ * We don't do so yet, even in zlogger_exit (see TODO there).
+ */
+
out_free_g_thread_table_g_shm_ptr:
for (i = 0; i < g_shm_ptr_i; ++i) {
kfree(g_shm_ptr[i]);
struct hlist_node *tmp_iter = NULL;
int tmp_bkt;
+ sysfs_remove_group(&zlogger_device.this_device->kobj, &zlogger_attr_group);
+ misc_deregister(&zlogger_device);
+
// TODO: What about the task that is running in the background?
queue_deinit(&g_free_q);
}
g_init = 0;
-
- sysfs_remove_group(&zlogger_device.this_device->kobj, &zlogger_attr_group);
- misc_deregister(&zlogger_device);
}
module_init(zlogger_init);