try_module_get和module_put

    try_module_get使模块的引用计数加1,当rmmod调用时,会检查这个引用计数,当计数为0时才会删除模块。

static inline int try_module_get(struct module *module)
{
	int ret = 1;

	if (module) {
		preempt_disable();

		if (likely(module_is_live(module))) {
			__this_cpu_inc(module->refptr->incs);
			trace_module_get(module, _THIS_IP_);
		} else
			ret = 0;

		preempt_enable();
	}
	return ret;
}

调用的方法如下:

    if (!try_module_get(module))
        goto exit;

当模块参数为空或模块还未加载到内核,它会返回0。

module_put(module)的作用与try_module_get相反,它释放引用计数。


你可能感兴趣的:(try_module_get和module_put)