Backport fix to not use raid0 by default for mkfs multi-disk (#1855174)

This commit is contained in:
Neal Gompa 2020-07-21 14:22:35 -04:00
parent c14c9fc1a7
commit cec386dcf9
3 changed files with 137 additions and 2 deletions

View File

@ -0,0 +1,79 @@
From fcd0fd043749cd2623a918cf9862d10e2a227ae4 Mon Sep 17 00:00:00 2001
From: David Sterba <dsterba@suse.com>
Date: Tue, 21 Jul 2020 12:13:27 +0200
Subject: [PATCH 1/2] btrfs-progs: mkfs: clean up default profile settings
Extract the defaults for data and metadata profiles to a header and
use the symbolic names instead of hardcoding the profiles.
Signed-off-by: David Sterba <dsterba@suse.com>
(cherry picked from commit 071cb030a41fde2cab07217b52ba7c86b72fb8d8)
---
mkfs/common.h | 10 ++++++++++
mkfs/main.c | 21 ++++++++++++++++-----
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/mkfs/common.h b/mkfs/common.h
index 426852be..61969dcc 100644
--- a/mkfs/common.h
+++ b/mkfs/common.h
@@ -28,6 +28,16 @@
#define BTRFS_MKFS_SYSTEM_GROUP_SIZE SZ_4M
#define BTRFS_MKFS_SMALL_VOLUME_SIZE SZ_1G
+/*
+ * Default settings for block group types
+ */
+#define BTRFS_MKFS_DEFAULT_DATA_ONE_DEVICE 0 /* SINGLE */
+#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE BTRFS_BLOCK_GROUP_DUP
+#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD 0 /* SINGLE */
+
+#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE BTRFS_BLOCK_GROUP_RAID0
+#define BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE BTRFS_BLOCK_GROUP_RAID1
+
/*
* Tree root blocks created during mkfs
*/
diff --git a/mkfs/main.c b/mkfs/main.c
index 0a4de617..6c9a24a4 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -1144,19 +1144,30 @@ int BOX_MAIN(mkfs)(int argc, char **argv)
* For mixed groups defaults are single/single.
*/
if (!mixed) {
+ u64 tmp;
+
if (!metadata_profile_opt) {
if (dev_cnt == 1 && ssd && verbose)
printf("Detected a SSD, turning off metadata "
"duplication. Mkfs with -m dup if you want to "
"force metadata duplication.\n");
- metadata_profile = (dev_cnt > 1) ?
- BTRFS_BLOCK_GROUP_RAID1 : (ssd) ?
- 0: BTRFS_BLOCK_GROUP_DUP;
+ if (dev_cnt > 1) {
+ tmp = BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE;
+ } else {
+ if (ssd)
+ tmp = BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD;
+ else
+ tmp = BTRFS_MKFS_DEFAULT_META_ONE_DEVICE;
+ }
+ metadata_profile = tmp;
}
if (!data_profile_opt) {
- data_profile = (dev_cnt > 1) ?
- BTRFS_BLOCK_GROUP_RAID0 : 0; /* raid0 or single */
+ if (dev_cnt > 1)
+ tmp = BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE;
+ else
+ tmp = BTRFS_MKFS_DEFAULT_DATA_ONE_DEVICE;
+ data_profile = tmp;
}
} else {
u32 best_nodesize = max_t(u32, sysconf(_SC_PAGESIZE), sectorsize);
--
2.26.2

View File

@ -0,0 +1,49 @@
From 5e76619fcda3d792b2cb188fc2d950c61d7ebf09 Mon Sep 17 00:00:00 2001
From: David Sterba <dsterba@suse.com>
Date: Tue, 21 Jul 2020 12:28:05 +0200
Subject: [PATCH 2/2] btrfs-progs: mkfs: switch to single as default profile
for multiple-devices
The single profile is better suited as default for data on multiple
devices. Switch from RAID0 because:
- it's easier to convert to other profiles, as single consumes some
chunks per device, but RAID0 has chunks on all devices regardless of
the used space
- RAID0 has no redundancy and compared one disk failure affects many
files due to striping, while with single the chances are a bit higher
that complete files are stored on one device
- when the device sizes are not equal and not even close to equal, the
maximum achievable size with RAID0 is size of the smallest device due
to striping, with single it's the sum of all device sizes
The changed defaults could affect scripts and deployments that rely on
the old values, but given the number of possible profiles for multiple
devices let's hope that they're specified explicitly in majority of
cases.
Issue: #270
Signed-off-by: David Sterba <dsterba@suse.com>
(cherry picked from commit f1507716c67e2d6012f1e7a0f1538d4f669faa23)
---
mkfs/common.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mkfs/common.h b/mkfs/common.h
index 61969dcc..cc88db71 100644
--- a/mkfs/common.h
+++ b/mkfs/common.h
@@ -35,7 +35,7 @@
#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE BTRFS_BLOCK_GROUP_DUP
#define BTRFS_MKFS_DEFAULT_META_ONE_DEVICE_SSD 0 /* SINGLE */
-#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE BTRFS_BLOCK_GROUP_RAID0
+#define BTRFS_MKFS_DEFAULT_DATA_MULTI_DEVICE 0 /* SINGLE */
#define BTRFS_MKFS_DEFAULT_META_MULTI_DEVICE BTRFS_BLOCK_GROUP_RAID1
/*
--
2.26.2

View File

@ -3,13 +3,17 @@
Name: btrfs-progs
Version: 5.7
Release: 2%{?dist}
Release: 3%{?dist}
Summary: Userspace programs for btrfs
License: GPLv2
URL: https://btrfs.wiki.kernel.org/index.php/Main_Page
Source0: https://www.kernel.org/pub/linux/kernel/people/kdave/%{name}/%{name}-v%{version_no_tilde}.tar.xz
# Backports from upstream
Patch0001: 0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch
Patch0002: 0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch
BuildRequires: gcc, autoconf, automake
BuildRequires: e2fsprogs-devel, libuuid-devel, zlib-devel, libzstd-devel
BuildRequires: libacl-devel, libblkid-devel, lzo-devel
@ -79,7 +83,7 @@ btrfs filesystem-specific programs in Python.
%endif
%prep
%autosetup -n %{name}-v%{version_no_tilde}
%autosetup -n %{name}-v%{version_no_tilde} -p1
%build
./autogen.sh
@ -142,6 +146,9 @@ popd
%endif
%changelog
* Tue Jul 21 2020 Neal Gompa <ngompa13@gmail.com> - 5.7-3
- Backport fix to not use raid0 by default for mkfs multi-disk (#1855174)
* Wed Jul 08 2020 Carl George <carl@george.computer> - 5.7-2
- Include bash completion