]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Oct 2022 10:26:31 +0000 (12:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Oct 2022 10:26:31 +0000 (12:26 +0200)
added patches:
revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch

queue-6.0/revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch [new file with mode: 0644]
queue-6.0/series [new file with mode: 0644]

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 (file)
index 0000000..1fb4cdf
--- /dev/null
@@ -0,0 +1,108 @@
+From cf21d7d95f6b2ad032412f99603f936ed2111c32 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+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 <gregkh@linuxfoundation.org>
+
+This reverts commit 3ea7c50339859394dd667184b5b16eee1ebb53bc which is
+commit 8a1ae2781dee9fc21ca82db682d37bea4bd074ad upstream.
+
+It causes many reported btrfs issues, so revert it for now.
+
+Cc: Josef Bacik <josef@toxicpanda.com>
+Cc: David Sterba <dsterba@suse.com>
+Cc: Sasha Levin <sashal@kernel.org>
+Reported-by: Tobias Powalowski <tobias.powalowski@googlemail.com>
+Link: https://lore.kernel.org/r/CAHfPjO8G1Tq2iJDhPry-dPj1vQZRh4NYuRmhHByHgu7_2rQkrQ@mail.gmail.com
+Reported-by: Ernst Herzberg <earny@net4u.de>
+Link: https://lore.kernel.org/r/8196dd88-4e11-78a7-8f96-20cf3e886e68@net4u.de
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..7953aa9
--- /dev/null
@@ -0,0 +1 @@
+revert-btrfs-call-__btrfs_remove_free_space_cache_locked-on.patch