Lines Matching refs:osdm
82 struct osd_master osdm[OSD_LAST + 1] = { variable
107 sx_xlock(&osdm[type].osd_module_lock); in osd_register()
111 for (i = 0; i < osdm[type].osd_ntslots; i++) { in osd_register()
112 if (osdm[type].osd_destructors[i] == NULL) { in osd_register()
121 if (i == osdm[type].osd_ntslots) { in osd_register()
122 osdm[type].osd_ntslots++; in osd_register()
123 if (osdm[type].osd_nmethods != 0) in osd_register()
124 osdm[type].osd_methods = realloc(osdm[type].osd_methods, in osd_register()
125 sizeof(osd_method_t) * osdm[type].osd_ntslots * in osd_register()
126 osdm[type].osd_nmethods, M_OSD, M_WAITOK); in osd_register()
128 osdm[type].osd_ntslots, M_OSD, M_WAITOK); in osd_register()
129 rm_wlock(&osdm[type].osd_object_lock); in osd_register()
130 bcopy(osdm[type].osd_destructors, newptr, in osd_register()
132 free(osdm[type].osd_destructors, M_OSD); in osd_register()
133 osdm[type].osd_destructors = newptr; in osd_register()
134 rm_wunlock(&osdm[type].osd_object_lock); in osd_register()
139 osdm[type].osd_destructors[i] = destructor; in osd_register()
140 if (osdm[type].osd_nmethods != 0) { in osd_register()
141 for (m = 0; m < osdm[type].osd_nmethods; m++) in osd_register()
142 osdm[type].osd_methods[i * osdm[type].osd_nmethods + m] in osd_register()
145 sx_xunlock(&osdm[type].osd_module_lock); in osd_register()
157 sx_xlock(&osdm[type].osd_module_lock); in osd_deregister()
158 rm_wlock(&osdm[type].osd_object_lock); in osd_deregister()
159 KASSERT(osdm[type].osd_destructors[slot - 1] != NULL, ("Unused slot.")); in osd_deregister()
164 mtx_lock(&osdm[type].osd_list_lock); in osd_deregister()
165 LIST_FOREACH_SAFE(osd, &osdm[type].osd_list, osd_next, tosd) in osd_deregister()
167 mtx_unlock(&osdm[type].osd_list_lock); in osd_deregister()
177 osdm[type].osd_destructors[slot - 1] = NULL; in osd_deregister()
180 rm_wunlock(&osdm[type].osd_object_lock); in osd_deregister()
181 sx_xunlock(&osdm[type].osd_module_lock); in osd_deregister()
210 rm_rlock(&osdm[type].osd_object_lock, &tracker); in osd_set_reserved()
211 KASSERT(osdm[type].osd_destructors[slot - 1] != NULL, ("Unused slot.")); in osd_set_reserved()
220 rm_runlock(&osdm[type].osd_object_lock, &tracker); in osd_set_reserved()
245 rm_runlock(&osdm[type].osd_object_lock, in osd_set_reserved()
255 mtx_lock(&osdm[type].osd_list_lock); in osd_set_reserved()
256 LIST_INSERT_HEAD(&osdm[type].osd_list, osd, osd_next); in osd_set_reserved()
257 mtx_unlock(&osdm[type].osd_list_lock); in osd_set_reserved()
268 rm_runlock(&osdm[type].osd_object_lock, &tracker); in osd_set_reserved()
285 KASSERT(osdm[type].osd_destructors[slot - 1] != NULL, ("Unused slot.")); in osd_get_unlocked()
307 rm_rlock(&osdm[type].osd_object_lock, &tracker); in osd_get()
309 rm_runlock(&osdm[type].osd_object_lock, &tracker); in osd_get()
318 rm_rlock(&osdm[type].osd_object_lock, &tracker); in osd_del()
320 rm_runlock(&osdm[type].osd_object_lock, &tracker); in osd_del()
330 KASSERT(osdm[type].osd_destructors[slot - 1] != NULL, ("Unused slot.")); in do_osd_del()
339 osdm[type].osd_destructors[slot - 1](osd->osd_slots[slot - 1]); in do_osd_del()
353 mtx_lock(&osdm[type].osd_list_lock); in do_osd_del()
356 mtx_unlock(&osdm[type].osd_list_lock); in do_osd_del()
382 KASSERT(method < osdm[type].osd_nmethods, ("Invalid method.")); in osd_call()
389 sx_slock(&osdm[type].osd_module_lock); in osd_call()
390 for (i = 0; i < osdm[type].osd_ntslots; i++) { in osd_call()
392 if (osdm[type].osd_destructors[i] == NULL) in osd_call()
394 methodfun = osdm[type].osd_methods[i * osdm[type].osd_nmethods + in osd_call()
399 sx_sunlock(&osdm[type].osd_module_lock); in osd_call()
417 rm_rlock(&osdm[type].osd_object_lock, &tracker); in osd_exit()
419 if (osdm[type].osd_destructors[i - 1] != NULL) in osd_exit()
424 rm_runlock(&osdm[type].osd_object_lock, &tracker); in osd_exit()
434 sx_init(&osdm[i].osd_module_lock, "osd_module"); in osd_init()
435 rm_init(&osdm[i].osd_object_lock, "osd_object"); in osd_init()
436 mtx_init(&osdm[i].osd_list_lock, "osd_list", NULL, MTX_DEF); in osd_init()
437 LIST_INIT(&osdm[i].osd_list); in osd_init()
438 osdm[i].osd_destructors = NULL; in osd_init()
439 osdm[i].osd_ntslots = 0; in osd_init()
440 osdm[i].osd_methods = NULL; in osd_init()