Lines Matching defs:sa
41 #include <sys/sa.h>
326 sa_os_t *sa = hdl->sa_os->os_sa;
342 SA_ATTR_INFO(sa, hdl->sa_bonus_tab,
354 SA_ATTR_INFO(sa, hdl->sa_spill_tab,
408 sa_os_t *sa = os->os_sa;
413 ASSERT(MUTEX_HELD(&sa->sa_lock));
426 if (sa->sa_layout_attr_obj == 0) {
427 sa->sa_layout_attr_obj = zap_create_link(os,
429 sa->sa_master_obj, SA_LAYOUTS, tx);
442 if (sa->sa_attr_table[tb->lot_attrs[i]].sa_length == 0)
446 avl_add(&sa->sa_layout_num_tree, tb);
449 if ((findtb = avl_find(&sa->sa_layout_hash_tree, tb, &loc)) != NULL) {
451 findtb = AVL_NEXT(&sa->sa_layout_hash_tree, findtb)) {
457 avl_add(&sa->sa_layout_hash_tree, tb);
467 sa_os_t *sa = os->os_sa;
470 mutex_enter(&sa->sa_lock);
473 tb = avl_find(&sa->sa_layout_hash_tree, &tbsearch, &loc);
476 tb = AVL_NEXT(&sa->sa_layout_hash_tree, tb)) {
485 avl_numnodes(&sa->sa_layout_num_tree), hash, B_TRUE, tx);
487 mutex_exit(&sa->sa_lock);
537 * first the sa header size
545 sa_find_sizes(sa_os_t *sa, sa_bulk_attr_t *attr_desc, int attr_count,
555 if (buftype == SA_BONUS && sa->sa_force_spill) {
581 is_var_sz = (SA_REGISTERED_LEN(sa, attr_desc[i].sa_attr) == 0);
648 sa_os_t *sa = hdl->sa_os->os_sa;
669 hdrsize = sa_find_sizes(sa, attr_desc, attr_count, hdl->sa_bonus,
692 spillhdrsize = sa_find_sizes(sa, &attr_desc[i],
712 buf_space = (sa->sa_force_spill) ?
727 length = SA_REGISTERED_LEN(sa, attrs[i]);
734 if (buftype == SA_BONUS && !sa->sa_force_spill) {
757 if (sa->sa_attr_table[attrs[i]].sa_length == 0) {
785 if (!sa->sa_force_spill)
807 sa_free_attr_table(sa_os_t *sa)
811 if (sa->sa_attr_table == NULL)
814 for (i = 0; i != sa->sa_num_attrs; i++) {
815 if (sa->sa_attr_table[i].sa_name)
816 kmem_free(sa->sa_attr_table[i].sa_name,
817 strlen(sa->sa_attr_table[i].sa_name) + 1);
820 kmem_free(sa->sa_attr_table,
821 sizeof (sa_attr_table_t) * sa->sa_num_attrs);
823 sa->sa_attr_table = NULL;
829 sa_os_t *sa = os->os_sa;
841 sa->sa_user_table =
843 sa->sa_user_table_sz = count * sizeof (sa_attr_type_t);
845 if (sa->sa_reg_attr_obj != 0) {
846 error = zap_count(os, sa->sa_reg_attr_obj,
872 sa->sa_user_table[i] =
881 if (sa->sa_reg_attr_obj)
882 error = zap_lookup(os, sa->sa_reg_attr_obj,
888 sa->sa_user_table[i] = (sa_attr_type_t)sa_attr_count;
892 sa->sa_user_table[i] = ATTR_NUM(attr_value);
899 sa->sa_num_attrs = sa_attr_count;
900 tb = sa->sa_attr_table =
909 if (sa->sa_reg_attr_obj) {
910 for (zap_cursor_init(&zc, os, sa->sa_reg_attr_obj);
962 attr_id = sa->sa_user_table[i];
975 sa->sa_need_attr_registration =
980 kmem_free(sa->sa_user_table, count * sizeof (sa_attr_type_t));
981 sa->sa_user_table = NULL;
982 sa_free_attr_table(sa);
992 sa_os_t *sa;
1007 sa = kmem_zalloc(sizeof (sa_os_t), KM_SLEEP);
1008 mutex_init(&sa->sa_lock, NULL, MUTEX_DEFAULT, NULL);
1009 sa->sa_master_obj = sa_obj;
1011 os->os_sa = sa;
1012 mutex_enter(&sa->sa_lock);
1014 avl_create(&sa->sa_layout_num_tree, layout_num_compare,
1016 avl_create(&sa->sa_layout_hash_tree, layout_hash_compare,
1021 8, 1, &sa->sa_layout_attr_obj);
1025 8, 1, &sa->sa_reg_attr_obj);
1033 if (sa->sa_layout_attr_obj != 0) {
1036 error = zap_count(os, sa->sa_layout_attr_obj,
1048 for (zap_cursor_init(&zc, os, sa->sa_layout_attr_obj);
1057 if ((error = (zap_lookup(os, sa->sa_layout_attr_obj,
1080 if (avl_numnodes(&sa->sa_layout_num_tree) != layout_count) {
1097 mutex_exit(&sa->sa_lock);
1101 sa_free_attr_table(sa);
1102 if (sa->sa_user_table)
1103 kmem_free(sa->sa_user_table, sa->sa_user_table_sz);
1104 mutex_exit(&sa->sa_lock);
1105 avl_destroy(&sa->sa_layout_hash_tree);
1106 avl_destroy(&sa->sa_layout_num_tree);
1107 mutex_destroy(&sa->sa_lock);
1108 kmem_free(sa, sizeof (sa_os_t));
1115 sa_os_t *sa = os->os_sa;
1119 kmem_free(sa->sa_user_table, sa->sa_user_table_sz);
1123 sa_free_attr_table(sa);
1126 while (layout = avl_destroy_nodes(&sa->sa_layout_hash_tree, &cookie)) {
1135 while (layout = avl_destroy_nodes(&sa->sa_layout_num_tree, &cookie)) {
1141 avl_destroy(&sa->sa_layout_hash_tree);
1142 avl_destroy(&sa->sa_layout_num_tree);
1143 mutex_destroy(&sa->sa_lock);
1145 kmem_free(sa, sizeof (sa_os_t));
1171 sa_os_t *sa = os->os_sa;
1178 tb = avl_find(&sa->sa_layout_num_tree, &search, &loc);
1195 reg_length = sa->sa_attr_table[tb->lot_attrs[i]].sa_length;
1218 sa_os_t *sa = hdl->sa_os->os_sa;
1220 sa_bswap_table[sa->sa_attr_table[attr].sa_byteswap](attr_addr, length);
1228 sa_os_t *sa = hdl->sa_os->os_sa;
1232 ASSERT(MUTEX_HELD(&sa->sa_lock));
1270 sa_os_t *sa = hdl->sa_os->os_sa;
1275 mutex_enter(&sa->sa_lock);
1293 mutex_exit(&sa->sa_lock);
1301 panic("evicting sa dbuf\n");
1307 sa_os_t *sa = os->os_sa;
1313 mutex_enter(&sa->sa_lock);
1322 sizeof (uint32_t) * sa->sa_num_attrs);
1325 mutex_exit(&sa->sa_lock);
1331 sa_os_t *sa = os->os_sa;
1333 ASSERT(MUTEX_HELD(&sa->sa_lock));
1491 sa_os_t *sa = os->os_sa;
1506 tb = avl_find(&sa->sa_layout_num_tree, &search, &loc);
1542 kmem_zalloc(sizeof (uint32_t) * sa->sa_num_attrs, KM_SLEEP);
1571 sa_os_t *sa = hdl->sa_os->os_sa;
1572 sa_attr_table_t *tb = sa->sa_attr_table;
1575 mutex_enter(&sa->sa_lock);
1577 if (!sa->sa_need_attr_registration || sa->sa_master_obj == NULL) {
1578 mutex_exit(&sa->sa_lock);
1582 if (sa->sa_reg_attr_obj == NULL) {
1583 sa->sa_reg_attr_obj = zap_create_link(hdl->sa_os,
1585 sa->sa_master_obj, SA_REGISTRY, tx);
1587 for (i = 0; i != sa->sa_num_attrs; i++) {
1588 if (sa->sa_attr_table[i].sa_registered)
1592 VERIFY(0 == zap_update(hdl->sa_os, sa->sa_reg_attr_obj,
1596 sa->sa_need_attr_registration = B_FALSE;
1597 mutex_exit(&sa->sa_lock);
1613 sa_os_t *sa = hdl->sa_os->os_sa;
1615 if (sa->sa_need_attr_registration)
1645 sa_os_t *sa = hdl->sa_os->os_sa;
1724 reg_length = SA_REGISTERED_LEN(sa, attr);
1769 reg_length = SA_REGISTERED_LEN(sa, newattr);
1792 sa_os_t *sa = hdl->sa_os->os_sa;
1801 if (sa->sa_need_attr_registration)
1805 if (error == 0 && !IS_SA_BONUSTYPE(bonustype) && sa->sa_update_cb)
1806 sa->sa_update_cb(hdl, tx);
1982 sa_os_t *sa = os->os_sa;
1984 if (sa->sa_master_obj)
1987 sa->sa_master_obj = sa_object;