int dls_vlan_walk(int (*fn)(dls_vlan_t *, void *), void *arg) { dls_vlan_walk_state_t state; rw_enter(&i_dls_vlan_lock, RW_READER); state.fn = fn; state.arg = arg; state.rc = 0; mod_hash_walk(i_dls_vlan_hash, dls_vlan_walker, (void *)&state); rw_exit(&i_dls_vlan_lock); return (state.rc); }
static int drv_fini(void) { int err; boolean_t exist = B_FALSE; rw_enter(&dld_ap_hash_lock, RW_READER); mod_hash_walk(dld_ap_hashp, drv_ap_exist, &exist); rw_exit(&dld_ap_hash_lock); if (exist) return (EBUSY); if ((err = dld_str_fini()) != 0) return (err); drv_secobj_fini(); mod_hash_destroy_idhash(dld_ap_hashp); rw_destroy(&dld_ap_hash_lock); return (0); }