diff options
author | jdp <jdp@FreeBSD.org> | 2005-10-19 20:40:30 +0000 |
---|---|---|
committer | jdp <jdp@FreeBSD.org> | 2005-10-19 20:40:30 +0000 |
commit | a3d0544135a44cbbcffb7cf29d3c4e4fd399def5 (patch) | |
tree | b38639cef28ddcd26658c95edea6b5c7b39ea239 /sys/kern/kern_linker.c | |
parent | 32a93330de5f1f44e51cb5b729b609573cbc7cbf (diff) | |
download | FreeBSD-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.c | 3 |
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); |