Lines Matching refs:sv

421 	smb_server_t	*sv;  in smb_server_create()  local
426 sv = smb_llist_head(&smb_servers); in smb_server_create()
427 while (sv != NULL) { in smb_server_create()
428 SMB_SERVER_VALID(sv); in smb_server_create()
429 if (sv->sv_zid == zid) { in smb_server_create()
433 sv = smb_llist_next(&smb_servers, sv); in smb_server_create()
436 sv = kmem_zalloc(sizeof (smb_server_t), KM_SLEEP); in smb_server_create()
438 sv->sv_magic = SMB_SERVER_MAGIC; in smb_server_create()
439 sv->sv_state = SMB_SERVER_STATE_CREATED; in smb_server_create()
440 sv->sv_zid = zid; in smb_server_create()
441 sv->sv_pid = ddi_get_pid(); in smb_server_create()
442 sv->sv_dev = dev; in smb_server_create()
443 sv->sv_proc_state = SMB_THREAD_STATE_EXITED; in smb_server_create()
445 mutex_init(&sv->sv_mutex, NULL, MUTEX_DEFAULT, NULL); in smb_server_create()
446 cv_init(&sv->sv_cv, NULL, CV_DEFAULT, NULL); in smb_server_create()
447 cv_init(&sv->sp_info.sp_cv, NULL, CV_DEFAULT, NULL); in smb_server_create()
449 sv->sv_persistid_ht = smb_hash_create(sizeof (smb_ofile_t), in smb_server_create()
452 sv->sv_lease_ht = smb_hash_create(sizeof (smb_lease_t), in smb_server_create()
455 smb_llist_constructor(&sv->sv_session_list, sizeof (smb_session_t), in smb_server_create()
458 smb_llist_constructor(&sv->sv_event_list, sizeof (smb_event_t), in smb_server_create()
461 smb_llist_constructor(&sv->sp_info.sp_list, sizeof (smb_kspooldoc_t), in smb_server_create()
464 smb_llist_constructor(&sv->sp_info.sp_fidlist, in smb_server_create()
467 sv->sv_disp_stats1 = kmem_zalloc(SMB_COM_NUM * in smb_server_create()
470 sv->sv_disp_stats2 = kmem_zalloc(SMB2__NCMDS * in smb_server_create()
473 smb_thread_init(&sv->si_thread_timers, "smb_timers", in smb_server_create()
474 smb_server_timers, sv, smbsrv_timer_pri, sv); in smb_server_create()
476 smb_srqueue_init(&sv->sv_srqueue); in smb_server_create()
478 smb_kdoor_init(sv); in smb_server_create()
479 smb_kshare_init(sv); in smb_server_create()
480 smb_server_kstat_init(sv); in smb_server_create()
482 smb_threshold_init(&sv->sv_ssetup_ct, SMB_SSETUP_CMD, in smb_server_create()
484 smb_threshold_init(&sv->sv_tcon_ct, SMB_TCON_CMD, in smb_server_create()
486 smb_threshold_init(&sv->sv_opipe_ct, SMB_OPIPE_CMD, in smb_server_create()
488 smb_threshold_init(&sv->sv_logoff_ct, SMB_LOGOFF_CMD, in smb_server_create()
491 smb_llist_insert_tail(&smb_servers, sv); in smb_server_create()
506 smb_server_delete(smb_server_t *sv) in smb_server_delete() argument
509 mutex_enter(&sv->sv_mutex); in smb_server_delete()
510 switch (sv->sv_state) { in smb_server_delete()
512 sv->sv_state = SMB_SERVER_STATE_STOPPING; in smb_server_delete()
513 mutex_exit(&sv->sv_mutex); in smb_server_delete()
514 smb_server_shutdown(sv); in smb_server_delete()
515 mutex_enter(&sv->sv_mutex); in smb_server_delete()
516 cv_broadcast(&sv->sp_info.sp_cv); in smb_server_delete()
517 sv->sv_state = SMB_SERVER_STATE_DELETING; in smb_server_delete()
520 sv->sv_state = SMB_SERVER_STATE_DELETING; in smb_server_delete()
524 sv->sv_state = SMB_SERVER_STATE_DELETING; in smb_server_delete()
527 SMB_SERVER_STATE_VALID(sv->sv_state); in smb_server_delete()
528 mutex_exit(&sv->sv_mutex); in smb_server_delete()
529 smb_server_release(sv); in smb_server_delete()
533 ASSERT(sv->sv_state == SMB_SERVER_STATE_DELETING); in smb_server_delete()
535 sv->sv_refcnt--; in smb_server_delete()
536 while (sv->sv_refcnt) in smb_server_delete()
537 cv_wait(&sv->sv_cv, &sv->sv_mutex); in smb_server_delete()
539 mutex_exit(&sv->sv_mutex); in smb_server_delete()
542 smb_llist_remove(&smb_servers, sv); in smb_server_delete()
545 smb_threshold_fini(&sv->sv_ssetup_ct); in smb_server_delete()
546 smb_threshold_fini(&sv->sv_tcon_ct); in smb_server_delete()
547 smb_threshold_fini(&sv->sv_opipe_ct); in smb_server_delete()
548 smb_threshold_fini(&sv->sv_logoff_ct); in smb_server_delete()
550 smb_server_listener_destroy(&sv->sv_nbt_daemon); in smb_server_delete()
551 smb_server_listener_destroy(&sv->sv_tcp_daemon); in smb_server_delete()
552 rw_destroy(&sv->sv_cfg_lock); in smb_server_delete()
553 smb_server_kstat_fini(sv); in smb_server_delete()
554 smb_kshare_fini(sv); in smb_server_delete()
555 smb_kdoor_fini(sv); in smb_server_delete()
556 smb_llist_destructor(&sv->sv_event_list); in smb_server_delete()
557 smb_llist_destructor(&sv->sv_session_list); in smb_server_delete()
559 kmem_free(sv->sv_disp_stats1, in smb_server_delete()
562 kmem_free(sv->sv_disp_stats2, in smb_server_delete()
565 smb_srqueue_destroy(&sv->sv_srqueue); in smb_server_delete()
566 smb_thread_destroy(&sv->si_thread_timers); in smb_server_delete()
568 mutex_destroy(&sv->sv_mutex); in smb_server_delete()
569 smb_hash_destroy(sv->sv_lease_ht); in smb_server_delete()
570 smb_hash_destroy(sv->sv_persistid_ht); in smb_server_delete()
571 cv_destroy(&sv->sv_cv); in smb_server_delete()
572 sv->sv_magic = 0; in smb_server_delete()
573 kmem_free(sv, sizeof (smb_server_t)); in smb_server_delete()
584 smb_server_configure(smb_server_t *sv, smb_ioc_cfg_t *ioc) in smb_server_configure() argument
594 mutex_enter(&sv->sv_mutex); in smb_server_configure()
595 switch (sv->sv_state) { in smb_server_configure()
597 smb_server_store_cfg(sv, ioc); in smb_server_configure()
598 sv->sv_state = SMB_SERVER_STATE_CONFIGURED; in smb_server_configure()
602 smb_server_store_cfg(sv, ioc); in smb_server_configure()
607 rw_enter(&sv->sv_cfg_lock, RW_WRITER); in smb_server_configure()
608 smb_server_store_cfg(sv, ioc); in smb_server_configure()
609 rw_exit(&sv->sv_cfg_lock); in smb_server_configure()
613 SMB_SERVER_STATE_VALID(sv->sv_state); in smb_server_configure()
617 mutex_exit(&sv->sv_mutex); in smb_server_configure()
629 smb_server_start(smb_server_t *sv, smb_ioc_start_t *ioc) in smb_server_start() argument
636 mutex_enter(&sv->sv_mutex); in smb_server_start()
637 switch (sv->sv_state) { in smb_server_start()
642 rc = smb_server_newproc(sv); in smb_server_start()
648 if ((rc = smb_server_fsop_start(sv)) != 0) in smb_server_start()
654 sv->sv_session = smb_session_create(NULL, 0, sv, 0); in smb_server_start()
655 if (sv->sv_session == NULL) { in smb_server_start()
664 sv->sv_rootuser = smb_user_new(sv->sv_session); in smb_server_start()
666 rc = smb_user_logon(sv->sv_rootuser, ucr, "", "root", in smb_server_start()
676 if ((rc = smb_kshare_start(sv)) != 0) in smb_server_start()
688 tqproc = (sv->sv_proc_p != NULL) ? in smb_server_start()
689 sv->sv_proc_p : curzone->zone_zsched; in smb_server_start()
691 sv->sv_notify_pool = taskq_create_proc("smb_notify", in smb_server_start()
692 sv->sv_cfg.skc_maxworkers / 4, smbsrv_notify_pri, in smb_server_start()
693 sv->sv_cfg.skc_maxworkers / 4, INT_MAX, in smb_server_start()
696 sv->sv_worker_pool = taskq_create_proc("smb_workers", in smb_server_start()
697 sv->sv_cfg.skc_maxworkers, smbsrv_worker_pri, in smb_server_start()
698 sv->sv_cfg.skc_maxworkers, INT_MAX, in smb_server_start()
701 sv->sv_receiver_pool = taskq_create_proc("smb_receivers", in smb_server_start()
702 sv->sv_cfg.skc_maxconnections, smbsrv_receive_pri, in smb_server_start()
703 sv->sv_cfg.skc_maxconnections, INT_MAX, in smb_server_start()
706 if (sv->sv_notify_pool == NULL || in smb_server_start()
707 sv->sv_worker_pool == NULL || in smb_server_start()
708 sv->sv_receiver_pool == NULL) { in smb_server_start()
714 ASSERT(sv->sv_lmshrd == NULL); in smb_server_start()
715 sv->sv_lmshrd = smb_kshare_door_init(ioc->lmshrd); in smb_server_start()
716 if (sv->sv_lmshrd == NULL) in smb_server_start()
718 if ((rc = smb_kdoor_open(sv, ioc->udoor)) != 0) { in smb_server_start()
724 fksmb_kdoor_open(sv, ioc->udoor_func); in smb_server_start()
727 if ((rc = smb_thread_start(&sv->si_thread_timers)) != 0) in smb_server_start()
731 smb_server_listener_init(sv, &sv->sv_nbt_daemon, in smb_server_start()
733 if (sv->sv_cfg.skc_ipv6_enable) in smb_server_start()
735 smb_server_listener_init(sv, &sv->sv_tcp_daemon, in smb_server_start()
737 rc = smb_server_listener_start(&sv->sv_tcp_daemon); in smb_server_start()
740 if (sv->sv_cfg.skc_netbios_enable) in smb_server_start()
741 (void) smb_server_listener_start(&sv->sv_nbt_daemon); in smb_server_start()
743 sv->sv_state = SMB_SERVER_STATE_RUNNING; in smb_server_start()
744 sv->sv_start_time = gethrtime(); in smb_server_start()
745 mutex_exit(&sv->sv_mutex); in smb_server_start()
746 smb_export_start(sv); in smb_server_start()
749 SMB_SERVER_STATE_VALID(sv->sv_state); in smb_server_start()
750 mutex_exit(&sv->sv_mutex); in smb_server_start()
754 mutex_exit(&sv->sv_mutex); in smb_server_start()
755 smb_server_shutdown(sv); in smb_server_start()
763 smb_server_stop(smb_server_t *sv) in smb_server_stop() argument
766 mutex_enter(&sv->sv_mutex); in smb_server_stop()
767 switch (sv->sv_state) { in smb_server_stop()
769 sv->sv_state = SMB_SERVER_STATE_STOPPING; in smb_server_stop()
770 mutex_exit(&sv->sv_mutex); in smb_server_stop()
771 smb_server_shutdown(sv); in smb_server_stop()
772 mutex_enter(&sv->sv_mutex); in smb_server_stop()
773 cv_broadcast(&sv->sp_info.sp_cv); in smb_server_stop()
776 SMB_SERVER_STATE_VALID(sv->sv_state); in smb_server_stop()
779 mutex_exit(&sv->sv_mutex); in smb_server_stop()
785 smb_server_is_stopping(smb_server_t *sv) in smb_server_is_stopping() argument
789 SMB_SERVER_VALID(sv); in smb_server_is_stopping()
791 mutex_enter(&sv->sv_mutex); in smb_server_is_stopping()
793 switch (sv->sv_state) { in smb_server_is_stopping()
803 mutex_exit(&sv->sv_mutex); in smb_server_is_stopping()
808 smb_server_cancel_event(smb_server_t *sv, uint32_t txid) in smb_server_cancel_event() argument
810 smb_event_cancel(sv, txid); in smb_server_cancel_event()
814 smb_server_notify_event(smb_server_t *sv, smb_ioc_event_t *ioc) in smb_server_notify_event() argument
817 smb_event_notify(sv, ioc->txid); in smb_server_notify_event()
833 smb_server_spooldoc(smb_server_t *sv, smb_ioc_spooldoc_t *ioc) in smb_server_spooldoc() argument
839 if (sv->sv_cfg.skc_print_enable == 0) { in smb_server_spooldoc()
844 mutex_enter(&sv->sv_mutex); in smb_server_spooldoc()
846 if (sv->sv_state != SMB_SERVER_STATE_RUNNING) { in smb_server_spooldoc()
850 if ((fid = smb_spool_get_fid(sv)) != 0) { in smb_server_spooldoc()
854 if (cv_wait_sig(&sv->sp_info.sp_cv, &sv->sv_mutex) == 0) { in smb_server_spooldoc()
859 mutex_exit(&sv->sv_mutex); in smb_server_spooldoc()
864 if (smb_spool_lookup_doc_byfid(sv, fid, spdoc)) { in smb_server_spooldoc()
882 smb_server_set_gmtoff(smb_server_t *sv, smb_ioc_gmt_t *ioc) in smb_server_set_gmtoff() argument
885 sv->si_gmtoff = ioc->offset; in smb_server_set_gmtoff()
891 smb_server_numopen(smb_server_t *sv, smb_ioc_opennum_t *ioc) in smb_server_numopen() argument
894 ioc->open_users = sv->sv_users; in smb_server_numopen()
895 ioc->open_trees = sv->sv_trees; in smb_server_numopen()
896 ioc->open_files = sv->sv_files + sv->sv_pipes; in smb_server_numopen()
906 smb_server_enum(smb_server_t *sv, smb_ioc_svcenum_t *ioc) in smb_server_enum() argument
924 smb_server_enum_users(sv, svcenum); in smb_server_enum()
928 smb_server_enum_trees(sv, svcenum); in smb_server_enum()
941 smb_server_session_close(smb_server_t *sv, smb_ioc_session_t *ioc) in smb_server_session_close() argument
945 cnt = smb_server_session_disconnect(sv, ioc->client, ioc->username); in smb_server_session_close()
956 smb_server_file_close(smb_server_t *sv, smb_ioc_fileid_t *ioc) in smb_server_file_close() argument
961 rc = smb_server_fclose(sv, uniqid); in smb_server_file_close()
970 smb_server_get_session_count(smb_server_t *sv) in smb_server_get_session_count() argument
974 counter = smb_llist_get_count(&sv->sv_session_list); in smb_server_get_session_count()
984 smb_server_share_lookup(smb_server_t *sv, const char *shr_path, in smb_server_share_lookup() argument
995 mutex_enter(&sv->sv_mutex); in smb_server_share_lookup()
996 switch (sv->sv_state) { in smb_server_share_lookup()
1000 mutex_exit(&sv->sv_mutex); in smb_server_share_lookup()
1003 mutex_exit(&sv->sv_mutex); in smb_server_share_lookup()
1005 if ((sr = smb_request_alloc(sv->sv_session, 0)) == NULL) { in smb_server_share_lookup()
1015 sv->si_root_smb_node, dnode, last_comp, &fnode); in smb_server_share_lookup()
1043 smb_server_t *sv; in smb_server_share() local
1046 if ((rc = smb_server_lookup(&sv)) == 0) { in smb_server_share()
1047 mutex_enter(&sv->sv_mutex); in smb_server_share()
1048 switch (sv->sv_state) { in smb_server_share()
1050 mutex_exit(&sv->sv_mutex); in smb_server_share()
1051 (void) smb_kshare_upcall(sv->sv_lmshrd, arg, add_share); in smb_server_share()
1054 mutex_exit(&sv->sv_mutex); in smb_server_share()
1057 smb_server_release(sv); in smb_server_share()
1067 smb_server_t *sv; in smb_server_unshare() local
1070 if ((rc = smb_server_lookup(&sv))) in smb_server_unshare()
1073 mutex_enter(&sv->sv_mutex); in smb_server_unshare()
1074 switch (sv->sv_state) { in smb_server_unshare()
1079 mutex_exit(&sv->sv_mutex); in smb_server_unshare()
1080 smb_server_release(sv); in smb_server_unshare()
1083 mutex_exit(&sv->sv_mutex); in smb_server_unshare()
1085 smb_server_disconnect_share(sv, sharename); in smb_server_unshare()
1087 smb_server_release(sv); in smb_server_unshare()
1096 smb_server_disconnect_share(smb_server_t *sv, const char *sharename) in smb_server_disconnect_share() argument
1101 ll = &sv->sv_session_list; in smb_server_disconnect_share()
1131 smb_server_newproc(smb_server_t *sv) in smb_server_newproc() argument
1143 mutex_enter(&sv->sv_proc_lock); in smb_server_newproc()
1144 if (sv->sv_proc_p != NULL) { in smb_server_newproc()
1150 sv->sv_proc_state = SMB_THREAD_STATE_STARTING; in smb_server_newproc()
1151 rc = newproc(smb_server_proc_main, (caddr_t)sv, in smb_server_newproc()
1159 while (sv->sv_proc_state == SMB_THREAD_STATE_STARTING) { in smb_server_newproc()
1160 cv_wait(&sv->sv_proc_cv, &sv->sv_proc_lock); in smb_server_newproc()
1163 if (sv->sv_proc_state != SMB_THREAD_STATE_RUNNING) { in smb_server_newproc()
1167 ASSERT(sv->sv_proc_p != NULL); in smb_server_newproc()
1170 mutex_exit(&sv->sv_proc_lock); in smb_server_newproc()
1181 smb_server_t *sv = arg; in smb_server_proc_main() local
1186 ASSERT(zid == sv->sv_zid); in smb_server_proc_main()
1192 CALLB_CPR_INIT(&cprinfo, &sv->sv_proc_lock, callb_generic_cpr, in smb_server_proc_main()
1195 mutex_enter(&sv->sv_proc_lock); in smb_server_proc_main()
1196 ASSERT(sv->sv_proc_state == SMB_THREAD_STATE_STARTING); in smb_server_proc_main()
1198 sv->sv_proc_p = curproc; in smb_server_proc_main()
1199 sv->sv_proc_did = curthread->t_did; in smb_server_proc_main()
1201 sv->sv_proc_state = SMB_THREAD_STATE_RUNNING; in smb_server_proc_main()
1202 cv_broadcast(&sv->sv_proc_cv); in smb_server_proc_main()
1205 while (sv->sv_proc_state == SMB_THREAD_STATE_RUNNING) in smb_server_proc_main()
1206 cv_wait(&sv->sv_proc_cv, &sv->sv_proc_lock); in smb_server_proc_main()
1207 CALLB_CPR_SAFE_END(&cprinfo, &sv->sv_proc_lock); in smb_server_proc_main()
1209 ASSERT(sv->sv_proc_state == SMB_THREAD_STATE_EXITING); in smb_server_proc_main()
1210 sv->sv_proc_state = SMB_THREAD_STATE_EXITED; in smb_server_proc_main()
1211 sv->sv_proc_p = NULL; in smb_server_proc_main()
1212 cv_broadcast(&sv->sv_proc_cv); in smb_server_proc_main()
1224 smb_server_delproc(smb_server_t *sv) in smb_server_delproc() argument
1227 mutex_enter(&sv->sv_proc_lock); in smb_server_delproc()
1229 if (sv->sv_proc_state != SMB_THREAD_STATE_RUNNING) in smb_server_delproc()
1231 ASSERT(sv->sv_proc_p != NULL); in smb_server_delproc()
1233 sv->sv_proc_state = SMB_THREAD_STATE_EXITING; in smb_server_delproc()
1234 cv_broadcast(&sv->sv_proc_cv); in smb_server_delproc()
1237 while (sv->sv_proc_state == SMB_THREAD_STATE_EXITING) { in smb_server_delproc()
1238 cv_wait(&sv->sv_proc_cv, &sv->sv_proc_lock); in smb_server_delproc()
1241 if (sv->sv_proc_state != SMB_THREAD_STATE_EXITED) { in smb_server_delproc()
1243 sv->sv_proc_state); in smb_server_delproc()
1246 if (sv->sv_proc_did != 0) { in smb_server_delproc()
1247 thread_join(sv->sv_proc_did); in smb_server_delproc()
1248 sv->sv_proc_did = 0; in smb_server_delproc()
1252 mutex_exit(&sv->sv_proc_lock); in smb_server_delproc()
1266 smb_server_get_cfg(smb_server_t *sv, smb_kmod_cfg_t *cfg) in smb_server_get_cfg() argument
1268 rw_enter(&sv->sv_cfg_lock, RW_READER); in smb_server_get_cfg()
1269 bcopy(&sv->sv_cfg, cfg, sizeof (*cfg)); in smb_server_get_cfg()
1270 rw_exit(&sv->sv_cfg_lock); in smb_server_get_cfg()
1277 smb_server_inc_nbt_sess(smb_server_t *sv) in smb_server_inc_nbt_sess() argument
1279 SMB_SERVER_VALID(sv); in smb_server_inc_nbt_sess()
1280 atomic_inc_32(&sv->sv_nbt_sess); in smb_server_inc_nbt_sess()
1284 smb_server_dec_nbt_sess(smb_server_t *sv) in smb_server_dec_nbt_sess() argument
1286 SMB_SERVER_VALID(sv); in smb_server_dec_nbt_sess()
1287 atomic_dec_32(&sv->sv_nbt_sess); in smb_server_dec_nbt_sess()
1291 smb_server_inc_tcp_sess(smb_server_t *sv) in smb_server_inc_tcp_sess() argument
1293 SMB_SERVER_VALID(sv); in smb_server_inc_tcp_sess()
1294 atomic_inc_32(&sv->sv_tcp_sess); in smb_server_inc_tcp_sess()
1298 smb_server_dec_tcp_sess(smb_server_t *sv) in smb_server_dec_tcp_sess() argument
1300 SMB_SERVER_VALID(sv); in smb_server_dec_tcp_sess()
1301 atomic_dec_32(&sv->sv_tcp_sess); in smb_server_dec_tcp_sess()
1305 smb_server_inc_users(smb_server_t *sv) in smb_server_inc_users() argument
1307 SMB_SERVER_VALID(sv); in smb_server_inc_users()
1308 atomic_inc_32(&sv->sv_users); in smb_server_inc_users()
1312 smb_server_dec_users(smb_server_t *sv) in smb_server_dec_users() argument
1314 SMB_SERVER_VALID(sv); in smb_server_dec_users()
1315 atomic_dec_32(&sv->sv_users); in smb_server_dec_users()
1319 smb_server_inc_trees(smb_server_t *sv) in smb_server_inc_trees() argument
1321 SMB_SERVER_VALID(sv); in smb_server_inc_trees()
1322 atomic_inc_32(&sv->sv_trees); in smb_server_inc_trees()
1326 smb_server_dec_trees(smb_server_t *sv) in smb_server_dec_trees() argument
1328 SMB_SERVER_VALID(sv); in smb_server_dec_trees()
1329 atomic_dec_32(&sv->sv_trees); in smb_server_dec_trees()
1333 smb_server_inc_files(smb_server_t *sv) in smb_server_inc_files() argument
1335 SMB_SERVER_VALID(sv); in smb_server_inc_files()
1336 atomic_inc_32(&sv->sv_files); in smb_server_inc_files()
1340 smb_server_dec_files(smb_server_t *sv) in smb_server_dec_files() argument
1342 SMB_SERVER_VALID(sv); in smb_server_dec_files()
1343 atomic_dec_32(&sv->sv_files); in smb_server_dec_files()
1347 smb_server_inc_pipes(smb_server_t *sv) in smb_server_inc_pipes() argument
1349 SMB_SERVER_VALID(sv); in smb_server_inc_pipes()
1350 atomic_inc_32(&sv->sv_pipes); in smb_server_inc_pipes()
1354 smb_server_dec_pipes(smb_server_t *sv) in smb_server_dec_pipes() argument
1356 SMB_SERVER_VALID(sv); in smb_server_dec_pipes()
1357 atomic_dec_32(&sv->sv_pipes); in smb_server_dec_pipes()
1361 smb_server_add_rxb(smb_server_t *sv, int64_t value) in smb_server_add_rxb() argument
1363 SMB_SERVER_VALID(sv); in smb_server_add_rxb()
1364 atomic_add_64(&sv->sv_rxb, value); in smb_server_add_rxb()
1368 smb_server_add_txb(smb_server_t *sv, int64_t value) in smb_server_add_txb() argument
1370 SMB_SERVER_VALID(sv); in smb_server_add_txb()
1371 atomic_add_64(&sv->sv_txb, value); in smb_server_add_txb()
1375 smb_server_inc_req(smb_server_t *sv) in smb_server_inc_req() argument
1377 SMB_SERVER_VALID(sv); in smb_server_inc_req()
1378 atomic_inc_64(&sv->sv_nreq); in smb_server_inc_req()
1390 smb_server_t *sv = (smb_server_t *)arg; in smb_server_timers() local
1392 ASSERT(sv != NULL); in smb_server_timers()
1399 if (sv->sv_cfg.skc_keepalive != 0) in smb_server_timers()
1400 smb_session_timers(sv); in smb_server_timers()
1401 smb2_durable_timers(sv); in smb_server_timers()
1409 smb_server_kstat_init(smb_server_t *sv) in smb_server_kstat_init() argument
1412 sv->sv_ksp = kstat_create_zone(SMBSRV_KSTAT_MODULE, 0, in smb_server_kstat_init()
1414 sizeof (smbsrv_kstats_t), 0, sv->sv_zid); in smb_server_kstat_init()
1416 if (sv->sv_ksp != NULL) { in smb_server_kstat_init()
1417 sv->sv_ksp->ks_update = smb_server_kstat_update; in smb_server_kstat_init()
1418 sv->sv_ksp->ks_private = sv; in smb_server_kstat_init()
1419 ((smbsrv_kstats_t *)sv->sv_ksp->ks_data)->ks_start_time = in smb_server_kstat_init()
1420 sv->sv_start_time; in smb_server_kstat_init()
1421 smb_dispatch_stats_init(sv); in smb_server_kstat_init()
1422 smb2_dispatch_stats_init(sv); in smb_server_kstat_init()
1423 kstat_install(sv->sv_ksp); in smb_server_kstat_init()
1428 sv->sv_legacy_ksp = kstat_create_zone(SMBSRV_KSTAT_MODULE, 0, in smb_server_kstat_init()
1431 0, sv->sv_zid); in smb_server_kstat_init()
1433 if (sv->sv_legacy_ksp != NULL) { in smb_server_kstat_init()
1436 ksd = sv->sv_legacy_ksp->ks_data; in smb_server_kstat_init()
1450 mutex_init(&sv->sv_legacy_ksmtx, NULL, MUTEX_DEFAULT, NULL); in smb_server_kstat_init()
1451 sv->sv_legacy_ksp->ks_lock = &sv->sv_legacy_ksmtx; in smb_server_kstat_init()
1452 sv->sv_legacy_ksp->ks_update = smb_server_legacy_kstat_update; in smb_server_kstat_init()
1453 kstat_install(sv->sv_legacy_ksp); in smb_server_kstat_init()
1461 smb_server_kstat_fini(smb_server_t *sv) in smb_server_kstat_fini() argument
1463 if (sv->sv_legacy_ksp != NULL) { in smb_server_kstat_fini()
1464 kstat_delete(sv->sv_legacy_ksp); in smb_server_kstat_fini()
1465 mutex_destroy(&sv->sv_legacy_ksmtx); in smb_server_kstat_fini()
1466 sv->sv_legacy_ksp = NULL; in smb_server_kstat_fini()
1469 if (sv->sv_ksp != NULL) { in smb_server_kstat_fini()
1470 kstat_delete(sv->sv_ksp); in smb_server_kstat_fini()
1471 sv->sv_ksp = NULL; in smb_server_kstat_fini()
1472 smb_dispatch_stats_fini(sv); in smb_server_kstat_fini()
1473 smb2_dispatch_stats_fini(sv); in smb_server_kstat_fini()
1489 smb_server_t *sv; in smb_server_kstat_update() local
1493 sv = ksp->ks_private; in smb_server_kstat_update()
1494 SMB_SERVER_VALID(sv); in smb_server_kstat_update()
1499 ksd->ks_nbt_sess = sv->sv_nbt_sess; in smb_server_kstat_update()
1500 ksd->ks_tcp_sess = sv->sv_tcp_sess; in smb_server_kstat_update()
1501 ksd->ks_users = sv->sv_users; in smb_server_kstat_update()
1502 ksd->ks_trees = sv->sv_trees; in smb_server_kstat_update()
1503 ksd->ks_files = sv->sv_files; in smb_server_kstat_update()
1504 ksd->ks_pipes = sv->sv_pipes; in smb_server_kstat_update()
1508 ksd->ks_txb = sv->sv_txb; in smb_server_kstat_update()
1509 ksd->ks_rxb = sv->sv_rxb; in smb_server_kstat_update()
1510 ksd->ks_nreq = sv->sv_nreq; in smb_server_kstat_update()
1514 ksd->ks_maxreqs = sv->sv_cfg.skc_maxworkers; in smb_server_kstat_update()
1515 smb_srqueue_update(&sv->sv_srqueue, in smb_server_kstat_update()
1520 smb_dispatch_stats_update(sv, ksd->ks_reqs1, 0, SMB_COM_NUM); in smb_server_kstat_update()
1521 smb2_dispatch_stats_update(sv, ksd->ks_reqs2, 0, SMB2__NCMDS); in smb_server_kstat_update()
1533 smb_server_t *sv; in smb_server_legacy_kstat_update() local
1542 if (!smb_server_lookup(&sv)) { in smb_server_legacy_kstat_update()
1544 ASSERT(sv->sv_legacy_ksp == ksp); in smb_server_legacy_kstat_update()
1546 ksd->ls_files.value.ui32 = sv->sv_files + sv->sv_pipes; in smb_server_legacy_kstat_update()
1547 ksd->ls_trees.value.ui32 = sv->sv_trees; in smb_server_legacy_kstat_update()
1548 ksd->ls_users.value.ui32 = sv->sv_users; in smb_server_legacy_kstat_update()
1549 smb_server_release(sv); in smb_server_legacy_kstat_update()
1568 smb_server_shutdown(smb_server_t *sv) in smb_server_shutdown() argument
1570 smb_llist_t *sl = &sv->sv_session_list; in smb_server_shutdown()
1574 SMB_SERVER_VALID(sv); in smb_server_shutdown()
1580 smb_server_listener_stop(&sv->sv_nbt_daemon); in smb_server_shutdown()
1581 smb_server_listener_stop(&sv->sv_tcp_daemon); in smb_server_shutdown()
1601 smb_event_cancel(sv, 0); in smb_server_shutdown()
1602 smb_threshold_wake_all(&sv->sv_ssetup_ct); in smb_server_shutdown()
1603 smb_threshold_wake_all(&sv->sv_tcon_ct); in smb_server_shutdown()
1604 smb_threshold_wake_all(&sv->sv_opipe_ct); in smb_server_shutdown()
1605 smb_threshold_wake_all(&sv->sv_logoff_ct); in smb_server_shutdown()
1620 mutex_enter(&sv->sv_mutex); in smb_server_shutdown()
1621 while (sv->sv_session_list.ll_count != 0) { in smb_server_shutdown()
1622 if (cv_timedwait(&sv->sv_cv, &sv->sv_mutex, time1) < 0) { in smb_server_shutdown()
1626 sv->sv_session_list.ll_count); in smb_server_shutdown()
1627 DTRACE_PROBE1(max__wait, smb_server_t *, sv); in smb_server_shutdown()
1631 while (sv->sv_session_list.ll_count != 0) { in smb_server_shutdown()
1632 cv_wait(&sv->sv_cv, &sv->sv_mutex); in smb_server_shutdown()
1634 mutex_exit(&sv->sv_mutex); in smb_server_shutdown()
1643 smb_kdoor_close(sv); in smb_server_shutdown()
1645 smb_kshare_door_fini(sv->sv_lmshrd); in smb_server_shutdown()
1647 sv->sv_lmshrd = NULL; in smb_server_shutdown()
1649 smb_export_stop(sv); in smb_server_shutdown()
1650 smb_kshare_stop(sv); in smb_server_shutdown()
1651 smb_thread_stop(&sv->si_thread_timers); in smb_server_shutdown()
1662 if (sv->sv_rootuser != NULL) { in smb_server_shutdown()
1663 smb_user_logoff(sv->sv_rootuser); in smb_server_shutdown()
1664 smb_user_release(sv->sv_rootuser); in smb_server_shutdown()
1665 sv->sv_rootuser = NULL; in smb_server_shutdown()
1667 if (sv->sv_session != NULL) { in smb_server_shutdown()
1668 smb_session_cancel_requests(sv->sv_session, NULL, NULL); in smb_server_shutdown()
1669 smb_slist_wait_for_empty(&sv->sv_session->s_req_list); in smb_server_shutdown()
1672 smb_session_logoff(sv->sv_session); in smb_server_shutdown()
1674 smb_session_delete(sv->sv_session); in smb_server_shutdown()
1675 sv->sv_session = NULL; in smb_server_shutdown()
1678 if (sv->sv_receiver_pool != NULL) { in smb_server_shutdown()
1679 taskq_destroy(sv->sv_receiver_pool); in smb_server_shutdown()
1680 sv->sv_receiver_pool = NULL; in smb_server_shutdown()
1683 if (sv->sv_worker_pool != NULL) { in smb_server_shutdown()
1684 taskq_destroy(sv->sv_worker_pool); in smb_server_shutdown()
1685 sv->sv_worker_pool = NULL; in smb_server_shutdown()
1688 if (sv->sv_notify_pool != NULL) { in smb_server_shutdown()
1689 taskq_destroy(sv->sv_notify_pool); in smb_server_shutdown()
1690 sv->sv_notify_pool = NULL; in smb_server_shutdown()
1697 smb2_dh_shutdown(sv); in smb_server_shutdown()
1699 smb_server_fsop_stop(sv); in smb_server_shutdown()
1702 if (sv->sv_proc_p != NULL) { in smb_server_shutdown()
1703 smb_server_delproc(sv); in smb_server_shutdown()
1715 smb_server_t *sv, in smb_server_listener_init() argument
1725 ld->ld_sv = sv; in smb_server_listener_init()
1741 smbsrv_listen_pri, sv); in smb_server_listener_init()
1949 smb_server_t *sv; in smb_server_lookup() local
1954 sv = smb_llist_head(&smb_servers); in smb_server_lookup()
1955 while (sv) { in smb_server_lookup()
1956 SMB_SERVER_VALID(sv); in smb_server_lookup()
1957 if (sv->sv_zid == zid) { in smb_server_lookup()
1958 mutex_enter(&sv->sv_mutex); in smb_server_lookup()
1959 if (sv->sv_state != SMB_SERVER_STATE_DELETING) { in smb_server_lookup()
1960 sv->sv_refcnt++; in smb_server_lookup()
1961 mutex_exit(&sv->sv_mutex); in smb_server_lookup()
1963 *psv = sv; in smb_server_lookup()
1966 mutex_exit(&sv->sv_mutex); in smb_server_lookup()
1969 sv = smb_llist_next(&smb_servers, sv); in smb_server_lookup()
1982 smb_server_release(smb_server_t *sv) in smb_server_release() argument
1984 SMB_SERVER_VALID(sv); in smb_server_release()
1986 mutex_enter(&sv->sv_mutex); in smb_server_release()
1987 ASSERT(sv->sv_refcnt); in smb_server_release()
1988 sv->sv_refcnt--; in smb_server_release()
1989 if ((sv->sv_refcnt == 0) && (sv->sv_state == SMB_SERVER_STATE_DELETING)) in smb_server_release()
1990 cv_signal(&sv->sv_cv); in smb_server_release()
1991 mutex_exit(&sv->sv_mutex); in smb_server_release()
2004 smb_server_lookup_user(smb_server_t *sv, uint64_t ssn_id, uint64_t user_id) in smb_server_lookup_user() argument
2006 smb_llist_t *slist = &sv->sv_session_list; in smb_server_lookup_user()
2033 smb_server_enum_users(smb_server_t *sv, smb_svcenum_t *svcenum) in smb_server_enum_users() argument
2035 smb_llist_t *ll = &sv->sv_session_list; in smb_server_enum_users()
2076 smb_server_enum_trees(smb_server_t *sv, smb_svcenum_t *svcenum) in smb_server_enum_trees() argument
2078 smb_llist_t *ll = &sv->sv_session_list; in smb_server_enum_trees()
2120 smb_server_session_disconnect(smb_server_t *sv, in smb_server_session_disconnect() argument
2123 smb_llist_t *ll = &sv->sv_session_list; in smb_server_session_disconnect()
2169 smb_server_fclose(smb_server_t *sv, uint32_t uniqid) in smb_server_fclose() argument
2177 ll = &sv->sv_session_list; in smb_server_fclose()
2217 smb_server_t *sv = sr->sr_server; in smb_server_logoff_ssnid() local
2223 SMB_SERVER_VALID(sv); in smb_server_logoff_ssnid()
2225 if (sv->sv_state != SMB_SERVER_STATE_RUNNING) in smb_server_logoff_ssnid()
2228 sess_list = &sv->sv_session_list; in smb_server_logoff_ssnid()
2319 smb_server_store_cfg(smb_server_t *sv, smb_ioc_cfg_t *ioc) in smb_server_store_cfg() argument
2330 sv->sv_cfg.skc_maxworkers = ioc->maxworkers; in smb_server_store_cfg()
2331 sv->sv_cfg.skc_maxconnections = ioc->maxconnections; in smb_server_store_cfg()
2332 sv->sv_cfg.skc_keepalive = ioc->keepalive; in smb_server_store_cfg()
2333 sv->sv_cfg.skc_restrict_anon = ioc->restrict_anon; in smb_server_store_cfg()
2334 sv->sv_cfg.skc_signing_enable = ioc->signing_enable; in smb_server_store_cfg()
2335 sv->sv_cfg.skc_signing_required = ioc->signing_required; in smb_server_store_cfg()
2336 sv->sv_cfg.skc_oplock_enable = ioc->oplock_enable; in smb_server_store_cfg()
2337 sv->sv_cfg.skc_sync_enable = ioc->sync_enable; in smb_server_store_cfg()
2338 sv->sv_cfg.skc_secmode = ioc->secmode; in smb_server_store_cfg()
2339 sv->sv_cfg.skc_netbios_enable = ioc->netbios_enable; in smb_server_store_cfg()
2340 sv->sv_cfg.skc_ipv6_enable = ioc->ipv6_enable; in smb_server_store_cfg()
2341 sv->sv_cfg.skc_print_enable = ioc->print_enable; in smb_server_store_cfg()
2342 sv->sv_cfg.skc_traverse_mounts = ioc->traverse_mounts; in smb_server_store_cfg()
2343 sv->sv_cfg.skc_short_names = ioc->short_names; in smb_server_store_cfg()
2344 sv->sv_cfg.skc_max_protocol = ioc->max_protocol; in smb_server_store_cfg()
2345 sv->sv_cfg.skc_min_protocol = ioc->min_protocol; in smb_server_store_cfg()
2346 sv->sv_cfg.skc_encrypt = ioc->encrypt; in smb_server_store_cfg()
2347 sv->sv_cfg.skc_encrypt_ciphers = ioc->encrypt_ciphers; in smb_server_store_cfg()
2348 sv->sv_cfg.skc_execflags = ioc->exec_flags; in smb_server_store_cfg()
2349 sv->sv_cfg.skc_negtok_len = ioc->negtok_len; in smb_server_store_cfg()
2350 sv->sv_cfg.skc_max_opens = ioc->max_opens; in smb_server_store_cfg()
2351 sv->sv_cfg.skc_version = ioc->version; in smb_server_store_cfg()
2352 sv->sv_cfg.skc_initial_credits = ioc->initial_credits; in smb_server_store_cfg()
2353 sv->sv_cfg.skc_maximum_credits = ioc->maximum_credits; in smb_server_store_cfg()
2355 (void) memcpy(sv->sv_cfg.skc_machine_uuid, ioc->machine_uuid, in smb_server_store_cfg()
2357 (void) memcpy(sv->sv_cfg.skc_negtok, ioc->negtok, in smb_server_store_cfg()
2358 sizeof (sv->sv_cfg.skc_negtok)); in smb_server_store_cfg()
2359 (void) memcpy(sv->sv_cfg.skc_native_os, ioc->native_os, in smb_server_store_cfg()
2360 sizeof (sv->sv_cfg.skc_native_os)); in smb_server_store_cfg()
2361 (void) memcpy(sv->sv_cfg.skc_native_lm, ioc->native_lm, in smb_server_store_cfg()
2362 sizeof (sv->sv_cfg.skc_native_lm)); in smb_server_store_cfg()
2364 (void) strlcpy(sv->sv_cfg.skc_nbdomain, ioc->nbdomain, in smb_server_store_cfg()
2365 sizeof (sv->sv_cfg.skc_nbdomain)); in smb_server_store_cfg()
2366 (void) strlcpy(sv->sv_cfg.skc_fqdn, ioc->fqdn, in smb_server_store_cfg()
2367 sizeof (sv->sv_cfg.skc_fqdn)); in smb_server_store_cfg()
2368 (void) strlcpy(sv->sv_cfg.skc_hostname, ioc->hostname, in smb_server_store_cfg()
2369 sizeof (sv->sv_cfg.skc_hostname)); in smb_server_store_cfg()
2370 (void) strlcpy(sv->sv_cfg.skc_system_comment, ioc->system_comment, in smb_server_store_cfg()
2371 sizeof (sv->sv_cfg.skc_system_comment)); in smb_server_store_cfg()
2375 smb_server_fsop_start(smb_server_t *sv) in smb_server_fsop_start() argument
2379 error = smb_node_root_init(sv, &sv->si_root_smb_node); in smb_server_fsop_start()
2381 sv->si_root_smb_node = NULL; in smb_server_fsop_start()
2387 smb_server_fsop_stop(smb_server_t *sv) in smb_server_fsop_stop() argument
2389 if (sv->si_root_smb_node != NULL) { in smb_server_fsop_stop()
2390 smb_node_release(sv->si_root_smb_node); in smb_server_fsop_stop()
2391 sv->si_root_smb_node = NULL; in smb_server_fsop_stop()
2396 smb_event_create(smb_server_t *sv, int timeout) in smb_event_create() argument
2400 if (smb_server_is_stopping(sv)) in smb_event_create()
2410 event->se_server = sv; in smb_event_create()
2413 smb_llist_enter(&sv->sv_event_list, RW_WRITER); in smb_event_create()
2414 smb_llist_insert_tail(&sv->sv_event_list, event); in smb_event_create()
2415 smb_llist_exit(&sv->sv_event_list); in smb_event_create()
2423 smb_server_t *sv; in smb_event_destroy() local
2430 sv = event->se_server; in smb_event_destroy()
2431 SMB_SERVER_VALID(sv); in smb_event_destroy()
2433 smb_llist_enter(&sv->sv_event_list, RW_WRITER); in smb_event_destroy()
2434 smb_llist_remove(&sv->sv_event_list, event); in smb_event_destroy()
2435 smb_llist_exit(&sv->sv_event_list); in smb_event_destroy()
2510 smb_event_cancel(smb_server_t *sv, uint32_t txid) in smb_event_cancel() argument
2515 SMB_SERVER_VALID(sv); in smb_event_cancel()
2517 event_list = &sv->sv_event_list; in smb_event_cancel()
2546 smb_event_notify(smb_server_t *sv, uint32_t txid) in smb_event_notify() argument
2551 SMB_SERVER_VALID(sv); in smb_event_notify()
2553 event_list = &sv->sv_event_list; in smb_event_notify()
2616 smb_spool_lookup_doc_byfid(smb_server_t *sv, uint16_t fid, in smb_spool_lookup_doc_byfid() argument
2622 splist = &sv->sp_info.sp_list; in smb_spool_lookup_doc_byfid()
2654 smb_spool_add_fid(smb_server_t *sv, uint16_t fid) in smb_spool_add_fid() argument
2659 if (sv->sv_cfg.skc_print_enable == 0) in smb_spool_add_fid()
2663 fidlist = &sv->sp_info.sp_fidlist; in smb_spool_add_fid()
2668 cv_broadcast(&sv->sp_info.sp_cv); in smb_spool_add_fid()
2682 smb_spool_get_fid(smb_server_t *sv) in smb_spool_get_fid() argument
2688 splist = &sv->sp_info.sp_fidlist; in smb_spool_get_fid()
2693 smb_llist_remove(&sv->sp_info.sp_fidlist, spfid); in smb_spool_get_fid()
2713 smb_server_t *sv = tree->t_server; in smb_spool_add_doc() local
2716 splist = &sv->sp_info.sp_list; in smb_spool_add_doc()
2718 sp->sd_spool_num = atomic_inc_32_nv(&sv->sp_info.sp_cnt); in smb_spool_add_doc()
2731 smb_server_t *sv = ld->ld_sv; in smb_server_create_session() local
2737 session = smb_session_create(s_so, ld->ld_port, sv, in smb_server_create_session()
2748 sl = &sv->sv_session_list; in smb_server_create_session()
2750 if (smb_llist_get_count(sl) >= sv->sv_cfg.skc_maxconnections) { in smb_server_create_session()
2768 tqid = taskq_dispatch(sv->sv_receiver_pool, in smb_server_create_session()
2802 smb_server_t *sv; in smb_server_destroy_session() local
2807 sv = session->s_server; in smb_server_destroy_session()
2808 ll = &sv->sv_session_list; in smb_server_destroy_session()
2837 cv_signal(&sv->sv_cv); in smb_server_destroy_session()