[PATCH v6 04/28] btrfs: disallow RAID5/6 in HMZONED mode

Naohiro Aota
2019-12-13T04:10:49Z

Supporting the RAID5/6 profile in HMZONED mode is not trivial. For example,
non-full stripe writes will cause overwriting parity blocks. When we do a
non-full stripe write, it writes to the parity block with the data at that
moment. Then, another write to the stripes will try to overwrite the parity
block with new parity value. However, sequential zones do not allow such
parity overwriting.

Furthermore, using RAID5/6 on SMR drives, which usually have a huge
capacity, incur large overhead of rebuild. Such overhead can lead to higher
to higher volume failure rate (e.g. additional drive failure during
rebuild) because of the increased rebuild time.

Thus, let's disable RAID5/6 profile in HMZONED mode for now.

Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
fs/btrfs/hmzoned.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/fs/btrfs/hmzoned.c b/fs/btrfs/hmzoned.c
index 0182bfb9c903..1b24facd46b8 100644
--- a/fs/btrfs/hmzoned.c
+++ b/fs/btrfs/hmzoned.c
@@ -236,6 +236,13 @@ int btrfs_check_hmzoned_mode(struct btrfs_fs_info *fs_info)
goto out;
}

+ /* RAID56 is not allowed */
+ if (btrfs_fs_incompat(fs_info, RAID56)) {
+ btrfs_err(fs_info, "HMZONED mode does not support RAID56");
+ ret = -EINVAL;
+ goto out;
+ }
+
fs_info->zone_size = zone_size;

btrfs_info(fs_info, "HMZONED mode enabled, zone size %llu B",
--
2.24.0