Skip to content

Commit 30bcf4e

Browse files
adam900710kdave
authored andcommitted
btrfs: only enforce free space tree if v1 cache is required for bs < ps cases
[BUG] Since the introduction of btrfs bs < ps support, v1 cache was never on the plan due to its hard coded PAGE_SIZE usage, and the future plan to properly deprecate it. However for bs < ps cases, even if 'nospace_cache,clear_cache' mount option is specified, it's never respected and free space tree is always enabled: mkfs.btrfs -f -O ^bgt,fst $dev mount $dev $mnt -o clear_cache,nospace_cache umount $mnt btrfs ins dump-super $dev ... compat_ro_flags 0x3 ( FREE_SPACE_TREE | FREE_SPACE_TREE_VALID ) ... This means a different behavior compared to bs >= ps cases. [CAUSE] The forcing usage of v2 space cache is done inside btrfs_set_free_space_cache_settings(), however it never checks if we're even using space cache but always enabling v2 cache. [FIX] Instead unconditionally enable v2 cache, only forcing v2 cache if the old v1 cache is required. Now v2 space cache can be properly disabled on bs < ps cases: mkfs.btrfs -f -O ^bgt,fst $dev mount $dev $mnt -o clear_cache,nospace_cache umount $mnt btrfs ins dump-super $dev ... compat_ro_flags 0x0 ... Fixes: 9f73f1a ("btrfs: force v2 space cache usage for subpage mount") Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 8731f2c commit 30bcf4e

1 file changed

Lines changed: 5 additions & 7 deletions

File tree

fs/btrfs/super.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -736,14 +736,12 @@ bool btrfs_check_options(const struct btrfs_fs_info *info,
736736
*/
737737
void btrfs_set_free_space_cache_settings(struct btrfs_fs_info *fs_info)
738738
{
739-
if (fs_info->sectorsize < PAGE_SIZE) {
739+
if (fs_info->sectorsize < PAGE_SIZE && btrfs_test_opt(fs_info, SPACE_CACHE)) {
740+
btrfs_info(fs_info,
741+
"forcing free space tree for sector size %u with page size %lu",
742+
fs_info->sectorsize, PAGE_SIZE);
740743
btrfs_clear_opt(fs_info->mount_opt, SPACE_CACHE);
741-
if (!btrfs_test_opt(fs_info, FREE_SPACE_TREE)) {
742-
btrfs_info(fs_info,
743-
"forcing free space tree for sector size %u with page size %lu",
744-
fs_info->sectorsize, PAGE_SIZE);
745-
btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE);
746-
}
744+
btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE);
747745
}
748746

749747
/*

0 commit comments

Comments
 (0)