Author: mav
Date: Fri Mar  3 06:03:01 2017
New Revision: 314581
URL: https://svnweb.freebsd.org/changeset/base/314581

Log:
  MFC r313851: Fix tight loop spinning on postponed requests.

Modified:
  stable/10/sys/dev/iscsi/iscsi.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/iscsi/iscsi.c
==============================================================================
--- stable/10/sys/dev/iscsi/iscsi.c     Fri Mar  3 06:02:27 2017        
(r314580)
+++ stable/10/sys/dev/iscsi/iscsi.c     Fri Mar  3 06:03:01 2017        
(r314581)
@@ -470,15 +470,14 @@ iscsi_maintenance_thread_terminate(struc
 static void
 iscsi_maintenance_thread(void *arg)
 {
-       struct iscsi_session *is;
-
-       is = arg;
+       struct iscsi_session *is = arg;
 
+       ISCSI_SESSION_LOCK(is);
        for (;;) {
-               ISCSI_SESSION_LOCK(is);
                if (is->is_reconnecting == false &&
                    is->is_terminating == false &&
-                   STAILQ_EMPTY(&is->is_postponed))
+                   (STAILQ_EMPTY(&is->is_postponed) ||
+                    ISCSI_SNGT(is->is_cmdsn, is->is_maxcmdsn)))
                        cv_wait(&is->is_maintenance_cv, &is->is_lock);
 
                /* Terminate supersedes reconnect. */
@@ -492,12 +491,13 @@ iscsi_maintenance_thread(void *arg)
                if (is->is_reconnecting) {
                        ISCSI_SESSION_UNLOCK(is);
                        iscsi_maintenance_thread_reconnect(is);
+                       ISCSI_SESSION_LOCK(is);
                        continue;
                }
 
                iscsi_session_send_postponed(is);
-               ISCSI_SESSION_UNLOCK(is);
        }
+       ISCSI_SESSION_UNLOCK(is);
 }
 
 static void
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to