--- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -321,7 +321,9 @@ if (lf) { KLD_DPF(FILE, ("linker_load_file: file %s is already loaded, incrementing refs\n", filename)); *result = lf; + lockmgr(&llf_lock, LK_EXCLUSIVE); lf->refs++; + lockmgr(&llf_lock, LK_RELEASE); goto out; } @@ -813,13 +815,14 @@ lockmgr(&kld_lock, LK_EXCLUSIVE); error = linker_load_module(kldname, modname, NULL, NULL, &lf); + if (error == 0) { + lf->userrefs++; + sysmsg->sysmsg_result = lf->id; + } lockmgr(&kld_lock, LK_RELEASE); if (error) goto out; - lf->userrefs++; - sysmsg->sysmsg_result = lf->id; - out: if (file) kfree(file, M_TEMP);