kld regression

John Baldwin jhb at freebsd.org
Thu Jan 31 09:55:52 PST 2008


On Thursday 31 January 2008 07:39:52 am Andriy Gapon wrote:
> on 31/01/2008 13:07 John Baldwin said the following:
> > On Wednesday 30 January 2008 12:39:14 pm Andriy Gapon wrote:
> >> The problem is as follows:
> >> 1. put udf_load="YES" in loader.conf
> >> 2. you can mount and unmount udf filesystems
> >> 3. you can kldunload udf if no udf filesystems are mounted
> >> 4. now mount udf fs while udf.ko is unloaded
> >> 5. udf is auto loaded and fs is mounted
> >> 6. unmount fs
> >> 7. try to kldunload udf
> >> kldunload: can't unload file: Device busy
> >> kernel message: kldunload: attempt to unload file that was loaded by the
> >> kernel
> >>
> >> Yeah, it was loaded by kernel indeed, but WTF - what is the difference
> >> from manual/loader.conf loading and why I can not manage my modules as I
> >> wish?
> > 
> > Hmm, the relevant code (vfs_init.c) hasn't changed in 6.x since 6.0.  
There 
> > were some changes in 7.0, but this should work in both branches.  What is 
the 
> > previous release that this worked on?
> > 
> 
> Maybe I was wrong when I called this regression, but this was very
> surprising behavior for me. And in 5.X I did a lot of udf
> debugging/experimenting and never encountered such a problem. Maybe I
> always did kldload before mount, I can't tell now.
> Anyway, this seems like an annoyance at the very least, pinning a kernel
> module without any important reasons.

It should work.  It should definitely work in 7.0, and it should even work in 
6.x though a bit more dubiously.  Maybe hack your kernel to return userrefs 
instead of 'refs' for kldstat and see what userrefs is after you do a mount 
of udf and rely on the autoload.  It should be 1 which means you can 
kldunload it (and refs should be 1 as well).

-- 
John Baldwin


More information about the freebsd-stable mailing list