public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/21] btrfs: refactor and generalize chunk/dev_extent/extent allocation
@ 2020-02-25  3:56 Naohiro Aota
  2020-02-25  3:56 ` [PATCH v3 01/21] btrfs: change type of full_search to bool Naohiro Aota
                   ` (21 more replies)
  0 siblings, 22 replies; 25+ messages in thread
From: Naohiro Aota @ 2020-02-25  3:56 UTC (permalink / raw)
  To: linux-btrfs, David Sterba; +Cc: Josef Bacik, Nikolay Borisov, Naohiro Aota

This series refactors chunk allocation, device_extent allocation and
extent allocation functions and make them generalized to be able to
implement other allocation policy easily.

On top of this series, we can simplify some part of the "btrfs: zoned
block device support" series as adding a new type of chunk allocator
and extent allocator for zoned block devices. Furthermore, we will be
able to implement and test some other allocator in the idea page of
the wiki e.g. SSD caching, dedicated metadata drive, chunk allocation
groups, and so on.

This series has no functional changes except introducing "enum
btrfs_chunk_allocation_policy" and "enum
btrfs_extent_allocation_policy".

* Refactoring chunk/dev_extent allocator

Two functions are separated from find_free_dev_extent_start().
dev_extent_search_start() decides the starting position of the search.
dev_extent_hole_check() checks if a hole found is suitable for device
extent allocation.

__btrfs_alloc_chunk() is split into four functions. set_parameters()
initializes the parameters of an allocation. gather_device_info()
loops over devices and gather information of
them. decide_stripe_size() decides the size of chunk and
device_extent. And, create_chunk() creates a chunk and device extents.

* Refactoring extent allocator

Three functions are introduced in
find_free_extent(). prepare_allocation() initializes the parameters
and gives a hint byte to start the allocation with. do_allocation()
handles the actual allocation in a given block group.
release_block_group() is called when it gives up an allocation from a
block group, so the allocation context should be reset.

Two functions are introduced in find_free_extent_update_loop().
found_extent() is called when the allocator finally find a proper
extent. chunk_allocation_failed() is called when it failed to allocate
a new chunk. An allocator implementation can use this hook to set the
next stage to try e.g. LOOP_NO_EMPTY_SIZE.

Furthermore, LOOP_NO_EMPTY_SIZE stage is tweaked so that other
allocator than the current clustered allocator skips this stage.

* Patch organization

Patch 1 is a trivial patch to fix the type of an argument of
find_free_extent_update_loop().

Patch 2 removes a BUG_ON from __btrfs_alloc_chunk().

Patches 3-10 refactors chunk and device_extent allocation functions:
find_free_dev_extent_start() and __btrfs_alloc_chunk().

Patches 11-21 refactors extent allocation function: find_free_extent()
and find_free_extent_update_loop().

* Changelog

 - v3
   - Fix handling of btrfs_chunk_alloc()'s return value
   - Drop LOOP_GIVEUP, which is not currently useful
   - Convert another BUG_ON to ASSERT and -EINVAL in patch 6
   - Subtle typo and wording fix

 - v2
   - Stop separating "clustered_alloc_info" from find_free_extent_ctl
   - Change return type of dev_extent_hole_check() to bool
   - Rename set_parameters() to init_alloc_chunk_ctl()
   - Add a patch to remove BUG_ON from __btrfs_alloc_chunk()

Naohiro Aota (21):
  btrfs: change type of full_search to bool
  btrfs: do not BUG_ON with invalid profile
  btrfs: introduce chunk allocation policy
  btrfs: refactor find_free_dev_extent_start()
  btrfs: introduce alloc_chunk_ctl
  btrfs: factor out init_alloc_chunk_ctl
  btrfs: factor out gather_device_info()
  btrfs: factor out decide_stripe_size()
  btrfs: factor out create_chunk()
  btrfs: parameterize dev_extent_min
  btrfs: introduce extent allocation policy
  btrfs: move hint_byte into find_free_extent_ctl
  btrfs: move variables for clustered allocation into
    find_free_extent_ctl
  btrfs: factor out do_allocation()
  btrfs: drop unnecessary arguments from clustered allocation functions
  btrfs: factor out release_block_group()
  btrfs: factor out found_extent()
  btrfs: drop unnecessary arguments from find_free_extent_update_loop()
  btrfs: factor out chunk_allocation_failed()
  btrfs: skip LOOP_NO_EMPTY_SIZE if not clustered allocation
  btrfs: factor out prepare_allocation()

 fs/btrfs/extent-tree.c | 313 +++++++++++++++++++++-----------
 fs/btrfs/volumes.c     | 399 +++++++++++++++++++++++++++--------------
 fs/btrfs/volumes.h     |   6 +
 3 files changed, 481 insertions(+), 237 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2020-02-28 14:32 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-25  3:56 [PATCH v3 00/21] btrfs: refactor and generalize chunk/dev_extent/extent allocation Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 01/21] btrfs: change type of full_search to bool Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 02/21] btrfs: do not BUG_ON with invalid profile Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 03/21] btrfs: introduce chunk allocation policy Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 04/21] btrfs: refactor find_free_dev_extent_start() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 05/21] btrfs: introduce alloc_chunk_ctl Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 06/21] btrfs: factor out init_alloc_chunk_ctl Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 07/21] btrfs: factor out gather_device_info() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 08/21] btrfs: factor out decide_stripe_size() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 09/21] btrfs: factor out create_chunk() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 10/21] btrfs: parameterize dev_extent_min Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 11/21] btrfs: introduce extent allocation policy Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 12/21] btrfs: move hint_byte into find_free_extent_ctl Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 13/21] btrfs: move variables for clustered allocation " Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 14/21] btrfs: factor out do_allocation() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 15/21] btrfs: drop unnecessary arguments from clustered allocation functions Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 16/21] btrfs: factor out release_block_group() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 17/21] btrfs: factor out found_extent() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 18/21] btrfs: drop unnecessary arguments from find_free_extent_update_loop() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 19/21] btrfs: factor out chunk_allocation_failed() Naohiro Aota
2020-02-25  3:56 ` [PATCH v3 20/21] btrfs: skip LOOP_NO_EMPTY_SIZE if not clustered allocation Naohiro Aota
2020-02-28 14:20   ` David Sterba
2020-02-25  3:56 ` [PATCH v3 21/21] btrfs: factor out prepare_allocation() Naohiro Aota
2020-02-25 14:34 ` [PATCH v3 00/21] btrfs: refactor and generalize chunk/dev_extent/extent allocation David Sterba
2020-02-28 14:32   ` David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox