Thread (32 messages) 32 messages, 5 authors, 2021-07-09

Re: [PATCH v6 10/15] btrfs: reject raid5/6 fs for subpage

From: David Sterba <hidden>
Date: 2021-07-09 18:37:25

On Fri, Jul 09, 2021 at 05:36:22PM +0800, Anand Jain wrote:
On 5/7/21 10:01 am, Qu Wenruo wrote:
quoted
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>
---
  fs/btrfs/disk-io.c | 10 ++++++++++
  fs/btrfs/volumes.c |  8 ++++++++
  2 files changed, 18 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 782e16795bc4..3cd876c49446 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3937,11 +3937,19 @@ 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);
+		goto invalid;
Just
  return false;
is fine.

The above btrfs_err() will suffice. We don't need additional btrfs_err() 
at the label invalid.
Agreed, this is the pattern with several checks and any of them can fail
in place as tehre's no common cleanup at the end of the function.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help