summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/super.h
diff options
context:
space:
mode:
authorJosef Bacik <josef@toxicpanda.com>2023-11-22 12:17:40 -0500
committerDavid Sterba <dsterba@suse.com>2023-12-15 20:27:03 +0100
commita6a8f22a4af6c572d9e01ca9f7b515bf0cbb63b1 (patch)
tree15b346dce55640ea3fa55e23f41ebe7d308ddba3 /fs/btrfs/super.h
parent6207c9e3c2059530e4f9b885c61ef2fb4e200036 (diff)
downloadlinux-a6a8f22a4af6c572d9e01ca9f7b515bf0cbb63b1.tar.gz
linux-a6a8f22a4af6c572d9e01ca9f7b515bf0cbb63b1.tar.bz2
linux-a6a8f22a4af6c572d9e01ca9f7b515bf0cbb63b1.zip
btrfs: move space cache settings into open_ctree
Currently we pre-load the space cache settings in btrfs_parse_options, however when we switch to the new mount API the mount option parsing will happen before we have the super block loaded. Add a helper to set the appropriate options based on the fs settings, this will allow us to have consistent free space cache settings. This also folds in the space cache related decisions we make for subpage sectorsize support, so all of this is done in one place. Since this was being called by parse options it looks like we're changing the behavior of remount, but in fact we aren't. The pre-loading of the free space cache settings is done because we want to handle the case of users not using any space_cache options, we'll derive the appropriate mount option based on the on disk state. On remount this wouldn't reset anything as we'll have cleared the v1 cache generation if we mounted -o nospace_cache. Similarly it's impossible to turn off the free space tree without specifically saying -o nospace_cache,clear_cache, which will delete the free space tree and clear the compat_ro option. Again in this case calling this code in remount wouldn't result in any change. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Anand Jain <anand.jain@oracle.com> Acked-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/super.h')
-rw-r--r--fs/btrfs/super.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/super.h b/fs/btrfs/super.h
index 8dbb909b364f..7c1cd7527e76 100644
--- a/fs/btrfs/super.h
+++ b/fs/btrfs/super.h
@@ -8,6 +8,7 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
int btrfs_sync_fs(struct super_block *sb, int wait);
char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
u64 subvol_objectid);
+void btrfs_set_free_space_cache_settings(struct btrfs_fs_info *fs_info);
static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb)
{