Fix tight loop spinning on postponed requests.
MFC after: 2 weeks
This commit is contained in:
parent
7174af791e
commit
5b338bc073
@ -475,15 +475,14 @@ iscsi_maintenance_thread_terminate(struct iscsi_session *is)
|
|||||||
static void
|
static void
|
||||||
iscsi_maintenance_thread(void *arg)
|
iscsi_maintenance_thread(void *arg)
|
||||||
{
|
{
|
||||||
struct iscsi_session *is;
|
struct iscsi_session *is = arg;
|
||||||
|
|
||||||
is = arg;
|
|
||||||
|
|
||||||
|
ISCSI_SESSION_LOCK(is);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ISCSI_SESSION_LOCK(is);
|
|
||||||
if (is->is_reconnecting == false &&
|
if (is->is_reconnecting == false &&
|
||||||
is->is_terminating == 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);
|
cv_wait(&is->is_maintenance_cv, &is->is_lock);
|
||||||
|
|
||||||
/* Terminate supersedes reconnect. */
|
/* Terminate supersedes reconnect. */
|
||||||
@ -497,12 +496,13 @@ iscsi_maintenance_thread(void *arg)
|
|||||||
if (is->is_reconnecting) {
|
if (is->is_reconnecting) {
|
||||||
ISCSI_SESSION_UNLOCK(is);
|
ISCSI_SESSION_UNLOCK(is);
|
||||||
iscsi_maintenance_thread_reconnect(is);
|
iscsi_maintenance_thread_reconnect(is);
|
||||||
|
ISCSI_SESSION_LOCK(is);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
iscsi_session_send_postponed(is);
|
iscsi_session_send_postponed(is);
|
||||||
ISCSI_SESSION_UNLOCK(is);
|
|
||||||
}
|
}
|
||||||
|
ISCSI_SESSION_UNLOCK(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user