Mercurial > illumos > illumos-gate
diff 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 |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/smbsrv/smb_server.c Tue Feb 15 21:27:02 2011 -0500 +++ b/usr/src/uts/common/fs/smbsrv/smb_server.c Tue Jul 17 12:40:19 2012 -0400 @@ -230,8 +230,8 @@ static void smb_server_kstat_init(smb_server_t *); static void smb_server_kstat_fini(smb_server_t *); static void smb_server_timers(smb_thread_t *, void *); -static int smb_server_lookup(smb_server_t **); -static void smb_server_release(smb_server_t *); +int smb_server_lookup(smb_server_t **); +void smb_server_release(smb_server_t *); static void smb_server_store_cfg(smb_server_t *, smb_ioc_cfg_t *); static void smb_server_shutdown(smb_server_t *); static int smb_server_fsop_start(smb_server_t *); @@ -1408,6 +1408,14 @@ smb_server_listener_stop(&sv->sv_tcp_daemon); if (sv->sv_session != NULL) { + /* + * smb_kshare_export may have a request on here. + * Normal sessions do this in smb_session_cancel() + * but this is a "fake" session used only for the + * requests used by the kshare thread(s). + */ + smb_slist_wait_for_empty(&sv->sv_session->s_req_list); + smb_session_delete(sv->sv_session); sv->sv_session = NULL; } @@ -1637,7 +1645,7 @@ * This function tries to find the server associated with the zone of the * caller. */ -static int +int smb_server_lookup(smb_server_t **psv) { zoneid_t zid; @@ -1673,7 +1681,7 @@ * This function decrements the reference count of the server and signals its * condition variable if the state of the server is SMB_SERVER_STATE_DELETING. */ -static void +void smb_server_release(smb_server_t *sv) { SMB_SERVER_VALID(sv);