summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_linker.c
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>2005-10-19 20:40:30 +0000
committerjdp <jdp@FreeBSD.org>2005-10-19 20:40:30 +0000
commita3d0544135a44cbbcffb7cf29d3c4e4fd399def5 (patch)
treeb38639cef28ddcd26658c95edea6b5c7b39ea239 /sys/kern/kern_linker.c
parent32a93330de5f1f44e51cb5b729b609573cbc7cbf (diff)
downloadFreeBSD-src-a3d0544135a44cbbcffb7cf29d3c4e4fd399def5.zip
FreeBSD-src-a3d0544135a44cbbcffb7cf29d3c4e4fd399def5.tar.gz
Fix a bug in the kernel module runtime linker that made it impossible
to unload the usb.ko module after boot if it was originally preloaded from "/boot/loader.conf". When processing preloaded modules, the linker erroneously added self-dependencies the each module's reference count. That prevented usb.ko's reference count from ever going to 0, so it could not be unloaded. Sponsored by Isilon Systems. Reviewed by: pjd, peter MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_linker.c')
-rw-r--r--sys/kern/kern_linker.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index ac33ef0..ca05cc0 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -1337,6 +1337,9 @@ restart:
modname = mp->md_cval;
verinfo = mp->md_data;
mod = modlist_lookup2(modname, verinfo);
+ /* Don't count self-dependencies */
+ if (lf == mod->container)
+ continue;
mod->container->refs++;
error = linker_file_add_dependency(lf,
mod->container);
OpenPOWER on IntegriCloud