Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Sep 2006 09:57:55 +0800
From:      "Intron is my alias on the Internet" <mag@intron.ac>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: A Bug in linker_reference_module() ?
Message-ID:  <courier.45134323.00004A36@intron.ac>
In-Reply-To: <200609212136.18850.jhb@freebsd.org>
References:  <courier.4512D623.00003440@intron.ac> <200609212136.18850.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote:

> On Thursday 21 September 2006 14:12, Intron is my alias on the Internet wrote:
>> Please have a look at the function linker_reference_module() in
>> /sys/kern/kern_linker.c of 7.0-CURRENT. If the module is loaded on demand,
>> why not increase its reference counter after loading? In my opinion,
>> linker_reference_module() behaves differently from linker_load_file().
> 
> This is because a new kld loaded via linker_load_module() starts off
> with a refcount of 1.  Thus, if you do:
> 
> 	linker_reference_module(...);
> 	...
> 	linker_release_module(...);
> 
> Then with the current code the release_module() call drops the reference
> count to 0 and the module is unloaded.  This is the desired operation for
> reference_module/release_module.  This model is commonly used in the kernel.
> For example, when creating a credential, one just does 'crget()' and later
> a 'crfree()' to free it instead of doing 'crget(); crhold()' to create one.

This model is a little confusing. If a module is loaded on demand as
dependency, its reference counter is set to 1. And if the module is loaded
by kldload(2), its reference counter is also set to 1, though in fact
no other loaded module depends on it.

Although this "shift" model can work correctly, I want to know whether
there's a more reasonable way, such as setting up an auto-unloadable flag.

------------------------------------------------------------------------
                                                From Beijing, China




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?courier.45134323.00004A36>