From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v2 00/25] Btrfs-convert rework to support separate chunk type
Date: Tue, 1 Dec 2015 15:11:20 +0800 [thread overview]
Message-ID: <1448953905-28673-1-git-send-email-quwenruo@cn.fujitsu.com> (raw)
Here comes the 2st version of btrfs-convert rework.
This time, it is rebased to co-operate with David new abstraction work
for incoming reiserfs support.
(Sorry David, your reiserfs support will need more modification as the
abstraction facility is also modified in this patchset)
Any test is welcomed, and it can already pass the convert test from
btrfs-progs. (Since the test doesn't test rollback function)
I also did some tests like create ext4 and fill it with fsstress to test
convert, at least no bug spotted yet.
The new btrfs-convert has the following bugfix/feature:
1. True separate meta/data chunk
The converted filesystem will has correct chunk layout, and all ext*
data will be covered by data chunk and metadata will be covered by
metadata chunk.
Allowing converted filesystem to pass latest btrfs check.
2. Structurized make_btrfs_v2()
Unlike old make_btrfs() which is a mess of hand written codes, new
make_btrfs_v2() is all structurized and should be easy for later
expansion.
But it still has something to do:
1) Ability to handle 10+ TB level filesystem.
Current implement rely on the initial system chunk to contain all
chunks until we inserted all data chunks.
However the initial system chunk are only 32M, in simple calculation,
it can only hold at most 400K chunks.
If every chunk is in the smallest size (16M), it can only handle
less than 6T size in its worst case.
Better calculate the initial system chunk size according to the
filesystem size
But now, I'll focus on current implement to ensure it's safe and
stable.
2) Ability to create DUP metadata chunk without using balance
Now the data and metadata chunk are all in SINGLE profile.
User needs to convert metadata to DUP if they want DUP metadata
profile.
This is a little hard, as we must do it at make_btrfs() time, where
we don't have full btrfs facilities to modify the metadata tree.
But should be easy to add DUP support since the make_btrfs() is much
clearer than ever.
The core idea of new btrfs-convert is quite simple:
Do reserve at *CHUNK* level.
Instead of old extent level reserve, we just insert a big enough SYS/META
chunks at make_btrfs() time, then insert all data chunks to cover old fs
data.
Then things will get very clear. No custom extent allocation function,
all chunk/extent allocation facility can be used without modification
and won't screw up chunk layout.
For rollback function, as old and new convert has completely different
chunk type (ANY vs DATA), so make rollback a little less restricted to
handle both old and new behavior.
Changelog:
v1:
Add rollback support
Make btrfs-convert more safe on chunk type
v2:
Rebased to latest devel branch.
Qu Wenruo (25):
btrfs-progs: extent-cache: Add comments for search/lookup functions
btrfs-progs: extent-tree: Add add_merge_cache_extent function
btrfs-progs: Introduce new members for btrfs_convert_context
btrfs-progs: convert: Introduce functions to read used space
btrfs-progs: convert: Introduce new function to remove reserved ranges
btrfs-progs: convert: Introduce function to calculate the available
space
btrfs-progs: utils: Introduce new function for convert
btrfs-progs: Introduce function to setup temporary superblock
btrfs-progs: Introduce function to setup temporary tree root
btrfs-progs: Introduce function to setup temporary chunk root
btrfs-progs: Introduce function to initialize device tree
btrfs-progs: Introduce function to initialize fs tree
btrfs-progs: Introduce function to initialize csum tree
btrfs-progs: Introduce function to setup temporary extent tree
btrfs-progs: Introduce function to create convert data chunks
btrfs-progs: extent-tree: Introduce function to find the first overlap
extent.
btrfs-progs: extent-tree: Enhance btrfs_record_file_extent
btrfs-progs: convert: Introduce new function to create converted image
btrfs-progs: convert: Introduce function to migrate reserved ranges
btrfs-progs: convert: Enhance record_file_blocks to handle reserved
ranges
btrfs-progs: convert: Introduce init_btrfs_v2 function.
btrfs-progs: Introduce do_convert_v2 function
btrfs-progs: Convert: Add support for rollback new convert behavior
btrfs-progs: convert: Strictly avoid meta or system chunk allocation
btrfs-progs: Cleanup old btrfs-convert
btrfs-convert.c | 1866 +++++++++++++++++++++++--------------------------------
ctree.c | 24 +
ctree.h | 14 +-
extent-cache.c | 57 ++
extent-cache.h | 39 ++
extent-tree.c | 251 ++++++--
mkfs.c | 4 +-
utils.c | 828 +++++++++++++++++++++++-
utils.h | 30 +-
volumes.c | 46 +-
volumes.h | 2 +-
11 files changed, 1969 insertions(+), 1192 deletions(-)
--
2.6.2
next reply other threads:[~2015-12-01 7:14 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-01 7:11 Qu Wenruo [this message]
2015-12-01 7:11 ` [PATCH v2 01/25] btrfs-progs: extent-cache: Add comments for search/lookup functions Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 02/25] btrfs-progs: extent-tree: Add add_merge_cache_extent function Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 03/25] btrfs-progs: Introduce new members for btrfs_convert_context Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 04/25] btrfs-progs: convert: Introduce functions to read used space Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 05/25] btrfs-progs: convert: Introduce new function to remove reserved ranges Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 06/25] btrfs-progs: convert: Introduce function to calculate the available space Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 07/25] btrfs-progs: utils: Introduce new function for convert Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 08/25] btrfs-progs: Introduce function to setup temporary superblock Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 09/25] btrfs-progs: Introduce function to setup temporary tree root Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 10/25] btrfs-progs: Introduce function to setup temporary chunk root Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 11/25] btrfs-progs: Introduce function to initialize device tree Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 12/25] btrfs-progs: Introduce function to initialize fs tree Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 13/25] btrfs-progs: Introduce function to initialize csum tree Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 14/25] btrfs-progs: Introduce function to setup temporary extent tree Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 15/25] btrfs-progs: Introduce function to create convert data chunks Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 16/25] btrfs-progs: extent-tree: Introduce function to find the first overlap extent Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 17/25] btrfs-progs: extent-tree: Enhance btrfs_record_file_extent Qu Wenruo
2016-01-12 10:17 ` David Sterba
2016-01-13 0:33 ` Qu Wenruo
2016-01-13 8:55 ` David Sterba
2015-12-01 7:11 ` [PATCH v2 18/25] btrfs-progs: convert: Introduce new function to create converted image Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 19/25] btrfs-progs: convert: Introduce function to migrate reserved ranges Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 20/25] btrfs-progs: convert: Enhance record_file_blocks to handle " Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 21/25] btrfs-progs: convert: Introduce init_btrfs_v2 function Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 22/25] btrfs-progs: Introduce do_convert_v2 function Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 23/25] btrfs-progs: Convert: Add support for rollback new convert behavior Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 24/25] btrfs-progs: convert: Strictly avoid meta or system chunk allocation Qu Wenruo
2015-12-01 7:11 ` [PATCH v2 25/25] btrfs-progs: Cleanup old btrfs-convert Qu Wenruo
2015-12-07 15:20 ` [PATCH v2 00/25] Btrfs-convert rework to support separate chunk type David Sterba
2015-12-08 1:50 ` Qu Wenruo
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=1448953905-28673-1-git-send-email-quwenruo@cn.fujitsu.com \
--to=quwenruo@cn.fujitsu.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;
as well as URLs for NNTP newsgroup(s).