All of lore.kernel.org
 help / color / mirror / Atom feed
From: Douglas Gilbert <dgilbert@interlog.com>
To: Hannes Reinecke <hare@suse.de>,
	Bart Van Assche <bvanassche@acm.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Christoph Hellwig <hch@lst.de>,
	James Bottomley <james.bottomley@hansenpartnership.com>,
	linux-scsi@vger.kernel.org
Subject: Re: [PATCH 14/42] scsi: add scsi_result_is_good()
Date: Thu, 22 Apr 2021 11:56:12 -0400	[thread overview]
Message-ID: <db827915-84e0-1aea-7b30-a01a22059817@interlog.com> (raw)
In-Reply-To: <d74a6a9a-6187-8847-7364-0bf7999b3379@suse.de>

On 2021-04-22 4:42 a.m., Hannes Reinecke wrote:
> On 4/21/21 11:58 PM, Douglas Gilbert wrote:
>> On 2021-04-21 5:10 p.m., Bart Van Assche wrote:
>>> On 4/21/21 10:47 AM, Hannes Reinecke wrote:
>>>> +static inline bool scsi_result_is_good(struct scsi_cmnd *cmd)
>>>> +{
>>>> +    return (cmd->result == 0);
>>>> +}
>>>
>>> Do we really need an inline function to compare an integer with zero? How 
>>> about open-coding this comparison in the callers of this function?
>>>
>>
>> Please don't open code it. Please fix it!
>> Spot the difference:
>>
>> static inline int scsi_status_is_good(int status)
>> {
>>          /*
>>           * FIXME: bit0 is listed as reserved in SCSI-2, but is
>>           * significant in SCSI-3.  For now, we follow the SCSI-2
>>           * behaviour and ignore reserved bits.
>>           */
>>          status &= 0xfe;
>>          return ((status == SAM_STAT_GOOD) ||
>>                  (status == SAM_STAT_CONDITION_MET) ||
>> /*   >>>                   ^^^^^^^^^^^^^^^^^^^^^^ <<<        */
>>                  /* Next two "intermediate" statuses are obsolete in SAM-4 */
>>                  (status == SAM_STAT_INTERMEDIATE) ||
>>                  (status == SAM_STAT_INTERMEDIATE_CONDITION_MET) ||
>>                  /* FIXME: this is obsolete in SAM-3 */
>>                  (status == SAM_STAT_COMMAND_TERMINATED));
>> }
>>
>> In sg3_utils' library I ignore the last three SAM_STATs. Not sure if ignoring
>> bit 0 is still required.
>>
>> Without considering SAM_STAT_CONDITION_MET a good status, someone will be
>> scratching their head wondering why so many PRE-FETCH commands fail.
>>
>> That command can be used when a sequence of READs to consecutive LBAs is
>> followed by a different (i.e. non-consecutive) READ. That last READ could
>> be preceded by PRE-FETCH(new_LBA, IMMED). Assuming there is processing
>> of the data from the consecutive LBAs to be done, when the time comes
>> for READ(new_LBA) the probability of its data being in the disk's cache is
>> increased.
>>
> That would be a change in behaviour.
> Current code doesn't check for CONDITION_MET, so this change shouldn't do it, 
> neither. Idea was that this patchset shouldn't change the current behaviour.
> 
> While your argument might be valid, it definitely is a different story and would 
> need to be address with a different patchset.

Okay. May I suggest a "FIX_ME" comment? And again, please don't open code it.

In driver manuals Seagate often list the PRE-FETCH command as optional. As
in: pay us some extra money and we will put it in. That suggests to me some
big OEM likes PRE-FETCH. Where I found it supported in WDC manuals, they
didn't support the IMMED bit which sort of defeats the purpose of it IMO.

Doug Gilbert



  parent reply	other threads:[~2021-04-22 15:56 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-21 17:47 [RFC PATCH 00/42] SCSI result cleanup, part 2 Hannes Reinecke
2021-04-21 17:47 ` [PATCH 01/42] st: return error code in st_scsi_execute() Hannes Reinecke
2021-04-21 20:56   ` Bart Van Assche
2021-04-21 17:47 ` [PATCH 02/42] scsi_ioctl: return error code when blk_rq_map_kern() fails Hannes Reinecke
2021-04-21 21:01   ` Bart Van Assche
2021-04-22  6:29     ` Hannes Reinecke
2021-04-21 17:47 ` [PATCH 03/42] scsi_dh_alua: do not interpret DRIVER_ERROR Hannes Reinecke
2021-04-21 17:47 ` [PATCH 04/42] scsi: Fixup calling convention for scsi_mode_sense() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 05/42] scsi: stop using DRIVER_ERROR Hannes Reinecke
2021-04-21 21:30   ` Bart Van Assche
2021-04-22  8:39     ` Hannes Reinecke
2021-04-21 17:47 ` [PATCH 06/42] scsi: introduce scsi_build_sense() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 07/42] scsi: Kill DRIVER_SENSE Hannes Reinecke
2021-04-21 19:46   ` Douglas Gilbert
2021-04-21 20:07     ` Hannes Reinecke
2021-04-21 21:06   ` Bart Van Assche
2021-04-22  6:31     ` Hannes Reinecke
2021-04-22 15:46       ` Douglas Gilbert
2021-04-21 17:47 ` [PATCH 08/42] scsi: do not use DRIVER_INVALID Hannes Reinecke
2021-04-21 17:47 ` [PATCH 09/42] scsi_error: use DID_TIME_OUT instead of DRIVER_TIMEOUT Hannes Reinecke
2021-04-21 17:47 ` [PATCH 10/42] xen-scsiback: use DID_ERROR instead of DRIVER_ERROR Hannes Reinecke
2021-04-21 17:47 ` [PATCH 11/42] xen-scsifront: compability status handling Hannes Reinecke
2021-04-21 17:47 ` [PATCH 12/42] scsi: Drop the now obsolete driver_byte definitions Hannes Reinecke
2021-04-21 17:47 ` [PATCH 13/42] scsi: add get_{status,host}_byte() accessor function Hannes Reinecke
2021-04-21 21:09   ` Bart Van Assche
2021-04-22  6:33     ` Hannes Reinecke
2021-04-21 17:47 ` [PATCH 14/42] scsi: add scsi_result_is_good() Hannes Reinecke
2021-04-21 21:10   ` Bart Van Assche
2021-04-21 21:58     ` Douglas Gilbert
2021-04-22  8:42       ` Hannes Reinecke
2021-04-22  9:36         ` Finn Thain
2021-04-22 15:56         ` Douglas Gilbert [this message]
2021-04-22 16:51           ` Douglas Gilbert
2021-04-22 16:52           ` Bart Van Assche
2021-04-22 17:33             ` Douglas Gilbert
2021-04-26  8:45               ` Hannes Reinecke
2021-04-22  6:34     ` Hannes Reinecke
2021-04-21 17:47 ` [PATCH 15/42] NCR5380: use SCSI result accessors Hannes Reinecke
2021-04-21 21:11   ` Bart Van Assche
2021-04-22  6:37     ` Hannes Reinecke
2021-04-22 16:10       ` Bart Van Assche
2021-04-26  8:30         ` Hannes Reinecke
2021-04-22  9:36   ` Finn Thain
2021-04-21 17:47 ` [PATCH 16/42] NCR5380: Fold SCSI message ABORT onto DID_ABORT Hannes Reinecke
2021-04-22  9:35   ` Finn Thain
2021-04-21 17:47 ` [PATCH 17/42] scsi: add translate_msg_byte() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 18/42] dc395: use standard macros to set SCSI result Hannes Reinecke
2021-04-21 22:26   ` Bart Van Assche
2021-04-22  8:52     ` Hannes Reinecke
2021-04-22 16:12       ` Bart Van Assche
2021-04-21 17:47 ` [PATCH 19/42] dc395: translate message bytes Hannes Reinecke
2021-04-21 17:47 ` [PATCH 20/42] qlogicfas408: make ql_pcmd() a void function Hannes Reinecke
2021-04-21 17:47 ` [PATCH 21/42] qlogicfas408: whitespace cleanup Hannes Reinecke
2021-04-21 17:47 ` [PATCH 22/42] qlogicfas408: translate message to host byte status Hannes Reinecke
2021-04-21 17:47 ` [PATCH 23/42] nsp32: use standard macros to set SCSI result Hannes Reinecke
2021-04-21 17:47 ` [PATCH 24/42] nsp32: whitespace cleanup Hannes Reinecke
2021-04-21 17:47 ` [PATCH 25/42] nsp32: do not set message byte Hannes Reinecke
2021-04-21 17:47 ` [PATCH 26/42] wd33c93: use standard macros to set SCSI result Hannes Reinecke
2021-04-21 17:47 ` [PATCH 27/42] wd33c93: translate message byte to host byte Hannes Reinecke
2021-04-21 17:47 ` [PATCH 28/42] mesh: use standard macros to set SCSI result Hannes Reinecke
2021-04-21 17:47 ` [PATCH 29/42] mesh: translate message to host byte status Hannes Reinecke
2021-04-21 17:47 ` [PATCH 30/42] acornscsi: use standard macros to set SCSI result Hannes Reinecke
2021-04-21 17:47 ` [PATCH 31/42] acornscsi: remove acornscsi_reportstatus() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 32/42] acornscsi: translate message byte to host byte Hannes Reinecke
2021-04-21 17:47 ` [PATCH 33/42] aha152x: modify done() to use separate status bytes Hannes Reinecke
2021-04-21 17:47 ` [PATCH 34/42] aha152x: do not set message byte when calling scsi_done() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 35/42] advansys: do not set message byte in SCSI status Hannes Reinecke
2021-04-21 17:47 ` [PATCH 36/42] advansys: use SCSI result accessors Hannes Reinecke
2021-04-21 17:47 ` [PATCH 37/42] fas216: translate message to host byte status Hannes Reinecke
2021-04-21 17:47 ` [PATCH 38/42] fas216: convert to SCSI Accessors Hannes Reinecke
2021-04-21 17:47 ` [PATCH 39/42] fdomain: drop last argument to fdomain_finish_cmd() Hannes Reinecke
2021-04-21 17:47 ` [PATCH 40/42] fdomain: translate message to host byte status Hannes Reinecke
2021-04-21 17:47 ` [PATCH 41/42] scsi: drop message byte helper Hannes Reinecke
2021-04-21 21:14   ` Bart Van Assche
2021-04-22  6:37     ` Hannes Reinecke
2021-04-21 17:47 ` [PATCH 42/42] scsi: kill message byte Hannes Reinecke
2021-04-21 20:54 ` [RFC PATCH 00/42] SCSI result cleanup, part 2 Bart Van Assche
2021-04-21 22:26 ` Bart Van Assche
2021-04-22  8:49   ` Hannes Reinecke
2021-04-22 16:28     ` Bart Van Assche

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=db827915-84e0-1aea-7b30-a01a22059817@interlog.com \
    --to=dgilbert@interlog.com \
    --cc=bvanassche@acm.org \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=james.bottomley@hansenpartnership.com \
    --cc=linux-scsi@vger.kernel.org \
    --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.