mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-20 15:43:16 +00:00
Freeze CAM SIM when request is postponed due to MaxCmdSN.
This allows to avoid resource allocation (especially offload) for requests that can not be executed at this time any way. MFC after: 2 weeks
This commit is contained in:
parent
5b338bc073
commit
4c9ea0ced9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=313852
@ -231,14 +231,16 @@ iscsi_session_send_postponed(struct iscsi_session *is)
|
||||
|
||||
ISCSI_SESSION_LOCK_ASSERT(is);
|
||||
|
||||
while (!STAILQ_EMPTY(&is->is_postponed)) {
|
||||
request = STAILQ_FIRST(&is->is_postponed);
|
||||
if (STAILQ_EMPTY(&is->is_postponed))
|
||||
return;
|
||||
while ((request = STAILQ_FIRST(&is->is_postponed)) != NULL) {
|
||||
postpone = iscsi_pdu_prepare(request);
|
||||
if (postpone)
|
||||
break;
|
||||
return;
|
||||
STAILQ_REMOVE_HEAD(&is->is_postponed, ip_next);
|
||||
icl_pdu_queue(request);
|
||||
}
|
||||
xpt_release_simq(is->is_sim, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -252,6 +254,8 @@ iscsi_pdu_queue_locked(struct icl_pdu *request)
|
||||
iscsi_session_send_postponed(is);
|
||||
postpone = iscsi_pdu_prepare(request);
|
||||
if (postpone) {
|
||||
if (STAILQ_EMPTY(&is->is_postponed))
|
||||
xpt_freeze_simq(is->is_sim, 1);
|
||||
STAILQ_INSERT_TAIL(&is->is_postponed, request, ip_next);
|
||||
return;
|
||||
}
|
||||
@ -339,8 +343,9 @@ iscsi_session_cleanup(struct iscsi_session *is, bool destroy_sim)
|
||||
/*
|
||||
* Remove postponed PDUs.
|
||||
*/
|
||||
while (!STAILQ_EMPTY(&is->is_postponed)) {
|
||||
pdu = STAILQ_FIRST(&is->is_postponed);
|
||||
if (!STAILQ_EMPTY(&is->is_postponed))
|
||||
xpt_release_simq(is->is_sim, 1);
|
||||
while ((pdu = STAILQ_FIRST(&is->is_postponed)) != NULL) {
|
||||
STAILQ_REMOVE_HEAD(&is->is_postponed, ip_next);
|
||||
icl_pdu_free(pdu);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user