forked from Mirrors/btrfs-progs
btrfs-progs: Introduce change_fsid_prepare and change_fsid_done functions
These two functions will write flags to all supers before and after fsid/chunk tree id change, informing kernel not to mount a inconsistent fs. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> [removed chunk tree super flag] Signed-off-by: David Sterba <dsterba@suse.cz>master
parent
01cdf01ecf
commit
d275dbd183
28
btrfstune.c
28
btrfstune.c
|
@ -262,6 +262,34 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int change_fsid_prepare(struct btrfs_fs_info *fs_info)
|
||||||
|
{
|
||||||
|
u64 flags = btrfs_super_flags(fs_info->super_copy);
|
||||||
|
|
||||||
|
if (!fs_info->new_fsid && !fs_info->new_chunk_tree_uuid)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (fs_info->new_fsid)
|
||||||
|
flags |= BTRFS_SUPER_FLAG_CHANGING_FSID;
|
||||||
|
btrfs_set_super_flags(fs_info->super_copy, flags);
|
||||||
|
|
||||||
|
return write_all_supers(fs_info->tree_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int change_fsid_done(struct btrfs_fs_info *fs_info)
|
||||||
|
{
|
||||||
|
u64 flags = btrfs_super_flags(fs_info->super_copy);
|
||||||
|
|
||||||
|
if (!fs_info->new_fsid && !fs_info->new_chunk_tree_uuid)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (fs_info->new_fsid)
|
||||||
|
flags &= ~BTRFS_SUPER_FLAG_CHANGING_FSID;
|
||||||
|
btrfs_set_super_flags(fs_info->super_copy, flags);
|
||||||
|
|
||||||
|
return write_all_supers(fs_info->tree_root);
|
||||||
|
}
|
||||||
|
|
||||||
static void print_usage(void)
|
static void print_usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: btrfstune [options] device\n");
|
fprintf(stderr, "usage: btrfstune [options] device\n");
|
||||||
|
|
Loading…
Reference in New Issue