svn commit: r257061 - head/sys/dev/iscsi
Edward Tomasz Napierala
trasz at FreeBSD.org
Thu Oct 24 15:54:06 UTC 2013
Author: trasz
Date: Thu Oct 24 15:54:06 2013
New Revision: 257061
URL: http://svnweb.freebsd.org/changeset/base/257061
Log:
Don't spin with mutex hold when there is not enough room in the send socket
buffer. While here, make the code flow somewhat nicer.
Thanks to mav@ for tracking it down.
Tested by: mav
MFC after: 3 days
Sponsored by: FreeBSD Foundation
Modified:
head/sys/dev/iscsi/icl.c
Modified: head/sys/dev/iscsi/icl.c
==============================================================================
--- head/sys/dev/iscsi/icl.c Thu Oct 24 15:44:29 2013 (r257060)
+++ head/sys/dev/iscsi/icl.c Thu Oct 24 15:54:06 2013 (r257061)
@@ -723,11 +723,7 @@ icl_receive_thread(void *arg)
for (;;) {
if (ic->ic_disconnecting) {
//ICL_DEBUG("terminating");
- ICL_CONN_LOCK(ic);
- ic->ic_receive_running = false;
- ICL_CONN_UNLOCK(ic);
- kthread_exit();
- return;
+ break;
}
SOCKBUF_LOCK(&so->so_rcv);
@@ -740,6 +736,11 @@ icl_receive_thread(void *arg)
icl_conn_receive_pdus(ic, available);
}
+
+ ICL_CONN_LOCK(ic);
+ ic->ic_receive_running = false;
+ ICL_CONN_UNLOCK(ic);
+ kthread_exit();
}
static int
@@ -879,22 +880,19 @@ icl_send_thread(void *arg)
ICL_CONN_LOCK(ic);
ic->ic_send_running = true;
- ICL_CONN_UNLOCK(ic);
for (;;) {
- ICL_CONN_LOCK(ic);
if (ic->ic_disconnecting) {
//ICL_DEBUG("terminating");
- ic->ic_send_running = false;
- ICL_CONN_UNLOCK(ic);
- kthread_exit();
- return;
+ break;
}
- if (TAILQ_EMPTY(&ic->ic_to_send))
- cv_wait(&ic->ic_send_cv, &ic->ic_lock);
icl_conn_send_pdus(ic);
- ICL_CONN_UNLOCK(ic);
+ cv_wait(&ic->ic_send_cv, &ic->ic_lock);
}
+
+ ic->ic_send_running = false;
+ ICL_CONN_UNLOCK(ic);
+ kthread_exit();
}
static int
More information about the svn-src-all
mailing list