From: Jens Axboe <axboe@kernel.dk>
To: Dave Chinner <david@fromorbit.com>
Cc: linux-xfs@vger.kernel.org, linux-block@vger.kernel.org, hch@lst.de
Subject: Re: [PATCH 2/2] xfs: add 'discard_sync' mount flag
Date: Mon, 30 Apr 2018 17:00:14 -0600 [thread overview]
Message-ID: <799de885-34f0-0cae-ae64-bf7bc194965d@kernel.dk> (raw)
In-Reply-To: <87589bc6-e5f5-6247-485f-2237e0c493ad@kernel.dk>
On 4/30/18 4:40 PM, Jens Axboe wrote:
> On 4/30/18 4:28 PM, Dave Chinner wrote:
>> Yes, it does, but so would having the block layer to throttle device
>> discard requests in flight to a queue depth of 1. And then we don't
>> have to change XFS at all.
>
> I'm perfectly fine with making that change by default, and much easier
> for me since I don't have to patch file systems.
Totally untested, but this should do the trick. It ensures we have
a QD of 1 (per caller), which should be sufficient.
If people tune down the discard size, then you'll be blocking waiting
for discards on issue.
diff --git a/block/blk-lib.c b/block/blk-lib.c
index a676084d4740..0bf9befcc863 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -11,16 +11,19 @@
#include "blk.h"
static struct bio *next_bio(struct bio *bio, unsigned int nr_pages,
- gfp_t gfp)
+ gfp_t gfp)
{
- struct bio *new = bio_alloc(gfp, nr_pages);
-
+ /*
+ * Devices suck at discard, so if we have to break up the bio
+ * size due to the max discard size setting, wait for the
+ * previous one to finish first.
+ */
if (bio) {
- bio_chain(bio, new);
- submit_bio(bio);
+ submit_bio_wait(bio);
+ bio_put(bio);
}
- return new;
+ return bio_alloc(gfp, nr_pages);
}
int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
@@ -63,7 +66,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
sector_t end_sect, tmp;
/* Make sure bi_size doesn't overflow */
- req_sects = min_t(sector_t, nr_sects, UINT_MAX >> 9);
+ req_sects = min_t(sector_t, nr_sects,
+ q->limits.max_discard_sectors);
/**
* If splitting a request, and the next starting sector would be
--
Jens Axboe
next prev parent reply other threads:[~2018-04-30 23:00 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-30 15:32 [PATCHSET 0/2] sync discard Jens Axboe
2018-04-30 15:32 ` [PATCH 1/2] block: add BLKDEV_DISCARD_SYNC flag Jens Axboe
2018-04-30 15:32 ` [PATCH 2/2] xfs: add 'discard_sync' mount flag Jens Axboe
2018-04-30 17:19 ` Brian Foster
2018-04-30 18:07 ` Jens Axboe
2018-04-30 18:25 ` Luis R. Rodriguez
2018-04-30 18:31 ` Jens Axboe
2018-04-30 19:19 ` Eric Sandeen
2018-04-30 19:21 ` Jens Axboe
2018-04-30 19:57 ` Eric Sandeen
2018-04-30 19:58 ` Jens Axboe
2018-04-30 22:59 ` Eric Sandeen
2018-04-30 23:02 ` Jens Axboe
2018-04-30 19:18 ` Brian Foster
2018-04-30 21:31 ` Dave Chinner
2018-04-30 21:42 ` Jens Axboe
2018-04-30 22:28 ` Dave Chinner
2018-04-30 22:40 ` Jens Axboe
2018-04-30 23:00 ` Jens Axboe [this message]
2018-04-30 23:23 ` Dave Chinner
2018-05-01 11:11 ` Brian Foster
2018-05-01 15:23 ` Jens Axboe
2018-05-02 2:54 ` Martin K. Petersen
2018-05-02 14:20 ` Jens Axboe
2018-04-30 23:01 ` Darrick J. Wong
2018-05-02 12:45 ` [PATCHSET 0/2] sync discard Christoph Hellwig
2018-05-02 14:19 ` Jens Axboe
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=799de885-34f0-0cae-ae64-bf7bc194965d@kernel.dk \
--to=axboe@kernel.dk \
--cc=david@fromorbit.com \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=linux-xfs@vger.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 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).