comparison usr/src/uts/common/fs/smbsrv/smb_server.c @ 13931:3f18ae9d8c98

3502 panic in smb_server_shutdown (sl_count assertion) Reviewed by: Gordon Ross <gwr@nexenta.com> Reviewed by: Dan McDonald <danmcd@nexenta.com> Approved by: Richard Lowe <richlowe@richlowe.net>
author Kevin Crowe <kevin.crowe@nexenta.com>
date Tue, 17 Jul 2012 12:40:19 -0400
parents f2303e5259ca
children ba0ec3e45034
comparison
equal deleted inserted replaced
13930:f2303e5259ca 13931:3f18ae9d8c98
228 } smb_receiver_arg_t; 228 } smb_receiver_arg_t;
229 229
230 static void smb_server_kstat_init(smb_server_t *); 230 static void smb_server_kstat_init(smb_server_t *);
231 static void smb_server_kstat_fini(smb_server_t *); 231 static void smb_server_kstat_fini(smb_server_t *);
232 static void smb_server_timers(smb_thread_t *, void *); 232 static void smb_server_timers(smb_thread_t *, void *);
233 static int smb_server_lookup(smb_server_t **); 233 int smb_server_lookup(smb_server_t **);
234 static void smb_server_release(smb_server_t *); 234 void smb_server_release(smb_server_t *);
235 static void smb_server_store_cfg(smb_server_t *, smb_ioc_cfg_t *); 235 static void smb_server_store_cfg(smb_server_t *, smb_ioc_cfg_t *);
236 static void smb_server_shutdown(smb_server_t *); 236 static void smb_server_shutdown(smb_server_t *);
237 static int smb_server_fsop_start(smb_server_t *); 237 static int smb_server_fsop_start(smb_server_t *);
238 static void smb_server_fsop_stop(smb_server_t *); 238 static void smb_server_fsop_stop(smb_server_t *);
239 static void smb_event_cancel(smb_server_t *, uint32_t); 239 static void smb_event_cancel(smb_server_t *, uint32_t);
1406 1406
1407 smb_server_listener_stop(&sv->sv_nbt_daemon); 1407 smb_server_listener_stop(&sv->sv_nbt_daemon);
1408 smb_server_listener_stop(&sv->sv_tcp_daemon); 1408 smb_server_listener_stop(&sv->sv_tcp_daemon);
1409 1409
1410 if (sv->sv_session != NULL) { 1410 if (sv->sv_session != NULL) {
1411 /*
1412 * smb_kshare_export may have a request on here.
1413 * Normal sessions do this in smb_session_cancel()
1414 * but this is a "fake" session used only for the
1415 * requests used by the kshare thread(s).
1416 */
1417 smb_slist_wait_for_empty(&sv->sv_session->s_req_list);
1418
1411 smb_session_delete(sv->sv_session); 1419 smb_session_delete(sv->sv_session);
1412 sv->sv_session = NULL; 1420 sv->sv_session = NULL;
1413 } 1421 }
1414 1422
1415 if (sv->sv_receiver_pool != NULL) { 1423 if (sv->sv_receiver_pool != NULL) {
1635 * smb_server_lookup 1643 * smb_server_lookup
1636 * 1644 *
1637 * This function tries to find the server associated with the zone of the 1645 * This function tries to find the server associated with the zone of the
1638 * caller. 1646 * caller.
1639 */ 1647 */
1640 static int 1648 int
1641 smb_server_lookup(smb_server_t **psv) 1649 smb_server_lookup(smb_server_t **psv)
1642 { 1650 {
1643 zoneid_t zid; 1651 zoneid_t zid;
1644 smb_server_t *sv; 1652 smb_server_t *sv;
1645 1653
1671 * smb_server_release 1679 * smb_server_release
1672 * 1680 *
1673 * This function decrements the reference count of the server and signals its 1681 * This function decrements the reference count of the server and signals its
1674 * condition variable if the state of the server is SMB_SERVER_STATE_DELETING. 1682 * condition variable if the state of the server is SMB_SERVER_STATE_DELETING.
1675 */ 1683 */
1676 static void 1684 void
1677 smb_server_release(smb_server_t *sv) 1685 smb_server_release(smb_server_t *sv)
1678 { 1686 {
1679 SMB_SERVER_VALID(sv); 1687 SMB_SERVER_VALID(sv);
1680 1688
1681 mutex_enter(&sv->sv_mutex); 1689 mutex_enter(&sv->sv_mutex);