New upstream v5.9
- Build Python bindings - Drop patches incorporated into this release
This commit is contained in:
parent
b991c736e2
commit
7bb64d409a
|
@ -68,3 +68,4 @@
|
|||
/btrfs-progs-v5.6.1.tar.xz
|
||||
/btrfs-progs-v5.7-rc1.tar.xz
|
||||
/btrfs-progs-v5.7.tar.xz
|
||||
/btrfs-progs-v5.9.tar.xz
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
From fe8715e1337a1bad5c49e165ab77c033c334efbc Mon Sep 17 00:00:00 2001
|
||||
From: Qu Wenruo <wqu@suse.com>
|
||||
Date: Mon, 20 Jul 2020 20:51:08 +0800
|
||||
Subject: [PATCH 1/2] btrfs-progs: convert: prevent 32bit overflow for
|
||||
cctx->total_bytes
|
||||
|
||||
[BUG]
|
||||
When convert is called on a 64GiB ext4 fs, it fails like this:
|
||||
|
||||
$ btrfs-convert /dev/loop0p1
|
||||
create btrfs filesystem:
|
||||
blocksize: 4096
|
||||
nodesize: 16384
|
||||
features: extref, skinny-metadata (default)
|
||||
checksum: crc32c
|
||||
creating ext2 image file
|
||||
ERROR: missing data block for bytenr 1048576
|
||||
ERROR: failed to create ext2_saved/image: -2
|
||||
WARNING: an error occurred during conversion, filesystem is partially created but not finalized and not mountable
|
||||
|
||||
Btrfs-convert also corrupts the source fs:
|
||||
|
||||
$ LANG=C e2fsck /dev/loop0p1 -f
|
||||
e2fsck 1.45.6 (20-Mar-2020)
|
||||
Resize inode not valid. Recreate<y>? yes
|
||||
Pass 1: Checking inodes, blocks, and sizes
|
||||
Deleted inode 3681 has zero dtime. Fix<y>? yes
|
||||
Inodes that were part of a corrupted orphan linked list found. Fix<y>? yes
|
||||
Inode 3744 was part of the orphaned inode list. FIXED.
|
||||
Deleted inode 3745 has zero dtime. Fix<y>? yes
|
||||
Inode 3747 has INLINE_DATA_FL flag on filesystem without inline data support.
|
||||
Clear<y>? yes
|
||||
...
|
||||
|
||||
[CAUSE]
|
||||
After some debugging, the first strange behavior is, the value of
|
||||
cctx->total_bytes is 0 in ext2_open_fs().
|
||||
|
||||
It turns out that, the value assign for cctx->total_bytes could lead to
|
||||
bit overflow for the unsigned int value.
|
||||
|
||||
And that 0 cctx->total_bytes leads to various problems for later free
|
||||
space calculation.
|
||||
For example, in calculate_available_space(), we use cctx->total_bytes to
|
||||
ensure we won't create a data chunk beyond device end:
|
||||
|
||||
cue_len = min(cctx->total_bytes - cur_off, cur_len);
|
||||
|
||||
If that cur_offset is also 0, we will create a cache_extent with 0 size,
|
||||
which could cause a lot of problems for cache tree search.
|
||||
|
||||
[FIX]
|
||||
Do manual casting for the multiply operation, so we could got a real u64
|
||||
result. The fix will be applied to all supported fses (ext* and
|
||||
reiserfs).
|
||||
|
||||
Reported-by: Christian Zangl <coralllama@gmail.com>
|
||||
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
|
||||
Signed-off-by: Qu Wenruo <wqu@suse.com>
|
||||
Signed-off-by: David Sterba <dsterba@suse.com>
|
||||
(cherry picked from commit 670a19828ad40004d05ad70cdd45d58008d3fb51)
|
||||
---
|
||||
convert/main.c | 1 +
|
||||
convert/source-ext2.c | 2 +-
|
||||
convert/source-reiserfs.c | 2 +-
|
||||
3 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/convert/main.c b/convert/main.c
|
||||
index 7709e9a6..df6a2ae3 100644
|
||||
--- a/convert/main.c
|
||||
+++ b/convert/main.c
|
||||
@@ -1136,6 +1136,7 @@ static int do_convert(const char *devname, u32 convert_flags, u32 nodesize,
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
+ ASSERT(cctx.total_bytes);
|
||||
blocksize = cctx.blocksize;
|
||||
total_bytes = (u64)blocksize * (u64)cctx.block_count;
|
||||
if (blocksize < 4096) {
|
||||
diff --git a/convert/source-ext2.c b/convert/source-ext2.c
|
||||
index f11ef651..d73684ef 100644
|
||||
--- a/convert/source-ext2.c
|
||||
+++ b/convert/source-ext2.c
|
||||
@@ -87,7 +87,7 @@ static int ext2_open_fs(struct btrfs_convert_context *cctx, const char *name)
|
||||
cctx->fs_data = ext2_fs;
|
||||
cctx->blocksize = ext2_fs->blocksize;
|
||||
cctx->block_count = ext2_fs->super->s_blocks_count;
|
||||
- cctx->total_bytes = ext2_fs->blocksize * ext2_fs->super->s_blocks_count;
|
||||
+ cctx->total_bytes = (u64)ext2_fs->super->s_blocks_count * ext2_fs->blocksize;
|
||||
cctx->volume_name = strndup((char *)ext2_fs->super->s_volume_name, 16);
|
||||
cctx->first_data_block = ext2_fs->super->s_first_data_block;
|
||||
cctx->inodes_count = ext2_fs->super->s_inodes_count;
|
||||
diff --git a/convert/source-reiserfs.c b/convert/source-reiserfs.c
|
||||
index 9fd6b9ab..3b4cb5ad 100644
|
||||
--- a/convert/source-reiserfs.c
|
||||
+++ b/convert/source-reiserfs.c
|
||||
@@ -82,7 +82,7 @@ static int reiserfs_open_fs(struct btrfs_convert_context *cxt, const char *name)
|
||||
cxt->fs_data = fs;
|
||||
cxt->blocksize = fs->fs_blocksize;
|
||||
cxt->block_count = get_sb_block_count(fs->fs_ondisk_sb);
|
||||
- cxt->total_bytes = cxt->blocksize * cxt->block_count;
|
||||
+ cxt->total_bytes = (u64)cxt->block_count * cxt->blocksize;
|
||||
cxt->volume_name = strndup(fs->fs_ondisk_sb->s_label, 16);
|
||||
cxt->first_data_block = 0;
|
||||
cxt->inodes_count = reiserfs_count_objectids(fs);
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
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
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
From 11c4a7b38a6aeef51b075d70e5aca36c42398842 Mon Sep 17 00:00:00 2001
|
||||
From: Qu Wenruo <wqu@suse.com>
|
||||
Date: Mon, 20 Jul 2020 20:51:09 +0800
|
||||
Subject: [PATCH 2/2] btrfs-progs: tests: add convert test case for multiply
|
||||
overflow
|
||||
|
||||
The new test case will test whether btrfs-convert can handle 64G ext*
|
||||
fs.
|
||||
|
||||
This exercise the cctx->total_bytes calculation where multiplying 4K
|
||||
(unsigned int) and 16777216 (u32) could lead to bit overflow for
|
||||
unsigned int and got 0, and screw up later free space calculation.
|
||||
|
||||
Signed-off-by: Qu Wenruo <wqu@suse.com>
|
||||
Signed-off-by: David Sterba <dsterba@suse.com>
|
||||
(cherry picked from commit 61f41474469b0b0fba9ec1978dfa91d9cbc6c914)
|
||||
---
|
||||
.../018-fs-size-overflow/test.sh | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
create mode 100755 tests/convert-tests/018-fs-size-overflow/test.sh
|
||||
|
||||
diff --git a/tests/convert-tests/018-fs-size-overflow/test.sh b/tests/convert-tests/018-fs-size-overflow/test.sh
|
||||
new file mode 100755
|
||||
index 00000000..d819f695
|
||||
--- /dev/null
|
||||
+++ b/tests/convert-tests/018-fs-size-overflow/test.sh
|
||||
@@ -0,0 +1,19 @@
|
||||
+#!/bin/bash
|
||||
+# Check if btrfs-convert can handle an ext4 fs whose size is 64G.
|
||||
+# That fs size could trigger a multiply overflow and screw up free space
|
||||
+# calculation
|
||||
+
|
||||
+source "$TEST_TOP/common"
|
||||
+source "$TEST_TOP/common.convert"
|
||||
+
|
||||
+setup_root_helper
|
||||
+prepare_test_dev 64g
|
||||
+check_prereq btrfs-convert
|
||||
+check_global_prereq mke2fs
|
||||
+
|
||||
+convert_test_prep_fs ext4 mke2fs -t ext4 -b 4096
|
||||
+run_check_umount_test_dev
|
||||
+
|
||||
+# Unpatched btrfs-convert would fail half way due to corrupted free space
|
||||
+# cache tree
|
||||
+convert_test_do_convert
|
||||
--
|
||||
2.26.2
|
||||
|
|
@ -1,12 +1,9 @@
|
|||
# Local definition of version_no_tilde when it doesn't exist
|
||||
%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
|
||||
|
||||
# Disable for now until version handling question is dealt with
|
||||
%bcond_with python
|
||||
|
||||
Name: btrfs-progs
|
||||
Version: 5.7
|
||||
Release: 5%{?dist}
|
||||
Version: 5.9
|
||||
Release: 1%{?dist}
|
||||
Summary: Userspace programs for btrfs
|
||||
|
||||
License: GPLv2
|
||||
|
@ -14,22 +11,13 @@ 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
|
||||
## Do not use raid0 by default for mkfs multi-disk (#1855174)
|
||||
Patch0001: 0001-btrfs-progs-mkfs-clean-up-default-profile-settings.patch
|
||||
Patch0002: 0002-btrfs-progs-mkfs-switch-to-single-as-default-profile.patch
|
||||
## Fix convert for 64-bit ext4 filesystems (#1851674)
|
||||
Patch0003: 0001-btrfs-progs-convert-prevent-32bit-overflow-for-cctx-.patch
|
||||
Patch0004: 0002-btrfs-progs-tests-add-convert-test-case-for-multiply.patch
|
||||
|
||||
BuildRequires: gcc, autoconf, automake
|
||||
BuildRequires: e2fsprogs-devel, libuuid-devel, zlib-devel, libzstd-devel
|
||||
BuildRequires: libacl-devel, libblkid-devel, lzo-devel
|
||||
BuildRequires: asciidoc, xmlto
|
||||
BuildRequires: systemd
|
||||
|
||||
%if %{with python}
|
||||
BuildRequires: python3-devel >= 3.4
|
||||
%endif
|
||||
|
||||
%description
|
||||
The btrfs-progs package provides all the userspace programs needed to create,
|
||||
|
@ -74,7 +62,6 @@ It includes development files for two libraries:
|
|||
You should install btrfs-progs-devel if you want to develop
|
||||
btrfs filesystem-specific programs.
|
||||
|
||||
%if %{with python}
|
||||
%package -n python3-btrfsutil
|
||||
Summary: Python 3 bindings for libbtrfsutil
|
||||
License: LGPLv3
|
||||
|
@ -87,7 +74,6 @@ which can be used for btrfs filesystem-specific programs in Python.
|
|||
|
||||
You should install python3-btrfsutil if you want to use or develop
|
||||
btrfs filesystem-specific programs in Python.
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%autosetup -n %{name}-v%{version_no_tilde} -p1
|
||||
|
@ -97,11 +83,9 @@ btrfs filesystem-specific programs in Python.
|
|||
%configure CFLAGS="%{optflags} -fno-strict-aliasing" %{!?with_python:--disable-python}
|
||||
%make_build
|
||||
|
||||
%if %{with python}
|
||||
pushd libbtrfsutil/python
|
||||
%py3_build
|
||||
popd
|
||||
%endif
|
||||
|
||||
%install
|
||||
%make_install mandir=%{_mandir} bindir=%{_sbindir} libdir=%{_libdir} incdir=%{_includedir}
|
||||
|
@ -109,11 +93,9 @@ install -Dpm0644 btrfs-completion %{buildroot}%{_datadir}/bash-completion/comple
|
|||
# Nuke the static lib
|
||||
rm -v %{buildroot}%{_libdir}/*.a
|
||||
|
||||
%if %{with python}
|
||||
pushd libbtrfsutil/python
|
||||
%py3_install
|
||||
popd
|
||||
%endif
|
||||
|
||||
%files
|
||||
%license COPYING
|
||||
|
@ -127,8 +109,8 @@ popd
|
|||
%{_sbindir}/btrfs
|
||||
%{_sbindir}/btrfs-map-logical
|
||||
%{_sbindir}/btrfs-find-root
|
||||
%{_mandir}/man5/*.gz
|
||||
%{_mandir}/man8/*.gz
|
||||
%{_mandir}/man5/*
|
||||
%{_mandir}/man8/*
|
||||
%{_udevrulesdir}/64-btrfs-dm.rules
|
||||
%{_datadir}/bash-completion/completions/btrfs
|
||||
|
||||
|
@ -144,15 +126,19 @@ popd
|
|||
%{_includedir}/*
|
||||
%{_libdir}/libbtrfs.so
|
||||
%{_libdir}/libbtrfsutil.so
|
||||
%{_libdir}/pkgconfig/libbtrfsutil.pc
|
||||
|
||||
%if %{with python}
|
||||
%files -n python3-btrfsutil
|
||||
%license libbtrfsutil/COPYING*
|
||||
%{python3_sitearch}/btrfsutil.*.so
|
||||
%{python3_sitearch}/btrfsutil-*.egg-info
|
||||
%endif
|
||||
%{python3_sitearch}/btrfsutil-*.egg-info/
|
||||
|
||||
%changelog
|
||||
* Fri Oct 23 2020 Neal Gompa <ngompa13@gmail.com> - 5.9-1
|
||||
- New upstream release
|
||||
- Build Python bindings
|
||||
- Drop patches incorporated into this release
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.7-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
|
|
2
sources
2
sources
|
@ -1 +1 @@
|
|||
SHA512 (btrfs-progs-v5.7.tar.xz) = 72c3af13ca589f2e0b96cb7602319035ef8aab6ee224fff3544a5d0bfc013a66552dde4533ec5e64696d404b8905431cd0f25367c40fd34ea39be7c0ed8c2d16
|
||||
SHA512 (btrfs-progs-v5.9.tar.xz) = 38db047198ab0467d3fe235f7e8e1fd14ade00dd0b182588220c5f5e4b598efbdcd30a3d5d56cf0a0ed8a902d2374af0927eb7f3720cd761172c7291a2a65c94
|
||||
|
|
Loading…
Reference in New Issue