aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2021-03-03 20:21:26 +0000
committerAlexander Motin <mav@FreeBSD.org>2021-03-15 02:36:21 +0000
commitaae8e02dfcb2cd198e93b3b4e2c69b17c7525ae6 (patch)
treef85dfc60862ca9bfffaa36770e96a2f89205d21f
parent8b0101da803da44e51697d5076c4782919068de7 (diff)
downloadsrc-aae8e02dfcb2cd198e93b3b4e2c69b17c7525ae6.tar.gz
src-aae8e02dfcb2cd198e93b3b4e2c69b17c7525ae6.zip
Move ic_check_send_space clear to the actual check.
It closes tiny race when the flag could be set between being cleared and the space is checked, that would create us some more work. The flag setting is protected by both locks, so we can clear it in either place, but in between both locks are dropped. MFC after: 1 week (cherry picked from commit afc3e54eeee635a525c88e4678cc38e3219302c3)
-rw-r--r--sys/dev/iscsi/icl_soft.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/dev/iscsi/icl_soft.c b/sys/dev/iscsi/icl_soft.c
index 57ab24defabb..9cede6b44311 100644
--- a/sys/dev/iscsi/icl_soft.c
+++ b/sys/dev/iscsi/icl_soft.c
@@ -866,6 +866,7 @@ icl_conn_send_pdus(struct icl_conn *ic, struct icl_pdu_stailq *queue)
* of error.
*/
available = sbspace(&so->so_snd);
+ ic->ic_check_send_space = false;
/*
* Notify the socket upcall that we don't need wakeups
@@ -978,7 +979,6 @@ icl_send_thread(void *arg)
if (STAILQ_EMPTY(&queue) || ic->ic_check_send_space)
STAILQ_CONCAT(&queue, &ic->ic_to_send);
- ic->ic_check_send_space = false;
ICL_CONN_UNLOCK(ic);
icl_conn_send_pdus(ic, &queue);
ICL_CONN_LOCK(ic);