Re: [PATCH v3 1/4] btrfs: support remount of ro fs with free space tree

David Sterba
2020-09-24T17:04:01Z

On Thu, Sep 17, 2020 at 11:13:38AM -0700, Boris Burkov wrote:
> #include "block-group.h"
> #include "discard.h"
> +#include "free-space-tree.h"
>
> #include "qgroup.h"
> #define CREATE_TRACE_POINTS
> @@ -1838,6 +1839,7 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
> u64 old_max_inline = fs_info->max_inline;
> u32 old_thread_pool_size = fs_info->thread_pool_size;
> u32 old_metadata_ratio = fs_info->metadata_ratio;
> + bool create_fst = false;
> int ret;
>
> sync_filesystem(sb);
> @@ -1862,6 +1864,16 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
> btrfs_resize_thread_pool(fs_info,
> fs_info->thread_pool_size, old_thread_pool_size);
>
> + if (btrfs_test_opt(fs_info, FREE_SPACE_TREE) &&
> + !btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) {
> + create_fst = true;
> + if (!sb_rdonly(sb) || *flags & SB_RDONLY) {
> + btrfs_warn(fs_info,
> + "Remounting with free space tree only supported from read-only to read-write");

lowercase for start of the sting, unindent it so ends below 80 columns

> + create_fst = false;
> + }
> + }
> +
> if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb))
> goto out;
>
> @@ -1924,6 +1936,21 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
> goto restore;
> }
>
> + /*
> + * NOTE: when remounting with a change that does writes, don't
> + * put it anywhere above this point, as we are not sure to be
> + * safe to write until we pass the above checks.
> + */
> + if (create_fst) {
> + ret = btrfs_create_free_space_tree(fs_info);
> + if (ret) {
> + btrfs_warn(fs_info,
> + "failed to create free space tree: %d", ret);

same

> + goto restore;
> + }
> + }
> +
> +
> ret = btrfs_cleanup_fs_roots(fs_info);
> if (ret)
> goto restore;
> --
> 2.24.1