On 08/18, Takashi Iwai wrote: > > #define module_long_probe_init(initfn) \ > static int _long_probe_##initfn(void *arg) \ > { \ > module_put_and_exit(initfn()); \ > return 0; \ > } \ > static int __init __long_probe_##initfn(void) \ > { \ > struct task_struct *__init_thread = \ > kthread_create(_long_probe_##initfn, \ > NULL, #initfn); \ > if (IS_ERR(__init_thread)) \ > return PTR_ERR(__init_thread); \ > __module_get(THIS_MODULE); \ > wake_up_process(__init_thread); \ > return 0; \ > } \ > module_init(__long_probe_##initfn) > > ... and module_exit() remains identical as the normal version. Aaaah. This is not true, module_exit() should not call exitfn() if initfn() fails... So _long_probe_##initfn() needs to save the error code which should be checked by module_exit(). > But, it's really a small difference, and I don't mind much which way > to take, too. Agreed. Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html