From: Christoph Hellwig <hch@infradead.org>
To: Tom Yan <tom.ty89@gmail.com>
Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org
Subject: Re: [PATCH 1/3] block: try one write zeroes request before going further
Date: Mon, 7 Dec 2020 13:36:58 +0000 [thread overview]
Message-ID: <20201207133658.GC28592@infradead.org> (raw)
In-Reply-To: <20201206055332.3144-1-tom.ty89@gmail.com>
On Sun, Dec 06, 2020 at 01:53:30PM +0800, Tom Yan wrote:
> At least the SCSI disk driver is "benevolent" when it try to decide
> whether the device actually supports write zeroes, i.e. unless the
> device explicity report otherwise, it assumes it does at first.
>
> Therefore before we pile up bios that would fail at the end, we try
> the command/request once, as not doing so could trigger quite a
> disaster in at least certain case. For example, the host controller
> can be messed up entirely when one does `blkdiscard -z` a UAS drive.
>
> Signed-off-by: Tom Yan <tom.ty89@gmail.com>
> ---
> block/blk-lib.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/block/blk-lib.c b/block/blk-lib.c
> index e90614fd8d6a..c1e9388a8fb8 100644
> --- a/block/blk-lib.c
> +++ b/block/blk-lib.c
> @@ -250,6 +250,7 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
> struct bio *bio = *biop;
> unsigned int max_write_zeroes_sectors;
> struct request_queue *q = bdev_get_queue(bdev);
> + int i = 0;
>
> if (!q)
> return -ENXIO;
> @@ -264,7 +265,17 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
> return -EOPNOTSUPP;
>
> while (nr_sects) {
> - bio = blk_next_bio(bio, 0, gfp_mask);
> + if (i != 1) {
> + bio = blk_next_bio(bio, 0, gfp_mask);
> + } else {
> + submit_bio_wait(bio);
> + bio_put(bio);
> +
> + if (bdev_write_zeroes_sectors(bdev) == 0)
> + return -EOPNOTSUPP;
> + else
This means you now massively slow down say nvme operations by adding
a wait. If at all we need a maybe supports write zeroes flag and
only do that if the driver hasn't decided yet if write zeroes is
actually supported.
next prev parent reply other threads:[~2020-12-07 13:37 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-06 5:53 [PATCH 1/3] block: try one write zeroes request before going further Tom Yan
2020-12-06 5:53 ` [PATCH 2/3] block: make __blkdev_issue_zero_pages() less confusing Tom Yan
2020-12-06 11:29 ` Hannes Reinecke
2020-12-06 13:28 ` Tom Yan
2020-12-07 13:34 ` Christoph Hellwig
2020-12-08 12:54 ` Tom Yan
2020-12-06 5:53 ` [PATCH 3/3] block: set REQ_PREFLUSH to the final bio from __blkdev_issue_zero_pages() Tom Yan
2020-12-06 11:31 ` Hannes Reinecke
2020-12-06 13:32 ` Tom Yan
2020-12-06 14:05 ` Hannes Reinecke
2020-12-06 14:14 ` Tom Yan
2020-12-06 16:05 ` Hannes Reinecke
2020-12-08 12:51 ` Tom Yan
2020-12-07 13:35 ` Christoph Hellwig
2020-12-06 11:25 ` [PATCH 1/3] block: try one write zeroes request before going further Hannes Reinecke
2020-12-06 13:25 ` Tom Yan
2020-12-06 13:56 ` Hannes Reinecke
2020-12-06 14:07 ` Tom Yan
2020-12-06 14:28 ` Tom Yan
2020-12-07 13:36 ` Christoph Hellwig [this message]
2020-12-08 12:48 ` Tom Yan
2020-12-09 17:51 ` Christoph Hellwig
2020-12-08 22:46 ` Ewan D. Milne
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=20201207133658.GC28592@infradead.org \
--to=hch@infradead.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=tom.ty89@gmail.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 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).