Lines Matching refs:avl

1417 smb_avl_create(smb_avl_t *avl, size_t size, size_t offset,  in smb_avl_create()  argument
1420 ASSERT(avl); in smb_avl_create()
1423 rw_init(&avl->avl_lock, NULL, RW_DEFAULT, NULL); in smb_avl_create()
1424 mutex_init(&avl->avl_mutex, NULL, MUTEX_DEFAULT, NULL); in smb_avl_create()
1426 avl->avl_nops = ops; in smb_avl_create()
1427 avl->avl_state = SMB_AVL_STATE_READY; in smb_avl_create()
1428 avl->avl_refcnt = 0; in smb_avl_create()
1429 (void) random_get_pseudo_bytes((uint8_t *)&avl->avl_sequence, in smb_avl_create()
1432 avl_create(&avl->avl_tree, ops->avln_cmp, size, offset); in smb_avl_create()
1441 smb_avl_destroy(smb_avl_t *avl) in smb_avl_destroy() argument
1446 ASSERT(avl); in smb_avl_destroy()
1448 mutex_enter(&avl->avl_mutex); in smb_avl_destroy()
1449 if (avl->avl_state != SMB_AVL_STATE_READY) { in smb_avl_destroy()
1450 mutex_exit(&avl->avl_mutex); in smb_avl_destroy()
1454 avl->avl_state = SMB_AVL_STATE_DESTROYING; in smb_avl_destroy()
1456 while (avl->avl_refcnt > 0) in smb_avl_destroy()
1457 (void) cv_wait(&avl->avl_cv, &avl->avl_mutex); in smb_avl_destroy()
1458 mutex_exit(&avl->avl_mutex); in smb_avl_destroy()
1460 rw_enter(&avl->avl_lock, RW_WRITER); in smb_avl_destroy()
1461 while ((node = avl_destroy_nodes(&avl->avl_tree, &cookie)) != NULL) in smb_avl_destroy()
1462 avl->avl_nops->avln_destroy(node); in smb_avl_destroy()
1464 avl_destroy(&avl->avl_tree); in smb_avl_destroy()
1465 rw_exit(&avl->avl_lock); in smb_avl_destroy()
1467 rw_destroy(&avl->avl_lock); in smb_avl_destroy()
1469 mutex_destroy(&avl->avl_mutex); in smb_avl_destroy()
1470 bzero(avl, sizeof (smb_avl_t)); in smb_avl_destroy()
1483 smb_avl_add(smb_avl_t *avl, void *item) in smb_avl_add() argument
1487 ASSERT(avl); in smb_avl_add()
1490 if (!smb_avl_hold(avl)) in smb_avl_add()
1493 rw_enter(&avl->avl_lock, RW_WRITER); in smb_avl_add()
1494 if (avl_find(&avl->avl_tree, item, &where) != NULL) { in smb_avl_add()
1495 rw_exit(&avl->avl_lock); in smb_avl_add()
1496 smb_avl_rele(avl); in smb_avl_add()
1500 avl_insert(&avl->avl_tree, item, where); in smb_avl_add()
1501 avl->avl_sequence++; in smb_avl_add()
1502 rw_exit(&avl->avl_lock); in smb_avl_add()
1504 smb_avl_rele(avl); in smb_avl_add()
1515 smb_avl_remove(smb_avl_t *avl, void *item) in smb_avl_remove() argument
1520 ASSERT(avl); in smb_avl_remove()
1523 if (!smb_avl_hold(avl)) in smb_avl_remove()
1526 rw_enter(&avl->avl_lock, RW_WRITER); in smb_avl_remove()
1527 if ((rm_item = avl_find(&avl->avl_tree, item, &where)) == NULL) { in smb_avl_remove()
1528 rw_exit(&avl->avl_lock); in smb_avl_remove()
1529 smb_avl_rele(avl); in smb_avl_remove()
1533 avl_remove(&avl->avl_tree, rm_item); in smb_avl_remove()
1534 if (avl->avl_nops->avln_rele(rm_item)) in smb_avl_remove()
1535 avl->avl_nops->avln_destroy(rm_item); in smb_avl_remove()
1536 avl->avl_sequence++; in smb_avl_remove()
1537 rw_exit(&avl->avl_lock); in smb_avl_remove()
1539 smb_avl_rele(avl); in smb_avl_remove()
1552 smb_avl_lookup(smb_avl_t *avl, void *item) in smb_avl_lookup() argument
1556 ASSERT(avl); in smb_avl_lookup()
1559 if (!smb_avl_hold(avl)) in smb_avl_lookup()
1562 rw_enter(&avl->avl_lock, RW_READER); in smb_avl_lookup()
1563 node = avl_find(&avl->avl_tree, item, NULL); in smb_avl_lookup()
1565 avl->avl_nops->avln_hold(node); in smb_avl_lookup()
1566 rw_exit(&avl->avl_lock); in smb_avl_lookup()
1569 smb_avl_rele(avl); in smb_avl_lookup()
1584 smb_avl_release(smb_avl_t *avl, void *item) in smb_avl_release() argument
1586 ASSERT(avl); in smb_avl_release()
1589 if (avl->avl_nops->avln_rele(item)) in smb_avl_release()
1590 avl->avl_nops->avln_destroy(item); in smb_avl_release()
1592 smb_avl_rele(avl); in smb_avl_release()
1600 smb_avl_iterinit(smb_avl_t *avl, smb_avl_cursor_t *cursor) in smb_avl_iterinit() argument
1602 ASSERT(avl); in smb_avl_iterinit()
1606 cursor->avlc_sequence = avl->avl_sequence; in smb_avl_iterinit()
1623 smb_avl_iterate(smb_avl_t *avl, smb_avl_cursor_t *cursor) in smb_avl_iterate() argument
1627 ASSERT(avl); in smb_avl_iterate()
1630 if (!smb_avl_hold(avl)) in smb_avl_iterate()
1633 rw_enter(&avl->avl_lock, RW_READER); in smb_avl_iterate()
1634 if (cursor->avlc_sequence != avl->avl_sequence) { in smb_avl_iterate()
1635 rw_exit(&avl->avl_lock); in smb_avl_iterate()
1636 smb_avl_rele(avl); in smb_avl_iterate()
1641 node = avl_first(&avl->avl_tree); in smb_avl_iterate()
1643 node = AVL_NEXT(&avl->avl_tree, cursor->avlc_next); in smb_avl_iterate()
1646 avl->avl_nops->avln_hold(node); in smb_avl_iterate()
1649 rw_exit(&avl->avl_lock); in smb_avl_iterate()
1652 smb_avl_rele(avl); in smb_avl_iterate()
1663 smb_avl_hold(smb_avl_t *avl) in smb_avl_hold() argument
1665 mutex_enter(&avl->avl_mutex); in smb_avl_hold()
1666 if (avl->avl_state != SMB_AVL_STATE_READY) { in smb_avl_hold()
1667 mutex_exit(&avl->avl_mutex); in smb_avl_hold()
1670 avl->avl_refcnt++; in smb_avl_hold()
1671 mutex_exit(&avl->avl_mutex); in smb_avl_hold()
1683 smb_avl_rele(smb_avl_t *avl) in smb_avl_rele() argument
1685 mutex_enter(&avl->avl_mutex); in smb_avl_rele()
1686 ASSERT(avl->avl_refcnt > 0); in smb_avl_rele()
1687 avl->avl_refcnt--; in smb_avl_rele()
1688 if (avl->avl_state == SMB_AVL_STATE_DESTROYING) in smb_avl_rele()
1689 cv_broadcast(&avl->avl_cv); in smb_avl_rele()
1690 mutex_exit(&avl->avl_mutex); in smb_avl_rele()