git: 6a435d581fe2 - stable/13 - iscsi: Abort fewer data-out tasks on a terminating session.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 29 Apr 2022 23:12:34 UTC
The branch stable/13 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=6a435d581fe2e7e1d0f05bc402ac5063898526f7 commit 6a435d581fe2e7e1d0f05bc402ac5063898526f7 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2022-01-18 17:28:43 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2022-04-29 22:55:32 +0000 iscsi: Abort fewer data-out tasks on a terminating session. Only abort tasks queued for datamove after cfiscsi_sesssion_terminate_tasks has posted its internal CTL_TASK_I_T_NEXUS_RESET task. Reported by: Jithesh Arakkan @ Chelsio Reviewed by: mav Fixes: 0cd6e85e242b iscsi: Abort data-out tasks queued on a terminating session. Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D33747 (cherry picked from commit a3af69fa81d2341a3864edc67419de3b3bad77d9) --- sys/cam/ctl/ctl_frontend_iscsi.c | 7 ++++++- sys/cam/ctl/ctl_frontend_iscsi.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/cam/ctl/ctl_frontend_iscsi.c b/sys/cam/ctl/ctl_frontend_iscsi.c index b8ab25e89eb9..6e3505c86199 100644 --- a/sys/cam/ctl/ctl_frontend_iscsi.c +++ b/sys/cam/ctl/ctl_frontend_iscsi.c @@ -1155,6 +1155,7 @@ cfiscsi_session_terminate_tasks(struct cfiscsi_session *cs) } CFISCSI_SESSION_LOCK(cs); + cs->cs_terminating_tasks = true; while ((cdw = TAILQ_FIRST(&cs->cs_waiting_for_data_out)) != NULL) { TAILQ_REMOVE(&cs->cs_waiting_for_data_out, cdw, cdw_next); CFISCSI_SESSION_UNLOCK(cs); @@ -2783,8 +2784,12 @@ cfiscsi_datamove_out(union ctl_io *io) cdw->cdw_r2t_end = io->scsiio.ext_data_filled + r2t_len; CFISCSI_SESSION_LOCK(cs); - if (cs->cs_terminating) { + if (cs->cs_terminating_tasks) { CFISCSI_SESSION_UNLOCK(cs); + KASSERT((io->io_hdr.flags & CTL_FLAG_ABORT) != 0, + ("%s: I/O request %p on termating session %p not aborted", + __func__, io, cs)); + CFISCSI_SESSION_WARN(cs, "aborting data_wait for aborted I/O"); cfiscsi_data_wait_abort(cs, cdw, 44); return; } diff --git a/sys/cam/ctl/ctl_frontend_iscsi.h b/sys/cam/ctl/ctl_frontend_iscsi.h index 7c7f422a8d1f..165f0ad79d70 100644 --- a/sys/cam/ctl/ctl_frontend_iscsi.h +++ b/sys/cam/ctl/ctl_frontend_iscsi.h @@ -84,6 +84,7 @@ struct cfiscsi_session { int cs_timeout; struct cv cs_maintenance_cv; bool cs_terminating; + bool cs_terminating_tasks; bool cs_handoff_in_progress; bool cs_tasks_aborted; int cs_max_burst_length;