From: Xiang Zhang <hawkxiang.cpp@gmail.com>
To: lduncan@suse.com, cleech@redhat.com, michael.christie@oracle.com,
ames.Bottomley@HansenPartnership.com, martin.petersen@oracle.com
Cc: open-iscsi@googlegroups.com, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org,
Xiang Zhang <hawkxiang.cpp@gmail.com>
Subject: [PATCH] scsi: libiscsi: Set expecting_cc_ua flag when stop_conn
Date: Fri, 11 Oct 2024 16:18:06 +0800 [thread overview]
Message-ID: <20241011081807.65027-1-hawkxiang.cpp@gmail.com> (raw)
Initiator need to recover session and reconnect to target, after calling stop_conn. And target will rebuild new session info, and mark ASC_POWERON_RESET ua sense for scsi devices belong to the target(device reset). After recovery, first scsi command(scmd) request to target will get ASC_POWERON_RESET(ua sense) + SAM_STAT_CHECK_CONDITION(status) in response.
According to scsi code: "scsi_done --> scsi_complete --> scsi_decide_disposition --> scsi_check_sense", if expecting_cc_ua = 0, scmd response with ASC_POWERON_RESET(ua sense) will ignore "cmd->retries <= cmd->allowed", fail directly. It will cause SCSI return io_error to upper layer without retry.
If we set expecting_cc_ua=1 in fail_scsi_tasks, SISC will retry the scmd which is response with ASC_POWERON_RESET. The scmd second request to target can successful, because target will clear ASC_POWERON_RESET in device pending ua_sense_list after first scmd request.
Signed-off-by: Xiang Zhang <hawkxiang.cpp@gmail.com>
---
drivers/scsi/libiscsi.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 0fda8905eabd..317e57be32b3 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -629,9 +629,10 @@ static void __fail_scsi_task(struct iscsi_task *task, int err)
conn->session->queued_cmdsn--;
/* it was never sent so just complete like normal */
state = ISCSI_TASK_COMPLETED;
- } else if (err == DID_TRANSPORT_DISRUPTED)
+ } else if (err == DID_TRANSPORT_DISRUPTED) {
state = ISCSI_TASK_ABRT_SESS_RECOV;
- else
+ sc->device->expecting_cc_ua = 1;
+ } else
state = ISCSI_TASK_ABRT_TMF;
sc = task->sc;
--
2.44.0
next reply other threads:[~2024-10-11 8:18 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-11 8:18 Xiang Zhang [this message]
2024-10-11 14:48 ` [PATCH] scsi: libiscsi: Set expecting_cc_ua flag when stop_conn michael.christie
[not found] ` <CAHmG-mrmBYuxNOTVg+QUa6264isEwp53awnAcGGRwEU2bNSV3Q@mail.gmail.com>
2024-10-14 15:34 ` Mike Christie
2024-10-12 14:41 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241011081807.65027-1-hawkxiang.cpp@gmail.com \
--to=hawkxiang.cpp@gmail.com \
--cc=ames.Bottomley@HansenPartnership.com \
--cc=cleech@redhat.com \
--cc=lduncan@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=michael.christie@oracle.com \
--cc=open-iscsi@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.