Thread (20 messages) 20 messages, 2 authors, 2021-07-16

Re: [PATCH v7 12/17] btrfs: reject raid5/6 fs for subpage

From: Anand Jain <hidden>
Date: 2021-07-13 00:39:29

On 12/07/2021 16:30, Qu Wenruo wrote:
Raid5/6 is not only unsafe due to its write-hole problem, but also has
tons of hardcoded PAGE_SIZE.

So disable it for subpage support for now.

Signed-off-by: Qu Wenruo <redacted>
Reviewed-by: Anand Jain <redacted>

Thanks.
quoted hunk ↗ jump to hunk
---
  fs/btrfs/disk-io.c | 10 ++++++++++
  fs/btrfs/volumes.c |  7 +++++++
  2 files changed, 17 insertions(+)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index b117dd3b8172..3de8e86f3170 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3402,6 +3402,16 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device
  			goto fail_alloc;
  		}
  	}
+	if (sectorsize != PAGE_SIZE) {
+		if (btrfs_super_incompat_flags(fs_info->super_copy) &
+			BTRFS_FEATURE_INCOMPAT_RAID56) {
+			btrfs_err(fs_info,
+	"raid5/6 is not yet supported for sector size %u with page size %lu",
+				sectorsize, PAGE_SIZE);
+			err = -EINVAL;
+			goto fail_alloc;
+		}
+	}
  
  	ret = btrfs_init_workqueues(fs_info, fs_devices);
  	if (ret) {
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index f820c32f4a0d..279d5048b092 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3982,6 +3982,13 @@ static inline int validate_convert_profile(struct btrfs_fs_info *fs_info,
  	if (!(bargs->flags & BTRFS_BALANCE_ARGS_CONVERT))
  		return true;
  
+	if (fs_info->sectorsize < PAGE_SIZE &&
+		bargs->target & BTRFS_BLOCK_GROUP_RAID56_MASK) {
+		btrfs_err(fs_info,
+	"RAID5/6 is not supported yet for sectorsize %u with page size %lu",
+			  fs_info->sectorsize, PAGE_SIZE);
+		return false;
+	}
  	/* Profile is valid and does not have bits outside of the allowed set */
  	if (alloc_profile_is_valid(bargs->target, 1) &&
  	    (bargs->target & ~allowed) == 0)
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help