From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v3 00/15] btrfs: preparation patches for subpage support
Date: Wed, 2 Dec 2020 14:47:56 +0800 [thread overview]
Message-ID: <20201202064811.100688-1-wqu@suse.com> (raw)
This is the rebased preparation branch for all patches not yet merged into
misc-next.
It can be fetched from github (with experimental sector aligned data write
support)
https://github.com/adam900710/linux/tree/subpage
This patchset includes all the unmerged preparation patches for subpage
support.
The patchset is sent without the main core for subpage support, as
myself has proven that, big patchset bombarding won't really make
reviewers happy, but only make the author happy (for a very short time).
Thanks for the hard work from David, there are only 15 patches unmerged.
(With 2 new small patches to address u32 u64 problem)
Patch 01~02: bio_offset related fixes. Make bio_offset to be u32.
Patch 03: Refactor metadata submission for later metadata write
support.
Patch 04~08: Metadata related refactor.
Patch 09~10: Data related refactor
Patch 11~15: Scrub related refactor and cleanup
For the scrub patch, there was a discussion with David, about whether we
should use sector size as the unit for metadata scrub.
His idea is, sector size should be the minimal unit for DATA, not
metadata. This indicates there is a undefined "minimal unit" of access.
But my argument is, sector size is the minimal unit for all btrfs
access, current btrfs has an undefined "data size", and that "data size"
must equal to sectorsize for current btrfs implementation.
Thus for "data size" < nodesize case, we should first add support for
"data size" > sectorsize first.
Thus I kept the scrub patch untouched, since IMHO sector size is still
the minimal unit to access, thus iterating using sectorsize is
completely sane.
Changelog:
v1:
- Separate prep patches from the huge subpage patchset
- Rebased to misc-next
- Add more commit message for patch "btrfs: extent_io: remove the
extent_start/extent_len for end_bio_extent_readpage()"
With one runtime example to explain why we are doing the same thing.
- Fix the assert_spin_lock() usage
What we really want is lockdep_assert_held()
- Re-iterate the reason why some extent io tests are invalid
This is especially important since later patches will reduce
extent_buffer::pages[] to bare minimal, killing the ability to
handle certain invalid extent buffers.
- Use sectorsize_bits for division
During the convert, we should only use sectorsize_bits for division,
this solves the hassle on 32bit system to do division.
But we should not use sectorsize_bits no brain, as bit shift is not
straight forward as multiple/division.
- Address the comments for btrfs_lookup_bio_sums() cleanup patchset
From naming to macro usages, all of those comments should further
improve the readability.
v2:
- Remove new extent_io tree features
Now we won't utilize extent io tree for subpage support, thus new
features along with some aggressive refactor is no longer needed.
- Reduce extent_io tree operations to reduce endio time latency
Although extent_io tree can do a lot of things like page status, but
it has obvious overhead, namingly search btree.
So keep the original behavior by only calling extent_io operation in a
big extent, to reduce latency
v3:
- Rebased to latest misc-next
Now only 15 patches to submit.
- Add two new patches to address u32 and u64 problems
The root problem is the on-disk format is abusing u64 for its length.
We have to draw a line between where we should convert to u32.
Currently for bio_offset and extent_len, we can safely use u32.
Just to be extra safe, added more ASSERT() for this.
- Put BTRFS_MAX_METADATA_BLOCKSIZE into uapi
To avoid circle including "ctree.h"
- Add more changelog for the patch enabling subpage scrub
Qu Wenruo (15):
btrfs: rename bio_offset of extent_submit_bio_start_t to
opt_file_offset
btrfs: pass bio_offset to check_data_csum() directly
btrfs: inode: make btrfs_verify_data_csum() follow sector size
btrfs: extent_io: extract the btree page submission code into its own
helper function
btrfs: extent_io: calculate inline extent buffer page size based on
page size
btrfs: extent_io: don't allow tree block to cross page boundary for
subpage support
btrfs: extent_io: update num_extent_pages() to support subpage sized
extent buffer
btrfs: handle sectorsize < PAGE_SIZE case for extent buffer accessors
btrfs: file-item: remove the btrfs_find_ordered_sum() call in
btrfs_lookup_bio_sums()
btrfs: file-item: refactor btrfs_lookup_bio_sums() to handle
out-of-order bvecs
btrfs: scrub: reduce the width for extent_len/stripe_len from 64 bits
to 32 bits
btrfs: scrub: always allocate one full page for one sector for RAID56
btrfs: scrub: support subpage tree block scrub
btrfs: scrub: support subpage data scrub
btrfs: scrub: allow scrub to work with subpage sectorsize
fs/btrfs/compression.c | 5 +-
fs/btrfs/ctree.c | 3 +-
fs/btrfs/ctree.h | 48 ++++--
fs/btrfs/disk-io.c | 17 +-
fs/btrfs/disk-io.h | 2 +-
fs/btrfs/extent_io.c | 232 +++++++++++++++++-----------
fs/btrfs/extent_io.h | 18 ++-
fs/btrfs/file-item.c | 266 +++++++++++++++++++++-----------
fs/btrfs/inode.c | 61 +++++---
fs/btrfs/ordered-data.c | 44 ------
fs/btrfs/ordered-data.h | 2 -
fs/btrfs/scrub.c | 102 +++++++-----
fs/btrfs/struct-funcs.c | 18 ++-
include/uapi/linux/btrfs_tree.h | 4 +
14 files changed, 496 insertions(+), 326 deletions(-)
--
2.29.2
next reply other threads:[~2020-12-02 6:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-02 6:47 Qu Wenruo [this message]
2020-12-02 6:47 ` [PATCH v3 01/15] btrfs: rename bio_offset of extent_submit_bio_start_t to opt_file_offset Qu Wenruo
2020-12-02 8:12 ` Christoph Hellwig
2020-12-03 18:45 ` David Sterba
2020-12-02 6:47 ` [PATCH v3 02/15] btrfs: pass bio_offset to check_data_csum() directly Qu Wenruo
2020-12-02 6:47 ` [PATCH v3 03/15] btrfs: inode: make btrfs_verify_data_csum() follow sector size Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 04/15] btrfs: extent_io: extract the btree page submission code into its own helper function Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 05/15] btrfs: extent_io: calculate inline extent buffer page size based on page size Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 06/15] btrfs: extent_io: don't allow tree block to cross page boundary for subpage support Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 07/15] btrfs: extent_io: update num_extent_pages() to support subpage sized extent buffer Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 08/15] btrfs: handle sectorsize < PAGE_SIZE case for extent buffer accessors Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 09/15] btrfs: file-item: remove the btrfs_find_ordered_sum() call in btrfs_lookup_bio_sums() Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 10/15] btrfs: file-item: refactor btrfs_lookup_bio_sums() to handle out-of-order bvecs Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 11/15] btrfs: scrub: reduce the width for extent_len/stripe_len from 64 bits to 32 bits Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 12/15] btrfs: scrub: always allocate one full page for one sector for RAID56 Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 13/15] btrfs: scrub: support subpage tree block scrub Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 14/15] btrfs: scrub: support subpage data scrub Qu Wenruo
2020-12-02 6:48 ` [PATCH v3 15/15] btrfs: scrub: allow scrub to work with subpage sectorsize Qu Wenruo
2020-12-04 15:18 ` [PATCH v3 00/15] btrfs: preparation patches for subpage 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=20201202064811.100688-1-wqu@suse.com \
--to=wqu@suse.com \
--cc=linux-btrfs@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