This is the backport for v5.10.x stable branch.
The full explananation can be found here: https://lore.kernel.org/linux-btrfs/cover.1660891713.git.wqu@suse.com/
Difference between v5.10.x and v5.15.x backports:
- Naming change in btrfs_io_contrl In v5.15, we don't have the btrfs_io_contrl rename, thus only btrfs_bio.
- Missing btrfs_fs_info::sectorsize_bits Since RAID56 doesn't support anything but PAGE_SIZE == sectorsize (until v5.19+), here we just use PAGE_SHIFT.
Another thing related to v5.10.x testing is, there are some lockdep assert triggered related to uuid_mutex.
I'm not 100% sure, but at least RAID56 code is not touching that mutex, thus I guess it's some other problems.
Qu Wenruo (2): btrfs: only write the sectors in the vertical stripe which has data stripes btrfs: raid56: don't trust any cached sector in __raid56_parity_recover()
fs/btrfs/raid56.c | 74 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 17 deletions(-)