[GIT PULL] Btrfs fixes for 5.19-rc7

From: David Sterba
Date: Sat Jul 16 2022 - 10:11:18 EST


Hi,

due to a recent report [1] we need to revert the radix tree to xarray
conversion patches. There's a problem with sleeping under spinlock, when
xa_insert could allocate memory under pressure. We use GFP_NOFS so this
is a real problem that we unfortunately did not discover during review.

I'm sorry to do such change at rc6 time but the revert is IMO the safer
option, there are patches to use mutex instead of the spin locks but
that would need more testing. The revert branch has been tested on a
few setups, all seem ok. The conversion to xarray will be revisited in
the future.

[1] https://lore.kernel.org/linux-btrfs/cover.1657097693.git.fdmanana@xxxxxxxx/

Note about the xarray API:

The possible sleeping is documented next to xa_insert, however there's
no runtime check for that, like is eg. in radix_tree_preload. The
context does not need to be atomic so it's not as simple as

might_sleep_if(gfpflags_allow_blocking(gfp));

or

WARN_ON_ONCE(gfpflags_allow_blocking(gfp));

Some kind of development time debugging/assertion aid would be nice.

----------------------------------------------------------------
The following changes since commit b3a3b0255797e1d395253366ba24a4cc6c8bdf9c:

btrfs: zoned: drop optimization of zone finish (2022-07-08 19:18:00 +0200)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-5.19-rc7-tag

for you to fetch changes up to 088aea3b97e0ae5a2a86f5d142ad10fec8a1b80f:

Revert "btrfs: turn delayed_nodes_tree into an XArray" (2022-07-15 19:15:19 +0200)

----------------------------------------------------------------
David Sterba (4):
Revert "btrfs: turn fs_roots_radix in btrfs_fs_info into an XArray"
Revert "btrfs: turn fs_info member buffer_radix into XArray"
Revert "btrfs: turn name_cache radix tree into XArray in send_ctx"
Revert "btrfs: turn delayed_nodes_tree into an XArray"

fs/btrfs/ctree.h | 18 ++---
fs/btrfs/delayed-inode.c | 84 ++++++++++----------
fs/btrfs/disk-io.c | 179 ++++++++++++++++++++++++-------------------
fs/btrfs/extent-tree.c | 2 +-
fs/btrfs/extent_io.c | 122 +++++++++++++++++------------
fs/btrfs/inode.c | 15 ++--
fs/btrfs/send.c | 40 +++++-----
fs/btrfs/tests/btrfs-tests.c | 24 +++++-
fs/btrfs/transaction.c | 112 +++++++++++++++------------
9 files changed, 340 insertions(+), 256 deletions(-)