From b843dffbc95eac25eb15f4e79ddfc37dcba33f27 Mon Sep 17 00:00:00 2001 From: trasz Date: Fri, 15 May 2015 10:50:58 +0000 Subject: MFC r278237: Don't call callout_drain() with iscsi mutex held; this fixes a warning that was introduced recently. While here, don't try to access is_terminating without lock. Sponsored by: The FreeBSD Foundation --- sys/dev/iscsi/iscsi.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'sys') diff --git a/sys/dev/iscsi/iscsi.c b/sys/dev/iscsi/iscsi.c index a385d1c..4386675 100644 --- a/sys/dev/iscsi/iscsi.c +++ b/sys/dev/iscsi/iscsi.c @@ -425,6 +425,7 @@ iscsi_maintenance_thread_terminate(struct iscsi_session *is) sx_xunlock(&sc->sc_lock); icl_conn_close(is->is_conn); + callout_drain(&is->is_callout); ISCSI_SESSION_LOCK(is); @@ -438,8 +439,6 @@ iscsi_maintenance_thread_terminate(struct iscsi_session *is) cv_signal(&is->is_login_cv); #endif - callout_drain(&is->is_callout); - iscsi_session_cleanup(is, true); KASSERT(TAILQ_EMPTY(&is->is_outstanding), @@ -515,6 +514,7 @@ iscsi_session_reconnect(struct iscsi_session *is) static void iscsi_session_terminate(struct iscsi_session *is) { + if (is->is_terminating) return; @@ -536,12 +536,14 @@ iscsi_callout(void *context) is = context; - if (is->is_terminating) + ISCSI_SESSION_LOCK(is); + if (is->is_terminating) { + ISCSI_SESSION_UNLOCK(is); return; + } callout_schedule(&is->is_callout, 1 * hz); - ISCSI_SESSION_LOCK(is); is->is_timeout++; if (is->is_waiting_for_iscsid) { -- cgit v1.1