[RFC ONLY 0/8] btrfs: introduce raid-stripe-tree

Johannes Thumshirn
2022-05-16T14:31:51Z

Introduce a raid-stripe-tree to record writes in a RAID environment.

In essence this adds another address translation layer between the logical
and the physical addresses in btrfs and is designed to close two gaps. The
first is the ominous RAID-write-hole we suffer from with RAID5/6 and the
second one is the inability of doing RAID with zoned block devices due to the
constraints we have with REQ_OP_ZONE_APPEND writes.

Thsi is an RFC/PoC only which just shows how the code will look like for a
zoned RAID1. Its sole purpose is to facilitate design reviews and is not
intended to be merged yet. Or if merged to be used on an actual file-system.

Johannes Thumshirn (8):
btrfs: add raid stripe tree definitions
btrfs: move btrfs_io_context to volumes.h
btrfs: read raid-stripe-tree from disk
btrfs: add boilerplate code to insert raid extent
btrfs: add code to delete raid extent
btrfs: add code to read raid extent
btrfs: zoned: allow zoned RAID1
btrfs: add raid stripe tree pretty printer

fs/btrfs/Makefile | 2 +-
fs/btrfs/ctree.c | 1 +
fs/btrfs/ctree.h | 29 ++++
fs/btrfs/disk-io.c | 12 ++
fs/btrfs/extent-tree.c | 9 ++
fs/btrfs/file.c | 1 -
fs/btrfs/print-tree.c | 21 +++
fs/btrfs/raid-stripe-tree.c | 251 ++++++++++++++++++++++++++++++++
fs/btrfs/raid-stripe-tree.h | 39 +++++
fs/btrfs/volumes.c | 44 +++++-
fs/btrfs/volumes.h | 93 ++++++------
fs/btrfs/zoned.c | 39 +++++
include/uapi/linux/btrfs.h | 1 +
include/uapi/linux/btrfs_tree.h | 17 +++
14 files changed, 509 insertions(+), 50 deletions(-)
create mode 100644 fs/btrfs/raid-stripe-tree.c
create mode 100644 fs/btrfs/raid-stripe-tree.h

--
2.35.1