Linux Btrfs filesystem development
 help / color / mirror / Atom feed
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


             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