From: Naohiro Aota <naohiro.aota@wdc.com>
To: Josef Bacik <josef@toxicpanda.com>
Cc: linux-btrfs@vger.kernel.org, dsterba@suse.com, hare@suse.com,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v9 18/41] btrfs: reset zones of unused block groups
Date: Tue, 10 Nov 2020 19:40:14 +0900 [thread overview]
Message-ID: <20201110104014.drw776gqibt4sqn3@naota.dhcp.fujisawa.hgst.com> (raw)
In-Reply-To: <7b48d9f1-53d8-2526-e628-13331e4fe344@toxicpanda.com>
On Tue, Nov 03, 2020 at 09:34:19AM -0500, Josef Bacik wrote:
>On 10/30/20 9:51 AM, Naohiro Aota wrote:
>>For an ZONED volume, a block group maps to a zone of the device. For
>>deleted unused block groups, the zone of the block group can be reset to
>>rewind the zone write pointer at the start of the zone.
>>
>>Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
>>---
>> fs/btrfs/block-group.c | 8 ++++++--
>> fs/btrfs/extent-tree.c | 17 ++++++++++++-----
>> fs/btrfs/zoned.h | 16 ++++++++++++++++
>> 3 files changed, 34 insertions(+), 7 deletions(-)
>>
>>diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
>>index d67f9cabe5c1..82d556368c85 100644
>>--- a/fs/btrfs/block-group.c
>>+++ b/fs/btrfs/block-group.c
>>@@ -1468,8 +1468,12 @@ void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)
>> if (!async_trim_enabled && btrfs_test_opt(fs_info, DISCARD_ASYNC))
>> goto flip_async;
>>- /* DISCARD can flip during remount */
>>- trimming = btrfs_test_opt(fs_info, DISCARD_SYNC);
>>+ /*
>>+ * DISCARD can flip during remount. In ZONED mode, we need
>>+ * to reset sequential required zones.
>>+ */
>>+ trimming = btrfs_test_opt(fs_info, DISCARD_SYNC) ||
>>+ btrfs_is_zoned(fs_info);
>> /* Implicit trim during transaction commit. */
>> if (trimming)
>>diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>>index 5e6b4d1712f2..c134746d7417 100644
>>--- a/fs/btrfs/extent-tree.c
>>+++ b/fs/btrfs/extent-tree.c
>>@@ -1331,6 +1331,9 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
>> stripe = bbio->stripes;
>> for (i = 0; i < bbio->num_stripes; i++, stripe++) {
>>+ struct btrfs_device *dev = stripe->dev;
>>+ u64 physical = stripe->physical;
>>+ u64 length = stripe->length;
>> u64 bytes;
>> struct request_queue *req_q;
>>@@ -1338,14 +1341,18 @@ int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
>> ASSERT(btrfs_test_opt(fs_info, DEGRADED));
>> continue;
>> }
>>+
>> req_q = bdev_get_queue(stripe->dev->bdev);
>>- if (!blk_queue_discard(req_q))
>>+ /* zone reset in ZONED mode */
>>+ if (btrfs_can_zone_reset(dev, physical, length))
>>+ ret = btrfs_reset_device_zone(dev, physical,
>>+ length, &bytes);
>>+ else if (blk_queue_discard(req_q))
>>+ ret = btrfs_issue_discard(dev->bdev, physical,
>>+ length, &bytes);
>>+ else
>> continue;
>>- ret = btrfs_issue_discard(stripe->dev->bdev,
>>- stripe->physical,
>>- stripe->length,
>>- &bytes);
>
>The problem is you have
>
>if (btrfs_test_opt(fs_info, DISCARD_SYNC))
> ret = btrfs_discard_extent(fs_info, start,
> end + 1 - start, NULL);
>
>in btrfs_finish_extent_commit, so even if you add support here, you
>aren't actually discarding anything because the transaction commit
>won't call discard for this range.
btrfs_discard_extent() is called for each deleted_bg on the BG area,
regardless of the above pinned_extent's range.
>
>You're going to have to rework this logic to allow for discard to be
>called everywhere it checks DISCARD_SYNC, but then you also need to go
>and make sure you don't actually allow discards to happen at non-bg
>aligned ranges. Thanks,
>
>Josef
We already ignore btrfs_discard_extent() which is not aligned to zone. So,
I confirmed it worked fine with DISCARD_SYNC.
next prev parent reply other threads:[~2020-11-10 10:40 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-30 13:51 [PATCH v9 00/41] btrfs: zoned block device support Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 01/41] block: add bio_add_zone_append_page Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 02/41] iomap: support REQ_OP_ZONE_APPEND Naohiro Aota
2020-11-02 5:34 ` Naohiro Aota
2020-11-02 16:55 ` Darrick J. Wong
2020-11-02 17:39 ` Johannes Thumshirn
2020-10-30 13:51 ` [PATCH v9 03/41] btrfs: introduce ZONED feature flag Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 04/41] btrfs: Get zone information of zoned block devices Naohiro Aota
2020-11-02 16:53 ` Josef Bacik
2020-11-02 16:58 ` Johannes Thumshirn
2020-11-02 21:07 ` Naohiro Aota
2020-11-03 12:02 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 05/41] btrfs: Check and enable ZONED mode Naohiro Aota
2020-11-03 12:13 ` David Sterba
2020-11-06 9:36 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 06/41] btrfs: introduce max_zone_append_size Naohiro Aota
2020-11-02 16:57 ` Josef Bacik
2020-11-03 12:16 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 07/41] btrfs: disallow space_cache in ZONED mode Naohiro Aota
2020-11-02 17:02 ` Josef Bacik
2020-11-02 17:37 ` Johannes Thumshirn
2020-11-03 12:48 ` David Sterba
2020-11-10 10:14 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 08/41] btrfs: disallow NODATACOW " Naohiro Aota
2020-11-02 17:05 ` Josef Bacik
2020-11-03 12:57 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 09/41] btrfs: disable fallocate " Naohiro Aota
2020-11-03 13:00 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 10/41] btrfs: disallow mixed-bg " Naohiro Aota
2020-11-03 13:01 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 11/41] btrfs: implement log-structured superblock for " Naohiro Aota
2020-11-02 18:22 ` Josef Bacik
2020-11-02 18:53 ` Johannes Thumshirn
2020-11-02 19:01 ` Josef Bacik
2020-11-02 19:31 ` Johannes Thumshirn
2020-11-03 8:21 ` Naohiro Aota
2020-11-02 18:54 ` Josef Bacik
2020-11-03 3:31 ` Naohiro Aota
2020-11-03 13:15 ` David Sterba
2020-11-03 14:10 ` David Sterba
2020-11-06 10:37 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 12/41] btrfs: implement zoned chunk allocator Naohiro Aota
2020-11-02 20:09 ` Josef Bacik
2020-11-02 22:21 ` Naohiro Aota
2020-11-03 13:23 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 13/41] btrfs: verify device extent is aligned to zone Naohiro Aota
2020-11-02 20:14 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 14/41] btrfs: load zone's alloction offset Naohiro Aota
2020-11-02 20:25 ` Josef Bacik
2020-11-02 20:29 ` Josef Bacik
2020-11-02 22:43 ` Naohiro Aota
2020-11-02 22:40 ` Naohiro Aota
2020-11-03 13:28 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 15/41] btrfs: emulate write pointer for conventional zones Naohiro Aota
2020-11-02 20:37 ` Josef Bacik
2020-11-03 1:25 ` Naohiro Aota
2020-11-03 13:32 ` David Sterba
2020-10-30 13:51 ` [PATCH v9 16/41] btrfs: track unusable bytes for zones Naohiro Aota
2020-11-03 14:25 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 17/41] btrfs: do sequential extent allocation in ZONED mode Naohiro Aota
2020-11-03 14:28 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 18/41] btrfs: reset zones of unused block groups Naohiro Aota
2020-11-03 14:34 ` Josef Bacik
2020-11-10 10:40 ` Naohiro Aota [this message]
2020-10-30 13:51 ` [PATCH v9 19/41] btrfs: redirty released extent buffers in ZONED mode Naohiro Aota
2020-11-03 14:41 ` Josef Bacik
2020-11-06 9:11 ` Johannes Thumshirn
2020-11-06 15:01 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 20/41] btrfs: extract page adding function Naohiro Aota
2020-11-03 14:45 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 21/41] btrfs: use bio_add_zone_append_page for zoned btrfs Naohiro Aota
2020-11-03 14:55 ` Josef Bacik
2020-11-10 10:42 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 22/41] btrfs: handle REQ_OP_ZONE_APPEND as writing Naohiro Aota
2020-11-03 14:57 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 23/41] btrfs: split ordered extent when bio is sent Naohiro Aota
2020-11-03 15:29 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 24/41] btrfs: extend btrfs_rmap_block for specifying a device Naohiro Aota
2020-11-03 15:32 ` Josef Bacik
2020-11-06 10:52 ` Johannes Thumshirn
2020-10-30 13:51 ` [PATCH v9 25/41] btrfs: use ZONE_APPEND write for ZONED btrfs Naohiro Aota
2020-11-03 15:55 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 26/41] btrfs: enable zone append writing for direct IO Naohiro Aota
2020-11-03 15:56 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 27/41] btrfs: introduce dedicated data write path for ZONED mode Naohiro Aota
2020-11-03 15:57 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 28/41] btrfs: serialize meta IOs on " Naohiro Aota
2020-11-03 16:04 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 29/41] btrfs: wait existing extents before truncating Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 30/41] btrfs: avoid async metadata checksum on ZONED mode Naohiro Aota
2020-11-03 16:05 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 31/41] btrfs: mark block groups to copy for device-replace Naohiro Aota
2020-11-03 17:09 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 32/41] btrfs: implement cloning for ZONED device-replace Naohiro Aota
2020-11-03 17:15 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 33/41] btrfs: implement copying " Naohiro Aota
2020-11-03 17:19 ` Josef Bacik
2020-11-10 11:09 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 34/41] btrfs: support dev-replace in ZONED mode Naohiro Aota
2020-11-03 20:34 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 35/41] btrfs: enable relocation " Naohiro Aota
2020-11-03 20:39 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 36/41] btrfs: relocate block group to repair IO failure in ZONED Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 37/41] btrfs: split alloc_log_tree() Naohiro Aota
2020-11-03 20:42 ` Josef Bacik
2020-11-03 22:10 ` Amy Parker
2020-11-10 11:12 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 38/41] btrfs: extend zoned allocator to use dedicated tree-log block group Naohiro Aota
2020-11-03 20:47 ` Josef Bacik
2020-11-10 6:37 ` Naohiro Aota
2020-10-30 13:51 ` [PATCH v9 39/41] btrfs: serialize log transaction on ZONED mode Naohiro Aota
2020-11-03 20:49 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 40/41] btrfs: reorder log node allocation Naohiro Aota
2020-11-03 20:49 ` Josef Bacik
2020-10-30 13:51 ` [PATCH v9 41/41] btrfs: enable to mount ZONED incompat flag Naohiro Aota
2020-10-31 3:40 ` [PATCH v9 01/41] block: add bio_add_zone_append_page Jens Axboe
2020-11-02 5:15 ` Naohiro Aota
2020-11-02 8:24 ` Johannes Thumshirn
2020-11-03 11:54 ` [PATCH v9 00/41] btrfs: zoned block device support David Sterba
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=20201110104014.drw776gqibt4sqn3@naota.dhcp.fujisawa.hgst.com \
--to=naohiro.aota@wdc.com \
--cc=dsterba@suse.com \
--cc=hare@suse.com \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@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).