summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2005-05-28 22:29:44 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2005-05-28 22:29:44 +0000
commit870fba26488b779a2871042633df784bb4a8f89f (patch)
tree20473695d44130d20818bc62bee4d46b149e7263
parentf6f1669c0f1b968c1c667026ac9067c4147cdcfe (diff)
Notes
-rw-r--r--sys/kern/kern_linker.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index 53479e181dc8..32cb32ac5b52 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -300,9 +300,11 @@ linker_file_register_modules(linker_file_t lf)
KLD_DPF(FILE, ("Registering module %s in %s\n",
moddata->name, lf->filename));
error = module_register(moddata, lf);
- if (error)
+ if (error) {
printf("Module %s failed to register: %d\n",
moddata->name, error);
+ return (error);
+ }
}
return (0);
}
@@ -354,7 +356,11 @@ linker_load_file(const char *filename, linker_file_t *result)
if (error != ENOENT)
foundfile = 1;
if (lf) {
- linker_file_register_modules(lf);
+ error = linker_file_register_modules(lf);
+ if (error == EEXIST) {
+ linker_file_unload(lf, LINKER_UNLOAD_FORCE);
+ goto out;
+ }
linker_file_register_sysctls(lf);
linker_file_sysinit(lf);
lf->flags |= LINKER_FILE_LINKED;