mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-18 04:15:32 +00:00
d3cf350e21
Currently mkfs uses its own create_uuid_tree(), but that function is only handling FS_TREE. This means for btrfs-convert we do not generate the uuid tree, nor add the UUID of the image subvolume. This can be a problem if we're going to support multiple subvolumes during mkfs time. To address this, introduce a new helper, btrfs_rebuild_uuid_tree(): - Create a new uuid tree if there is not one - Remove all the existing items from uuid tree - Iterate through all subvolumes * If the subvolume has no valid UUID, regenerate one * Add the uuid entry for the subvolume UUID * If the subvolume has received UUID, also add it to UUID tree By this, this new helper can handle all the uuid tree generation needs for: - Current mkfs Only one uuid entry for FS_TREE - Current btrfs-convert Only FS_TREE and the image subvolume - Future multi-subvolume mkfs As we do the scan for all subvolumes. - Future "btrfs rescue rebuild-uuid-tree" Signed-off-by: Qu Wenruo <wqu@suse.com>
32 lines
1.1 KiB
C
32 lines
1.1 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 __ROOT_TREE_UTILS_H__
|
|
#define __ROOT_TREE_UTILS_H__
|
|
|
|
#include "kernel-shared/transaction.h"
|
|
|
|
int btrfs_make_root_dir(struct btrfs_trans_handle *trans,
|
|
struct btrfs_root *root, u64 objectid);
|
|
int btrfs_make_subvolume(struct btrfs_trans_handle *trans, u64 objectid);
|
|
int btrfs_link_subvolume(struct btrfs_trans_handle *trans,
|
|
struct btrfs_root *parent_root,
|
|
u64 parent_dir, const char *name,
|
|
int namelen, struct btrfs_root *subvol);
|
|
int btrfs_rebuild_uuid_tree(struct btrfs_fs_info *fs_info);
|
|
|
|
#endif
|