Lines Matching refs:tree

200 static void smb_tree_netinfo_init(smb_tree_t *tree, smb_netconnectinfo_t *);
308 smb_tree_disconnect(smb_tree_t *tree, boolean_t do_exec) in smb_tree_disconnect() argument
313 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_disconnect()
315 mutex_enter(&tree->t_mutex); in smb_tree_disconnect()
316 ASSERT(tree->t_refcnt); in smb_tree_disconnect()
318 if (!smb_tree_is_connected_locked(tree)) { in smb_tree_disconnect()
319 mutex_exit(&tree->t_mutex); in smb_tree_disconnect()
326 tree->t_state = SMB_TREE_STATE_DISCONNECTING; in smb_tree_disconnect()
327 mutex_exit(&tree->t_mutex); in smb_tree_disconnect()
332 smb_ofile_close_all(tree, 0); in smb_tree_disconnect()
336 smb_tree_close_odirs(tree, 0); in smb_tree_disconnect()
338 if ((tree->t_execflags & SMB_EXEC_UNMAP) != 0) { in smb_tree_disconnect()
339 smb_tree_set_execinfo(tree, &execinfo, SMB_EXEC_UNMAP); in smb_tree_disconnect()
340 (void) smb_kshare_exec(tree->t_server, &execinfo); in smb_tree_disconnect()
349 smb_tree_t *tree) in smb_tree_hold() argument
351 SMB_TREE_VALID(tree); in smb_tree_hold()
353 mutex_enter(&tree->t_mutex); in smb_tree_hold()
355 if (smb_tree_is_connected_locked(tree)) { in smb_tree_hold()
356 tree->t_refcnt++; in smb_tree_hold()
357 mutex_exit(&tree->t_mutex); in smb_tree_hold()
361 mutex_exit(&tree->t_mutex); in smb_tree_hold()
375 smb_tree_t *tree) in smb_tree_hold_internal() argument
377 SMB_TREE_VALID(tree); in smb_tree_hold_internal()
379 mutex_enter(&tree->t_mutex); in smb_tree_hold_internal()
380 tree->t_refcnt++; in smb_tree_hold_internal()
381 mutex_exit(&tree->t_mutex); in smb_tree_hold_internal()
392 smb_tree_t *tree) in smb_tree_release() argument
394 SMB_TREE_VALID(tree); in smb_tree_release()
397 smb_lavl_flush(&tree->t_ofile_list); in smb_tree_release()
398 smb_llist_flush(&tree->t_odir_list); in smb_tree_release()
400 mutex_enter(&tree->t_mutex); in smb_tree_release()
401 ASSERT(tree->t_refcnt); in smb_tree_release()
402 tree->t_refcnt--; in smb_tree_release()
404 switch (tree->t_state) { in smb_tree_release()
406 if (tree->t_refcnt == 0) { in smb_tree_release()
407 smb_session_t *ssn = tree->t_session; in smb_tree_release()
408 tree->t_state = SMB_TREE_STATE_DISCONNECTED; in smb_tree_release()
409 smb_llist_post(&ssn->s_tree_list, tree, in smb_tree_release()
420 mutex_exit(&tree->t_mutex); in smb_tree_release()
428 smb_tree_t *tree, in smb_tree_close_pid() argument
431 ASSERT(tree); in smb_tree_close_pid()
432 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_close_pid()
434 smb_ofile_close_all(tree, pid); in smb_tree_close_pid()
435 smb_tree_close_odirs(tree, pid); in smb_tree_close_pid()
442 smb_tree_has_feature(smb_tree_t *tree, uint32_t flags) in smb_tree_has_feature() argument
444 ASSERT(tree); in smb_tree_has_feature()
445 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_has_feature()
447 return ((tree->t_flags & flags) == flags); in smb_tree_has_feature()
457 smb_tree_enum(smb_tree_t *tree, smb_svcenum_t *svcenum) in smb_tree_enum() argument
464 return (smb_tree_enum_private(tree, svcenum)); in smb_tree_enum()
466 lavl = &tree->t_ofile_list; in smb_tree_enum()
489 smb_tree_fclose(smb_tree_t *tree, uint32_t uniqid) in smb_tree_fclose() argument
493 ASSERT(tree); in smb_tree_fclose()
494 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_fclose()
501 if ((of = smb_ofile_lookup_by_uniqid(tree, uniqid)) == NULL) in smb_tree_fclose()
674 smb_tree_t *tree; in smb_tree_connect_disk() local
750 tree = smb_tree_alloc(sr, si, snode, access, sr->sr_cfg->skc_execflags); in smb_tree_connect_disk()
752 if (tree == NULL) in smb_tree_connect_disk()
755 if (tree->t_flags & SMB_TREE_SHORTNAMES) in smb_tree_connect_disk()
758 if (tree->t_execflags & SMB_EXEC_MAP) { in smb_tree_connect_disk()
759 smb_tree_set_execinfo(tree, &execinfo, SMB_EXEC_MAP); in smb_tree_connect_disk()
761 rc = smb_kshare_exec(tree->t_server, &execinfo); in smb_tree_connect_disk()
763 if ((rc != 0) && (tree->t_execflags & SMB_EXEC_TERM)) { in smb_tree_connect_disk()
771 mutex_enter(&tree->t_mutex); in smb_tree_connect_disk()
772 tree->t_state = SMB_TREE_STATE_DISCONNECTING; in smb_tree_connect_disk()
773 mutex_exit(&tree->t_mutex); in smb_tree_connect_disk()
775 smb_tree_release(tree); in smb_tree_connect_disk()
780 sr->tid_tree = tree; in smb_tree_connect_disk()
781 sr->smb_tid = tree->t_tid; in smb_tree_connect_disk()
803 smb_tree_t *tree; in smb_tree_connect_printq() local
850 tree = smb_tree_alloc(sr, si, snode, access, sr->sr_cfg->skc_execflags); in smb_tree_connect_printq()
854 if (tree == NULL) in smb_tree_connect_printq()
857 sr->tid_tree = tree; in smb_tree_connect_printq()
858 sr->smb_tid = tree->t_tid; in smb_tree_connect_printq()
872 smb_tree_t *tree; in smb_tree_connect_ipc() local
893 tree = smb_tree_alloc(sr, si, NULL, ACE_ALL_PERMS, 0); in smb_tree_connect_ipc()
894 if (tree == NULL) in smb_tree_connect_ipc()
897 sr->tid_tree = tree; in smb_tree_connect_ipc()
898 sr->smb_tid = tree->t_tid; in smb_tree_connect_ipc()
911 smb_tree_t *tree; in smb_tree_alloc() local
918 tree = kmem_cache_alloc(smb_cache_tree, KM_SLEEP); in smb_tree_alloc()
919 bzero(tree, sizeof (smb_tree_t)); in smb_tree_alloc()
921 tree->t_session = session; in smb_tree_alloc()
922 tree->t_server = session->s_server; in smb_tree_alloc()
925 if (smb_tree_getattr(si, snode, tree) != 0) { in smb_tree_alloc()
927 kmem_cache_free(smb_cache_tree, tree); in smb_tree_alloc()
932 if (smb_idpool_constructor(&tree->t_fid_pool)) { in smb_tree_alloc()
934 kmem_cache_free(smb_cache_tree, tree); in smb_tree_alloc()
938 if (smb_idpool_constructor(&tree->t_odid_pool)) { in smb_tree_alloc()
939 smb_idpool_destructor(&tree->t_fid_pool); in smb_tree_alloc()
941 kmem_cache_free(smb_cache_tree, tree); in smb_tree_alloc()
945 smb_lavl_constructor(&tree->t_ofile_list, in smb_tree_alloc()
949 smb_llist_constructor(&tree->t_odir_list, sizeof (smb_odir_t), in smb_tree_alloc()
952 (void) strlcpy(tree->t_sharename, si->shr_name, in smb_tree_alloc()
953 sizeof (tree->t_sharename)); in smb_tree_alloc()
954 (void) strlcpy(tree->t_resource, si->shr_path, in smb_tree_alloc()
955 sizeof (tree->t_resource)); in smb_tree_alloc()
957 mutex_init(&tree->t_mutex, NULL, MUTEX_DEFAULT, NULL); in smb_tree_alloc()
959 tree->t_refcnt = 1; in smb_tree_alloc()
960 tree->t_tid = tid; in smb_tree_alloc()
961 tree->t_res_type = stype; in smb_tree_alloc()
962 tree->t_state = SMB_TREE_STATE_CONNECTED; in smb_tree_alloc()
963 tree->t_magic = SMB_TREE_MAGIC; in smb_tree_alloc()
964 tree->t_access = access; in smb_tree_alloc()
965 tree->t_connect_time = gethrestime_sec(); in smb_tree_alloc()
966 tree->t_execflags = execflags; in smb_tree_alloc()
971 tree->t_owner = sr->uid_user; in smb_tree_alloc()
974 if (tree->t_flags & SMB_TREE_READONLY) in smb_tree_alloc()
975 tree->t_access &= ~ACE_ALL_WRITE_PERMS; in smb_tree_alloc()
979 tree->t_snode = snode; in smb_tree_alloc()
980 tree->t_acltype = smb_fsop_acltype(snode); in smb_tree_alloc()
984 smb_llist_insert_head(&session->s_tree_list, tree); in smb_tree_alloc()
988 return (tree); in smb_tree_alloc()
1002 smb_tree_t *tree = (smb_tree_t *)arg; in smb_tree_dealloc() local
1004 SMB_TREE_VALID(tree); in smb_tree_dealloc()
1005 ASSERT(tree->t_state == SMB_TREE_STATE_DISCONNECTED); in smb_tree_dealloc()
1006 ASSERT(tree->t_refcnt == 0); in smb_tree_dealloc()
1008 smb_server_dec_trees(tree->t_server); in smb_tree_dealloc()
1010 session = tree->t_session; in smb_tree_dealloc()
1012 smb_llist_remove(&session->s_tree_list, tree); in smb_tree_dealloc()
1013 smb_idpool_free(&session->s_tid_pool, tree->t_tid); in smb_tree_dealloc()
1024 mutex_enter(&tree->t_mutex); in smb_tree_dealloc()
1025 mutex_exit(&tree->t_mutex); in smb_tree_dealloc()
1027 tree->t_magic = (uint32_t)~SMB_TREE_MAGIC; in smb_tree_dealloc()
1029 if (tree->t_snode) in smb_tree_dealloc()
1030 smb_node_release(tree->t_snode); in smb_tree_dealloc()
1032 mutex_destroy(&tree->t_mutex); in smb_tree_dealloc()
1033 smb_lavl_destructor(&tree->t_ofile_list); in smb_tree_dealloc()
1034 smb_llist_destructor(&tree->t_odir_list); in smb_tree_dealloc()
1035 smb_idpool_destructor(&tree->t_fid_pool); in smb_tree_dealloc()
1036 smb_idpool_destructor(&tree->t_odid_pool); in smb_tree_dealloc()
1038 SMB_USER_VALID(tree->t_owner); in smb_tree_dealloc()
1039 smb_user_dec_trees(tree->t_owner); in smb_tree_dealloc()
1040 smb_user_release(tree->t_owner); in smb_tree_dealloc()
1042 kmem_cache_free(smb_cache_tree, tree); in smb_tree_dealloc()
1050 smb_tree_is_connected_locked(smb_tree_t *tree) in smb_tree_is_connected_locked() argument
1052 switch (tree->t_state) { in smb_tree_is_connected_locked()
1107 smb_tree_getattr(const smb_kshare_t *si, smb_node_t *node, smb_tree_t *tree) in smb_tree_getattr() argument
1114 smb_tree_get_creation(node, tree); in smb_tree_getattr()
1115 smb_tree_get_volname(vfsp, tree); in smb_tree_getattr()
1124 smb_tree_get_flags(si, realvfsp, tree); in smb_tree_getattr()
1130 smb_tree_get_flags(si, vfsp, tree); in smb_tree_getattr()
1133 if (tree->t_session->dialect >= SMB_VERS_3_0) in smb_tree_getattr()
1134 tree->t_encrypt = si->shr_encrypt; in smb_tree_getattr()
1136 tree->t_encrypt = SMB_CONFIG_DISABLED; in smb_tree_getattr()
1145 smb_tree_get_creation(smb_node_t *node, smb_tree_t *tree) in smb_tree_get_creation() argument
1155 tree->t_create_time = attr.sa_crtime; in smb_tree_get_creation()
1162 smb_tree_get_volname(vfs_t *vfsp, smb_tree_t *tree) in smb_tree_get_volname() argument
1166 (void) strlcpy(tree->t_volume, "fake", SMB_VOLNAMELEN); in smb_tree_get_volname()
1176 (void) strlcpy(tree->t_volume, s, SMB_VOLNAMELEN); in smb_tree_get_volname()
1180 name = tree->t_volume; in smb_tree_get_volname()
1197 smb_tree_get_flags(const smb_kshare_t *si, vfs_t *vfsp, smb_tree_t *tree) in smb_tree_get_flags() argument
1199 smb_session_t *ssn = tree->t_session; in smb_tree_get_flags()
1276 (void) strlcpy(tree->t_typename, name, SMB_TYPENAMELEN); in smb_tree_get_flags()
1277 (void) smb_strupr((char *)tree->t_typename); in smb_tree_get_flags()
1300 tree->t_flags = flags; in smb_tree_get_flags()
1351 smb_tree_t *tree = sr->tid_tree; in smb_tree_lookup_odir() local
1353 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_lookup_odir()
1355 od_list = &tree->t_odir_list; in smb_tree_lookup_odir()
1384 smb_tree_is_connected(smb_tree_t *tree) in smb_tree_is_connected() argument
1388 mutex_enter(&tree->t_mutex); in smb_tree_is_connected()
1389 rb = smb_tree_is_connected_locked(tree); in smb_tree_is_connected()
1390 mutex_exit(&tree->t_mutex); in smb_tree_is_connected()
1402 smb_tree_close_odirs(smb_tree_t *tree, uint32_t pid) in smb_tree_close_odirs() argument
1407 ASSERT(tree); in smb_tree_close_odirs()
1408 ASSERT(tree->t_magic == SMB_TREE_MAGIC); in smb_tree_close_odirs()
1410 od_list = &tree->t_odir_list; in smb_tree_close_odirs()
1418 ASSERT(od->d_tree == tree); in smb_tree_close_odirs()
1433 smb_tree_set_execinfo(smb_tree_t *tree, smb_shr_execinfo_t *exec, in smb_tree_set_execinfo() argument
1436 exec->e_sharename = tree->t_sharename; in smb_tree_set_execinfo()
1437 exec->e_winname = tree->t_owner->u_name; in smb_tree_set_execinfo()
1438 exec->e_userdom = tree->t_owner->u_domain; in smb_tree_set_execinfo()
1439 exec->e_srv_ipaddr = tree->t_session->local_ipaddr; in smb_tree_set_execinfo()
1440 exec->e_cli_ipaddr = tree->t_session->ipaddr; in smb_tree_set_execinfo()
1441 exec->e_cli_netbiosname = tree->t_session->workstation; in smb_tree_set_execinfo()
1442 exec->e_uid = crgetuid(tree->t_owner->u_cred); in smb_tree_set_execinfo()
1450 smb_tree_enum_private(smb_tree_t *tree, smb_svcenum_t *svcenum) in smb_tree_enum_private() argument
1467 rc = smb_tree_netinfo_encode(tree, pb, svcenum->se_bavail, &nbytes); in smb_tree_enum_private()
1482 smb_tree_netinfo_encode(smb_tree_t *tree, uint8_t *buf, size_t buflen, in smb_tree_netinfo_encode() argument
1488 smb_tree_netinfo_init(tree, &info); in smb_tree_netinfo_encode()
1496 smb_tree_netinfo_username(smb_tree_t *tree, char **namestr, uint32_t *namelen) in smb_tree_netinfo_username() argument
1498 smb_user_t *user = tree->t_owner; in smb_tree_netinfo_username()
1521 smb_tree_netinfo_init(smb_tree_t *tree, smb_netconnectinfo_t *info) in smb_tree_netinfo_init() argument
1523 ASSERT(tree); in smb_tree_netinfo_init()
1525 info->ci_id = tree->t_tid; in smb_tree_netinfo_init()
1526 info->ci_type = tree->t_res_type; in smb_tree_netinfo_init()
1527 info->ci_numopens = tree->t_open_files; in smb_tree_netinfo_init()
1528 info->ci_numusers = tree->t_refcnt; in smb_tree_netinfo_init()
1529 info->ci_time = gethrestime_sec() - tree->t_connect_time; in smb_tree_netinfo_init()
1531 info->ci_sharelen = strlen(tree->t_sharename) + 1; in smb_tree_netinfo_init()
1532 info->ci_share = smb_mem_strdup(tree->t_sharename); in smb_tree_netinfo_init()
1534 smb_tree_netinfo_username(tree, &info->ci_username, &info->ci_namelen); in smb_tree_netinfo_init()