From: Greg Kroah-Hartman Date: Wed, 26 Oct 2022 10:26:31 +0000 (+0200) Subject: 6.0-stable patches X-Git-Tag: v5.15.75~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=89694ecf7c80b3b9ecbea467bc53cff823607d89;p=thirdparty%2Fkernel%2Fstable-queue.git 6.0-stable patches added patches: revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch --- diff --git a/queue-6.0/revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch b/queue-6.0/revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch new file mode 100644 index 00000000000..1fb4cdfe936 --- /dev/null +++ b/queue-6.0/revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch @@ -0,0 +1,108 @@ +From cf21d7d95f6b2ad032412f99603f936ed2111c32 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Wed, 26 Oct 2022 12:24:13 +0200 +Subject: Revert "btrfs: call __btrfs_remove_free_space_cache_locked on cache load failure" + +From: Greg Kroah-Hartman + +This reverts commit 3ea7c50339859394dd667184b5b16eee1ebb53bc which is +commit 8a1ae2781dee9fc21ca82db682d37bea4bd074ad upstream. + +It causes many reported btrfs issues, so revert it for now. + +Cc: Josef Bacik +Cc: David Sterba +Cc: Sasha Levin +Reported-by: Tobias Powalowski +Link: https://lore.kernel.org/r/CAHfPjO8G1Tq2iJDhPry-dPj1vQZRh4NYuRmhHByHgu7_2rQkrQ@mail.gmail.com +Reported-by: Ernst Herzberg +Link: https://lore.kernel.org/r/8196dd88-4e11-78a7-8f96-20cf3e886e68@net4u.de +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/free-space-cache.c | 53 ++++++++++++++++---------------------------- + 1 file changed, 20 insertions(+), 33 deletions(-) + +--- a/fs/btrfs/free-space-cache.c ++++ b/fs/btrfs/free-space-cache.c +@@ -48,25 +48,6 @@ static void bitmap_clear_bits(struct btr + struct btrfs_free_space *info, u64 offset, + u64 bytes, bool update_stats); + +-static void __btrfs_remove_free_space_cache_locked( +- struct btrfs_free_space_ctl *ctl) +-{ +- struct btrfs_free_space *info; +- struct rb_node *node; +- +- while ((node = rb_last(&ctl->free_space_offset)) != NULL) { +- info = rb_entry(node, struct btrfs_free_space, offset_index); +- if (!info->bitmap) { +- unlink_free_space(ctl, info, true); +- kmem_cache_free(btrfs_free_space_cachep, info); +- } else { +- free_bitmap(ctl, info); +- } +- +- cond_resched_lock(&ctl->tree_lock); +- } +-} +- + static struct inode *__lookup_free_space_inode(struct btrfs_root *root, + struct btrfs_path *path, + u64 offset) +@@ -900,14 +881,7 @@ out: + return ret; + free_cache: + io_ctl_drop_pages(&io_ctl); +- +- /* +- * We need to call the _locked variant so we don't try to update the +- * discard counters. +- */ +- spin_lock(&ctl->tree_lock); +- __btrfs_remove_free_space_cache_locked(ctl); +- spin_unlock(&ctl->tree_lock); ++ __btrfs_remove_free_space_cache(ctl); + goto out; + } + +@@ -1033,13 +1007,7 @@ int load_free_space_cache(struct btrfs_b + if (ret == 0) + ret = 1; + } else { +- /* +- * We need to call the _locked variant so we don't try to update +- * the discard counters. +- */ +- spin_lock(&tmp_ctl.tree_lock); + __btrfs_remove_free_space_cache(&tmp_ctl); +- spin_unlock(&tmp_ctl.tree_lock); + btrfs_warn(fs_info, + "block group %llu has wrong amount of free space", + block_group->start); +@@ -3002,6 +2970,25 @@ static void __btrfs_return_cluster_to_fr + btrfs_put_block_group(block_group); + } + ++static void __btrfs_remove_free_space_cache_locked( ++ struct btrfs_free_space_ctl *ctl) ++{ ++ struct btrfs_free_space *info; ++ struct rb_node *node; ++ ++ while ((node = rb_last(&ctl->free_space_offset)) != NULL) { ++ info = rb_entry(node, struct btrfs_free_space, offset_index); ++ if (!info->bitmap) { ++ unlink_free_space(ctl, info, true); ++ kmem_cache_free(btrfs_free_space_cachep, info); ++ } else { ++ free_bitmap(ctl, info); ++ } ++ ++ cond_resched_lock(&ctl->tree_lock); ++ } ++} ++ + void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl) + { + spin_lock(&ctl->tree_lock); diff --git a/queue-6.0/series b/queue-6.0/series new file mode 100644 index 00000000000..7953aa9e38a --- /dev/null +++ b/queue-6.0/series @@ -0,0 +1 @@ +revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch