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 21:55:21 +0900 [thread overview]
Message-ID: <a6bf8748-a47a-41d7-2c61-43a333df863d@opensource.wdc.com> (raw)
In-Reply-To: <Y67cdx1h0QMb0brO@x1-carbon>
On 12/30/22 21:41, Niklas Cassel wrote:
> On Fri, Dec 30, 2022 at 08:21:59PM +0900, Damien Le Moal wrote:
>> On 12/30/22 19:54, Niklas Cassel wrote:
>>>
>>> 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().
>
> I see, drivers/scsi/sd.c does a SCSI mode sense to check if FUA is reported
> as being supported, and then calls the block layer setter for this.
>
> So changing the simulated SCSI cmd output is sufficient to tell the block
> layer that it can send FUA requests to us.
>
>>
>> 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.
>
> Well, ata_scsi_rw_xlat() is used both for passthrough commands and commands
> issued by the block layer.
>
> Just like how ata_scsiop_mode_sense() will be called regardless if it was a
> passthrough command or a command issued by the block layer.
>
> ata_scsiop_mode_sense() will not behave differently if it was a command
> issued by the block layer or if it was e.g. a SG command.
>
> I would argue that it makes sense (pun intended) for ata_scsi_rw_xlat() to
> also behave the same, regardless if it was a command issued by the block
> layer of if it was e.g. a SG command, but I will leave that to you to decide.
Yes, we can improve that. The current series does not change the
relatively (and really old) bad handling of passthrough FUA commands. So
this is something we can do on top of the fua series.
>
>
>> 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.
>
> Why would it give an error on a drive that has NCQ disabled?
My bad. It will not. In that case, WRITE FUA EXT will be used for an FUA
write.
>
> Your new code looks like this:
>
> static void ata_dev_config_fua(struct ata_device *dev)
> {
> /* Ignore FUA support if its use is disabled globally */
> if (!libata_fua)
> goto nofua;
>
> /* Ignore devices without support for WRITE DMA FUA EXT */
> if (!(dev->flags & ATA_DFLAG_LBA48) || !ata_id_has_fua(dev->id))
> goto nofua;
>
> /* Ignore known bad devices and devices that lack NCQ support */
> if (!ata_ncq_supported(dev) || (dev->horkage & ATA_HORKAGE_NO_FUA))
> goto nofua;
>
> dev->flags |= ATA_DFLAG_FUA;
>
> return;
>
> nofua:
> dev->flags &= ~ATA_DFLAG_FUA;
> }
>
> So it should only give an error for a drive where NCQ is not supported.
> If NCQ is supported, but disabled, you will still send a ATA_CMD_WRITE_FUA_EXT
> command.
Yes.
>
>
> Kind regards,
> Niklas
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2022-12-30 12:55 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
2022-12-30 12:41 ` Niklas Cassel
2022-12-30 12:55 ` Damien Le Moal [this message]
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=a6bf8748-a47a-41d7-2c61-43a333df863d@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