mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-12-03 00:54:17 +08:00
68a04bc710
With previous btrfstune support to convert to block-group-tree, it has implemented most of the infrastructure for bi-directional conversion. This patch will implement the remaining conversion support to go back to extent tree. The modification includes: - New convert_to_extent_tree() function in btrfstune.c It's almost the same as convert_to_bg_tree(), but with small changes: * No need to set extra features like NO_HOLES/FST. * Need to delete the block group tree when everything finished. - Update btrfs_delete_and_free_root() to handle non-global roots Currently the function can only accepts global roots (extent/csum/free space trees) If we pass a non-global root into the function, we will screw up global_roots_tree and crash. Since we're going to use btrfs_delete_and_free_root() to free block group tree which is not a global tree, this is needed. - New handling for half converted fs in get_last_converted_bg() There are two cases need to be handled: * The bg tree is already empty We need to grab the first bg in extent tree. Or at conversion function we will fail at grabbing the first bg. * The bg tree is not empty Then we need to grab the last bg in extent tree. - Extra root switching in involved functions. This involves: * read_converting_block_groups() * insert_block_group_item() * update_block_group_item() We just need to update our target root according to the current compat_ro and super flags. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
36 lines
1.3 KiB
C
36 lines
1.3 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* License v2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public
|
|
* License along with this program; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 021110-1307, USA.
|
|
*/
|
|
|
|
#ifndef __BTRFS_TUNE_H__
|
|
#define __BTRFS_TUNE_H__
|
|
|
|
struct btrfs_root;
|
|
struct btrfs_fs_info;
|
|
|
|
int update_seeding_flag(struct btrfs_root *root, const char *device, int set_flag, int force);
|
|
|
|
int check_unfinished_fsid_change(struct btrfs_fs_info *fs_info,
|
|
uuid_t fsid_ret, uuid_t chunk_id_ret);
|
|
int change_uuid(struct btrfs_fs_info *fs_info, const char *new_fsid_str);
|
|
int set_metadata_uuid(struct btrfs_root *root, const char *uuid_string);
|
|
|
|
int convert_to_bg_tree(struct btrfs_fs_info *fs_info);
|
|
int convert_to_extent_tree(struct btrfs_fs_info *fs_info);
|
|
|
|
int rewrite_checksums(struct btrfs_fs_info *fs_info, int csum_type);
|
|
|
|
#endif
|