Hi Mauro, [...] > +static int ref_module_dependency(struct module *mod, struct module *this) > +{ > + int ret; > + > + if (!this || !this->name) > + return -EINVAL; > + > + if (mod == this) > + return 0; > + > + mutex_lock(&module_mutex); > + > + ret = ref_module(this, mod); > + > +#ifdef CONFIG_MODULE_UNLOAD > + if (ret) > + goto ret; > + > + ret = sysfs_create_link(mod->holders_dir, > + &this->mkobj.kobj, this->name); > +#endif > + > +ret: > + mutex_unlock(&module_mutex); > + return ret; > +} > + > /* Clear the unload stuff of the module. */ > static void module_unload_free(struct module *mod) > { > @@ -841,24 +886,16 @@ void __module_get(struct module *module) > } > EXPORT_SYMBOL(__module_get); > > -bool try_module_get(struct module *module) > +bool try_module_get_owner(struct module *module, struct module *this) > { > - bool ret = true; > + int ret = __try_module_get(module); > > - if (module) { > - preempt_disable(); > - /* Note: here, we can fail to get a reference */ > - if (likely(module_is_live(module) && > - atomic_inc_not_zero(&module->refcnt) != 0)) > - trace_module_get(module, _RET_IP_); > - else > - ret = false; > + if (ret) > + ref_module_dependency(module, this); do we care about the return value here? Andi > > - preempt_enable(); > - } > return ret; > } > -EXPORT_SYMBOL(try_module_get); > +EXPORT_SYMBOL(try_module_get_owner); > > void module_put(struct module *module) > { > -- > 2.35.1