From: Igor Pylypiv <ipylypiv@google.com>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: Niklas Cassel <cassel@kernel.org>, Tejun Heo <tj@kernel.org>,
Hannes Reinecke <hare@suse.de>,
linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 3/4] ata: libata-scsi: Report valid sense data for ATA PT if present
Date: Tue, 18 Jun 2024 00:02:06 +0000 [thread overview]
Message-ID: <ZnDOfqq9Jo-38LBl@google.com> (raw)
In-Reply-To: <dfb741e5-2fe6-4b36-b1ab-55c3c33032d0@kernel.org>
On Mon, Jun 17, 2024 at 08:25:54AM +0900, Damien Le Moal wrote:
> On 6/15/24 04:18, Igor Pylypiv wrote:
> > Do not generate sense data from ATA status/error registers
> > if valid sense data is already present.
>
> This kind of contradicts what you said in patch 2... So I am really confused now.
Sorry about the confustion. I think the problem is that I was using "sense data"
to describe two different things:
#1. SK/ASC/ASCQ
#2. ATA Status Return sense data descriptor
Both #1 and #2 need to be populated into sense buffer. The problem with
the current code is that we can only have either valid #1 or valid #2 but
not both at the same time.
> Though this patch actually looks good to me, modulo the comment below.
> But shouldn't this be squashed with patch 2 ?
Yes, that's a good point. Let me factor out the sense data descriptor
population code into a separate function and then squash this patch with
the patch 2.
>
> >
> > Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
> > ---
> > drivers/ata/libata-scsi.c | 17 +++++++++++------
> > 1 file changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
> > index 79e8103ef3a9..4bfe47e7d266 100644
> > --- a/drivers/ata/libata-scsi.c
> > +++ b/drivers/ata/libata-scsi.c
> > @@ -858,12 +858,17 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
> > unsigned char *desc = sb + 8;
> > u8 sense_key, asc, ascq;
> >
> > - /*
> > - * Use ata_to_sense_error() to map status register bits
> > - * onto sense key, asc & ascq.
> > - */
> > - if (qc->err_mask ||
> > - tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
> > + if (qc->flags & ATA_QCFLAG_SENSE_VALID) {
> > + /*
> > + * Do not generate sense data from ATA status/error
> > + * registers if valid sense data is already present.
> > + */
>
> The empty "if" here is really horrible. Please revert the condition and add it
> as a "&&" in the below if.
>
Adding the condition to the below if will change the code flow and we'll end
up executing scsi_build_sense(cmd, 1, RECOVERED_ERROR, 0, 0x1D) when
ATA_QCFLAG_SENSE_VALID is set, which is not what we want.
I agree about horrible :)
Perhaps I should have factored out the descriptor population code into
a separate function to make the code correct and not so horrible. Let me
do that in v2.
> > + } else if (qc->err_mask ||
> > + tf->status & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
> > + /*
> > + * Use ata_to_sense_error() to map status register bits
> > + * onto sense key, asc & ascq.
> > + */
> > ata_to_sense_error(qc->ap->print_id, tf->status, tf->error,
> > &sense_key, &asc, &ascq);
> > ata_scsi_set_sense(qc->dev, cmd, sense_key, asc, ascq);
>
> --
> Damien Le Moal
> Western Digital Research
>
Thank you,
Igor
next prev parent reply other threads:[~2024-06-18 0:02 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-14 19:18 [PATCH v1 0/4] ATA PASS-THROUGH sense data fixes Igor Pylypiv
2024-06-14 19:18 ` [PATCH v1 1/4] ata: libata: Remove redundant sense_buffer memsets Igor Pylypiv
2024-06-16 23:13 ` Damien Le Moal
2024-06-18 19:31 ` Igor Pylypiv
2024-06-17 10:41 ` Niklas Cassel
2024-06-18 19:58 ` Igor Pylypiv
2024-06-20 11:51 ` Niklas Cassel
2024-06-20 23:21 ` Igor Pylypiv
2024-06-14 19:18 ` [PATCH v1 2/4] ata: libata-scsi: Generate ATA PT sense data when ATA ERR/DF are set Igor Pylypiv
2024-06-16 23:22 ` Damien Le Moal
2024-06-18 1:13 ` Igor Pylypiv
2024-06-20 13:12 ` Niklas Cassel
2024-06-20 23:24 ` Igor Pylypiv
2024-06-17 11:29 ` Niklas Cassel
2024-06-17 12:37 ` Niklas Cassel
2024-06-18 21:51 ` Igor Pylypiv
2024-06-20 12:55 ` Niklas Cassel
2024-06-21 0:05 ` Damien Le Moal
2024-06-21 11:41 ` Niklas Cassel
2024-06-14 19:18 ` [PATCH v1 3/4] ata: libata-scsi: Report valid sense data for ATA PT if present Igor Pylypiv
2024-06-16 23:25 ` Damien Le Moal
2024-06-18 0:02 ` Igor Pylypiv [this message]
2024-06-18 2:20 ` Damien Le Moal
2024-06-17 10:49 ` Niklas Cassel
2024-06-17 23:31 ` Igor Pylypiv
2024-06-20 14:24 ` Niklas Cassel
2024-06-20 14:39 ` Niklas Cassel
2024-06-20 23:34 ` Igor Pylypiv
2024-06-14 19:18 ` [PATCH v1 4/4] ata: libata-scsi: Fix offsets for the fixed format sense data Igor Pylypiv
2024-06-16 23:37 ` Damien Le Moal
2024-06-18 1:51 ` Igor Pylypiv
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=ZnDOfqq9Jo-38LBl@google.com \
--to=ipylypiv@google.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=hare@suse.de \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.org \
/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.