From: John Meneghini <jmeneghi@redhat.com>
To: "Kai Mäkisara" <Kai.Makisara@kolumbus.fi>, linux-scsi@vger.kernel.org
Cc: martin.petersen@oracle.com,
James.Bottomley@HansenPartnership.com, loberman@redhat.com
Subject: Re: [PATCH v2 3/4] scsi: st: Modify st.c to use the new scsi_error counters
Date: Wed, 11 Dec 2024 17:14:04 -0500 [thread overview]
Message-ID: <039cfcda-6549-4a46-b945-27f4d749b789@redhat.com> (raw)
In-Reply-To: <20241125140301.3912-4-Kai.Makisara@kolumbus.fi>
Reviewed-by: John Meneghini <jmeneghi@redhat.com>
Tested-by: John Meneghini <jmeneghi@redhat.com>
On 11/25/24 09:03, Kai Mäkisara wrote:
> Compare the stored values of por_ctr and new_media_ctr against
> the values in the device struct. In case of mismatch, the
> Unit Attention corresponding to the counter has happened.
> This is a safeguard against another ULD catching the
> Unit Attention sense data.
>
> Remove use of the was_reset flag in struct scsi_device.
>
> Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi>
> ---
> drivers/scsi/st.c | 28 +++++++++++++++++++++++++---
> drivers/scsi/st.h | 4 ++++
> 2 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
> index a0667a0ae4c9..ad86dfbc8919 100644
> --- a/drivers/scsi/st.c
> +++ b/drivers/scsi/st.c
> @@ -163,9 +163,11 @@ static const char *st_formats[] = {
>
> static int debugging = DEBUG;
>
> +/* Setting these non-zero may risk recognizing resets */
> #define MAX_RETRIES 0
> #define MAX_WRITE_RETRIES 0
> #define MAX_READY_RETRIES 0
> +
> #define NO_TAPE NOT_READY
>
> #define ST_TIMEOUT (900 * HZ)
> @@ -357,10 +359,18 @@ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
> {
> int result = SRpnt->result;
> u8 scode;
> + unsigned int ctr;
> DEB(const char *stp;)
> char *name = STp->name;
> struct st_cmdstatus *cmdstatp;
>
> + ctr = scsi_get_ua_por_ctr(STp->device);
> + if (ctr != STp->por_ctr) {
> + STp->por_ctr = ctr;
> + STp->pos_unknown = 1; /* ASC => power on / reset */
> + st_printk(KERN_WARNING, STp, "Power on/reset recognized.");
> + }
> +
> if (!result)
> return 0;
>
> @@ -413,10 +423,11 @@ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
> if (cmdstatp->have_sense &&
> cmdstatp->sense_hdr.asc == 0 && cmdstatp->sense_hdr.ascq == 0x17)
> STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
> - if (cmdstatp->have_sense && scode == UNIT_ATTENTION && cmdstatp->sense_hdr.asc == 0x29)
> + if (cmdstatp->have_sense && scode == UNIT_ATTENTION &&
> + cmdstatp->sense_hdr.asc == 0x29 && !STp->pos_unknown) {
> STp->pos_unknown = 1; /* ASC => power on / reset */
> -
> - STp->pos_unknown |= STp->device->was_reset;
> + st_printk(KERN_WARNING, STp, "Power on/reset recognized.");
> + }
>
> if (cmdstatp->have_sense &&
> scode == RECOVERED_ERROR
> @@ -968,6 +979,7 @@ static int test_ready(struct scsi_tape *STp, int do_wait)
> {
> int attentions, waits, max_wait, scode;
> int retval = CHKRES_READY, new_session = 0;
> + unsigned int ctr;
> unsigned char cmd[MAX_COMMAND_SIZE];
> struct st_request *SRpnt = NULL;
> struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
> @@ -1024,6 +1036,13 @@ static int test_ready(struct scsi_tape *STp, int do_wait)
> }
> }
>
> + ctr = scsi_get_ua_new_media_ctr(STp->device);
> + if (ctr != STp->new_media_ctr) {
> + STp->new_media_ctr = ctr;
> + new_session = 1;
> + DEBC_printk(STp, "New tape session.");
> + }
> +
> retval = (STp->buffer)->syscall_result;
> if (!retval)
> retval = new_session ? CHKRES_NEW_SESSION : CHKRES_READY;
> @@ -4394,6 +4413,9 @@ static int st_probe(struct device *dev)
> goto out_idr_remove;
> }
>
> + tpnt->new_media_ctr = scsi_get_ua_new_media_ctr(SDp);
> + tpnt->por_ctr = scsi_get_ua_por_ctr(SDp);
> +
> dev_set_drvdata(dev, tpnt);
>
>
> diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h
> index 2105c6a5b458..47b0e31b7828 100644
> --- a/drivers/scsi/st.h
> +++ b/drivers/scsi/st.h
> @@ -178,6 +178,10 @@ struct scsi_tape {
> int recover_count; /* From tape opening */
> int recover_reg; /* From last status call */
>
> + /* The saved values of midlevel counters */
> + unsigned int new_media_ctr;
> + unsigned int por_ctr;
> +
> #if DEBUG
> unsigned char write_pending;
> int nbr_finished;
next prev parent reply other threads:[~2024-12-11 22:14 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-25 14:02 [PATCH v2 0/4] scsi: st: scsi_error: More reset patches Kai Mäkisara
2024-11-25 14:02 ` [PATCH v2 1/4] scsi: st: Restore some drive settings after reset Kai Mäkisara
2024-11-25 14:02 ` [PATCH v2 2/4] scsi: scsi_error: Add counters for New Media and Power On/Reset UNIT ATTENTIONs Kai Mäkisara
2024-12-11 21:57 ` John Meneghini
2024-12-11 22:14 ` Bart Van Assche
2024-12-12 18:33 ` "Kai Mäkisara (Kolumbus)"
2024-11-25 14:03 ` [PATCH v2 3/4] scsi: st: Modify st.c to use the new scsi_error counters Kai Mäkisara
2024-12-11 22:14 ` John Meneghini [this message]
2024-11-25 14:03 ` [PATCH v2 4/4] scsi: st: Add sysfs file reset_blocked Kai Mäkisara
2024-12-11 21:57 ` John Meneghini
2024-12-11 21:57 ` [PATCH v2 0/4] scsi: st: scsi_error: More reset patches John Meneghini
2024-12-12 18:27 ` "Kai Mäkisara (Kolumbus)"
2024-12-13 13:09 ` "Kai Mäkisara (Kolumbus)"
2024-12-13 17:32 ` John Meneghini
2024-12-14 13:46 ` "Kai Mäkisara (Kolumbus)"
2024-12-20 22:14 ` John Meneghini
2024-12-21 7:57 ` "Kai Mäkisara (Kolumbus)"
2024-12-13 15:09 ` John Meneghini
2024-12-13 15:28 ` John Meneghini
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=039cfcda-6549-4a46-b945-27f4d749b789@redhat.com \
--to=jmeneghi@redhat.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=Kai.Makisara@kolumbus.fi \
--cc=linux-scsi@vger.kernel.org \
--cc=loberman@redhat.com \
--cc=martin.petersen@oracle.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.