linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: Niklas Cassel <Niklas.Cassel@wdc.com>
Cc: "linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	"Maciej S . Szmigiero" <mail@maciej.szmigiero.name>,
	Hannes Reinecke <hare@suse.de>, Christoph Hellwig <hch@lst.de>
Subject: Re: [PATCH v6 7/7] ata: libata: Enable fua support by default
Date: Fri, 30 Dec 2022 20:21:59 +0900	[thread overview]
Message-ID: <602e37be-38fa-0143-a6fe-010aa74197d8@opensource.wdc.com> (raw)
In-Reply-To: <Y67DaUBSFBU9xoIU@x1-carbon>

On 12/30/22 19:54, Niklas Cassel wrote:
> On Tue, Nov 08, 2022 at 02:55:44PM +0900, Damien Le Moal wrote:
>> Change the default value of the fua module parameter to 1 to enable fua
>> support by default for all devices supporting it.
>>
>> FUA support can be disabled for individual drives using the
>> force=[ID]nofua libata module argument.
>>
>> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
>> Reviewed-by: Hannes Reinecke <hare@suse.de>
>> Reviewed-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
>> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
>> ---
>>  drivers/ata/libata-core.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
>> index 97ade977b830..2967671131d2 100644
>> --- a/drivers/ata/libata-core.c
>> +++ b/drivers/ata/libata-core.c
>> @@ -127,9 +127,9 @@ int atapi_passthru16 = 1;
>>  module_param(atapi_passthru16, int, 0444);
>>  MODULE_PARM_DESC(atapi_passthru16, "Enable ATA_16 passthru for ATAPI devices (0=off, 1=on [default])");
>>  
>> -int libata_fua = 0;
>> +int libata_fua = 1;
>>  module_param_named(fua, libata_fua, int, 0444);
>> -MODULE_PARM_DESC(fua, "FUA support (0=off [default], 1=on)");
>> +MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on [default])");
>>  
>>  static int ata_ignore_hpa;
>>  module_param_named(ignore_hpa, ata_ignore_hpa, int, 0644);
>> -- 
>> 2.38.1
>>
> 
> Before this commit:
> -For a SCSI mode sense:
>  FUA bit will not get set in the simulated SCSI cmd output buffer,
>  since ATA_DFLAG_FUA is not be set, since libata_fua == 0.
> -For a SCSI WRITE_16 / WRITE_16 command:
>  ata_scsi_rw_xlat() sets ATA_TFLAG_FUA, regardless if ATA_DFLAG_FUA
>  is set or not. ata_set_rwcmd_protocol() will return a FUA command
>  as long as ATA_TFLAG_FUA is set.
> 
> After this commit:
> -For a SCSI mode sense:
>  FUA bit will get set in the simulated SCSI cmd output buffer,
>  since ATA_DFLAG_FUA is set, since libata_fua == 1.
> -For a SCSI WRITE_16 / WRITE_16 command:
>  ata_scsi_rw_xlat() sets ATA_TFLAG_FUA, regardless if ATA_DFLAG_FUA
>  is set or not. ata_set_rwcmd_protocol() will return a FUA command
>  as long as ATA_TFLAG_FUA is set.
> 
> 
> Perhaps this commit should more clearly say that this commit only affects
> the simulated output for a SCSI mode sense command?
> 
> Currently, the commit message is a bit misleading, since it makes the
> reader think that a SCSI write command with the FUA bit was not propagated
> to the device before this commit, which AFAICT, is not true.

It was not with the default libata.fua = 0, since the drive would never be
exposed as having FUA support. See ata_dev_supports_fua() and its test for
"!libata_fua" and how that function was used in ata_scsiop_mode_sense().

The confusing thing here is that indeed there is no code preventing
propagating FUA bit to the device in libata-core/libata-scsi for any
REQ_FUA request. But the fact that devices would never report FUA support
means that the block layer would never issue a request with REQ_FUA set.

> 
> If the intention of this series was to only send a ATA write command to
> the device, if the device has the ATA_DFLAG_FUA flag set, then perhaps the
> series should include a new commit which either:
> -Adds a check to ata_scsi_rw_xlat() so that it only sets ATA_TFLAG_FUA if
> ATA_DFLAG_FUA is set;

See above. I do not think that is needed since the block layer will never
ever send a REQ_FUA request when ATA_DFLAG_FUA is not set.

> or
> -Adds a check to ata_scsi_rw_xlat() which returns an error if the SCSI
> command has the FUA bit set, but ATA_DFLAG_FUA is not set.

That would be possible for passthrough commands only. What is going to
happen is that we'll now get an error for that write if the drive does not
support NCQ or has NCQ disabled.

> 
> 
> Kind regards,
> Niklas

-- 
Damien Le Moal
Western Digital Research


  reply	other threads:[~2022-12-30 11:22 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-08  5:55 [PATCH v6 0/7] Improve libata support for FUA Damien Le Moal
2022-11-08  5:55 ` [PATCH v6 1/7] block: add a sanity check for non-write flush/fua bios Damien Le Moal
2022-11-08  7:37   ` Johannes Thumshirn
2022-12-30  7:21   ` Niklas Cassel
2022-12-30 11:54   ` Niklas Cassel
2022-12-30 12:28     ` Damien Le Moal
2023-01-02 17:35   ` Jens Axboe
2022-11-08  5:55 ` [PATCH v6 2/7] ata: libata: Introduce ata_ncq_supported() Damien Le Moal
2022-11-08  7:38   ` Johannes Thumshirn
2022-12-30  7:38   ` Niklas Cassel
2022-11-08  5:55 ` [PATCH v6 3/7] ata: libata: Rename and cleanup ata_rwcmd_protocol() Damien Le Moal
2022-11-08  7:39   ` Johannes Thumshirn
2022-12-30  7:42   ` Niklas Cassel
2022-11-08  5:55 ` [PATCH v6 4/7] ata: libata: cleanup fua support detection Damien Le Moal
2022-11-08  7:42   ` Johannes Thumshirn
2022-12-30  8:01   ` Niklas Cassel
2022-11-08  5:55 ` [PATCH v6 5/7] ata: libata: Fix FUA handling in ata_build_rw_tf() Damien Le Moal
2022-11-08  6:21   ` Christoph Hellwig
2022-11-08  7:44   ` Johannes Thumshirn
2022-12-30  8:57   ` Niklas Cassel
2022-11-08  5:55 ` [PATCH v6 6/7] ata: libata: blacklist FUA support for known buggy drives Damien Le Moal
2022-11-08  7:45   ` Johannes Thumshirn
2022-12-30  8:58   ` Niklas Cassel
2022-11-08  5:55 ` [PATCH v6 7/7] ata: libata: Enable fua support by default Damien Le Moal
2022-11-08  7:45   ` Johannes Thumshirn
2022-12-30 10:54   ` Niklas Cassel
2022-12-30 11:21     ` Damien Le Moal [this message]
2022-12-30 12:41       ` Niklas Cassel
2022-12-30 12:55         ` Damien Le Moal
2022-12-30 14:47   ` Niklas Cassel
2022-12-29 17:55 ` [PATCH v6 0/7] Improve libata support for FUA Maciej S. Szmigiero

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=602e37be-38fa-0143-a6fe-010aa74197d8@opensource.wdc.com \
    --to=damien.lemoal@opensource.wdc.com \
    --cc=Niklas.Cassel@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=mail@maciej.szmigiero.name \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).