Rebase to 1.8.4-2 for performance and compression fixes
Resolves: RHEL-72588 Signed-off-by: Neal Gompa <ngompa@centosproject.org>
This commit is contained in:
parent
51bd9be59c
commit
af442a837f
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/erofs-utils-1.7.1.tar.gz
|
/erofs-utils-1.7.1.tar.gz
|
||||||
/erofs-utils-1.8.2.tar.gz
|
/erofs-utils-1.8.2.tar.gz
|
||||||
|
/erofs-utils-1.8.4.tar.gz
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
From 882ad1c3157f7544bd4d004e3b6d744f0cbe3ffc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gao Xiang <hsiangkao@linux.alibaba.com>
|
|
||||||
Date: Sat, 12 Oct 2024 11:52:13 +0800
|
|
||||||
Subject: erofs-utils: mkfs: fix `-Eall-fragments` for multi-threaded
|
|
||||||
compression
|
|
||||||
|
|
||||||
If `-Eall-fragments` is specified when multi-threaded compression is
|
|
||||||
enabled, it should only apply to the packed inode instead of other
|
|
||||||
real inodes for now.
|
|
||||||
|
|
||||||
Fixes: 10c1590c0920 ("erofs-utils: enable multi-threaded support for `-Eall-fragments`")
|
|
||||||
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
|
|
||||||
Link: https://lore.kernel.org/r/20241012035213.3729725-1-hsiangkao@linux.alibaba.com
|
|
||||||
---
|
|
||||||
lib/compress.c | 13 +++++++------
|
|
||||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/compress.c b/lib/compress.c
|
|
||||||
index 5d6fb2a..cbd4620 100644
|
|
||||||
--- a/lib/compress.c
|
|
||||||
+++ b/lib/compress.c
|
|
||||||
@@ -1456,12 +1456,8 @@ void *erofs_begin_compressed_file(struct erofs_inode *inode, int fd, u64 fpos)
|
|
||||||
inode->idata_size = 0;
|
|
||||||
inode->fragment_size = 0;
|
|
||||||
|
|
||||||
- if (z_erofs_mt_enabled) {
|
|
||||||
- ictx = malloc(sizeof(*ictx));
|
|
||||||
- if (!ictx)
|
|
||||||
- return ERR_PTR(-ENOMEM);
|
|
||||||
- ictx->fd = dup(fd);
|
|
||||||
- } else {
|
|
||||||
+ if (!z_erofs_mt_enabled ||
|
|
||||||
+ (cfg.c_all_fragments && !erofs_is_packed_inode(inode))) {
|
|
||||||
#ifdef EROFS_MT_ENABLED
|
|
||||||
pthread_mutex_lock(&g_ictx.mutex);
|
|
||||||
if (g_ictx.seg_num)
|
|
||||||
@@ -1471,6 +1467,11 @@ void *erofs_begin_compressed_file(struct erofs_inode *inode, int fd, u64 fpos)
|
|
||||||
#endif
|
|
||||||
ictx = &g_ictx;
|
|
||||||
ictx->fd = fd;
|
|
||||||
+ } else {
|
|
||||||
+ ictx = malloc(sizeof(*ictx));
|
|
||||||
+ if (!ictx)
|
|
||||||
+ return ERR_PTR(-ENOMEM);
|
|
||||||
+ ictx->fd = dup(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
ictx->ccfg = &erofs_ccfg[inode->z_algorithmtype[0]];
|
|
||||||
--
|
|
||||||
cgit 1.2.3-korg
|
|
||||||
|
|
102
erofs-utils-1.8.4-fragdedupe-inode-support.patch
Normal file
102
erofs-utils-1.8.4-fragdedupe-inode-support.patch
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
From 06875b3f2182eab24b81083dfde542f778b201cc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gao Xiang <hsiangkao@linux.alibaba.com>
|
||||||
|
Date: Fri, 3 Jan 2025 10:40:11 +0800
|
||||||
|
Subject: erofs-utils: mkfs: support `-Efragdedupe=inode`
|
||||||
|
|
||||||
|
If the entire inode can be deduplicated against an existing fragment,
|
||||||
|
simply reuse it.
|
||||||
|
|
||||||
|
Multi-threading can still be applied for `-Efragdedupe=inode` with
|
||||||
|
the current codebase:
|
||||||
|
|
||||||
|
Fedora Linux 39 (Workstation Edition) LiveCD results:
|
||||||
|
-zlzma,level=6,dictsize=131072 -C65536 -Eall-fragments
|
||||||
|
|
||||||
|
`-E^fragdedupe` 2,003,587,072 bytes (1911 MiB)
|
||||||
|
`-Efragdedupe=inode` 1,970,577,408 bytes (1880 MiB)
|
||||||
|
|
||||||
|
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
|
||||||
|
Link: https://lore.kernel.org/r/20250103024011.198163-1-hsiangkao@linux.alibaba.com
|
||||||
|
---
|
||||||
|
include/erofs/config.h | 8 +++++++-
|
||||||
|
lib/compress.c | 9 +++++++--
|
||||||
|
mkfs/main.c | 13 ++++++++++---
|
||||||
|
3 files changed, 24 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/erofs/config.h b/include/erofs/config.h
|
||||||
|
index 47e4d00..92c1467 100644
|
||||||
|
--- a/include/erofs/config.h
|
||||||
|
+++ b/include/erofs/config.h
|
||||||
|
@@ -33,6 +33,12 @@ enum {
|
||||||
|
TIMESTAMP_CLAMPING,
|
||||||
|
};
|
||||||
|
|
||||||
|
+enum {
|
||||||
|
+ FRAGDEDUPE_FULL,
|
||||||
|
+ FRAGDEDUPE_INODE,
|
||||||
|
+ FRAGDEDUPE_OFF,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
#define EROFS_MAX_COMPR_CFGS 64
|
||||||
|
|
||||||
|
struct erofs_compr_opts {
|
||||||
|
@@ -53,7 +59,7 @@ struct erofs_configure {
|
||||||
|
bool c_fragments;
|
||||||
|
bool c_all_fragments;
|
||||||
|
bool c_dedupe;
|
||||||
|
- bool c_nofragdedupe;
|
||||||
|
+ char c_fragdedupe;
|
||||||
|
bool c_ignore_mtime;
|
||||||
|
bool c_showprogress;
|
||||||
|
bool c_extra_ea_name_prefixes;
|
||||||
|
diff --git a/lib/compress.c b/lib/compress.c
|
||||||
|
index 0e8faad..20ab208 100644
|
||||||
|
--- a/lib/compress.c
|
||||||
|
+++ b/lib/compress.c
|
||||||
|
@@ -1527,12 +1527,17 @@ void *erofs_begin_compressed_file(struct erofs_inode *inode, int fd, u64 fpos)
|
||||||
|
* parts into the packed inode.
|
||||||
|
*/
|
||||||
|
if (cfg.c_fragments && !erofs_is_packed_inode(inode) &&
|
||||||
|
- !cfg.c_nofragdedupe) {
|
||||||
|
+ cfg.c_fragdedupe != FRAGDEDUPE_OFF) {
|
||||||
|
ret = z_erofs_fragments_dedupe(inode, fd, &ictx->tof_chksum);
|
||||||
|
if (ret < 0)
|
||||||
|
goto err_free_ictx;
|
||||||
|
- }
|
||||||
|
|
||||||
|
+ if (cfg.c_fragdedupe == FRAGDEDUPE_INODE &&
|
||||||
|
+ inode->fragment_size < inode->i_size) {
|
||||||
|
+ erofs_dbg("Discard the sub-inode tail fragment @ nid %llu", inode->nid);
|
||||||
|
+ inode->fragment_size = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
ictx->inode = inode;
|
||||||
|
ictx->fpos = fpos;
|
||||||
|
init_list_head(&ictx->extents);
|
||||||
|
diff --git a/mkfs/main.c b/mkfs/main.c
|
||||||
|
index 3f74fa2..0f6a32b 100644
|
||||||
|
--- a/mkfs/main.c
|
||||||
|
+++ b/mkfs/main.c
|
||||||
|
@@ -306,9 +306,16 @@ static int erofs_mkfs_feat_set_dedupe(bool en, const char *val,
|
||||||
|
static int erofs_mkfs_feat_set_fragdedupe(bool en, const char *val,
|
||||||
|
unsigned int vallen)
|
||||||
|
{
|
||||||
|
- if (vallen)
|
||||||
|
- return -EINVAL;
|
||||||
|
- cfg.c_nofragdedupe = !en;
|
||||||
|
+ if (!en) {
|
||||||
|
+ if (vallen)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+ cfg.c_fragdedupe = FRAGDEDUPE_OFF;
|
||||||
|
+ } else if (vallen == sizeof("inode") - 1 &&
|
||||||
|
+ !memcmp(val, "inode", vallen)) {
|
||||||
|
+ cfg.c_fragdedupe = FRAGDEDUPE_INODE;
|
||||||
|
+ } else {
|
||||||
|
+ cfg.c_fragdedupe = FRAGDEDUPE_FULL;
|
||||||
|
+ }
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
cgit 1.2.3-korg
|
||||||
|
|
@ -5,11 +5,12 @@
|
|||||||
%bcond qpl %[ 0%{?fedora} >= 41 && "%{_arch}" == "x86_64" ]
|
%bcond qpl %[ 0%{?fedora} >= 41 && "%{_arch}" == "x86_64" ]
|
||||||
%bcond selinux 1
|
%bcond selinux 1
|
||||||
%bcond uuid 1
|
%bcond uuid 1
|
||||||
|
%bcond xxhash %[ 0%{?fedora} || (0%{?rhel} >= 9 && 0%{?rhel} < 10) ]
|
||||||
%bcond zlib 1
|
%bcond zlib 1
|
||||||
%bcond zstd 1
|
%bcond zstd 1
|
||||||
|
|
||||||
Name: erofs-utils
|
Name: erofs-utils
|
||||||
Version: 1.8.2
|
Version: 1.8.4
|
||||||
Release: 2%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
Summary: Utilities for working with EROFS
|
Summary: Utilities for working with EROFS
|
||||||
@ -17,18 +18,19 @@ License: GPL-2.0-only AND GPL-2.0-or-later AND (GPL-2.0-only OR Apache-2.
|
|||||||
URL: https://erofs.docs.kernel.org/
|
URL: https://erofs.docs.kernel.org/
|
||||||
|
|
||||||
Source: https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/snapshot/%{name}-%{version}.tar.gz
|
Source: https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/snapshot/%{name}-%{version}.tar.gz
|
||||||
Patch: https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/patch/?id=882ad1c3157f7544bd4d004e3b6d744f0cbe3ffc#/%{name}-1.8.2-fix-all-fragments.patch
|
Patch: https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/patch/?id=06875b3f2182eab24b81083dfde542f778b201cc#/%{name}-1.8.4-fragdedupe-inode-support.patch
|
||||||
|
|
||||||
BuildRequires: %[ "%{toolchain}" == "clang" ? "clang compiler-rt" : "gcc" ]
|
BuildRequires: %[ "%{toolchain}" == "clang" ? "clang compiler-rt" : "gcc" ]
|
||||||
BuildRequires: libtool
|
BuildRequires: libtool
|
||||||
BuildRequires: make
|
BuildRequires: make
|
||||||
%{?with_deflate:BuildRequires: pkgconfig(libdeflate)}
|
%{?with_deflate:BuildRequires: pkgconfig(libdeflate)}
|
||||||
%{?with_fuse:BuildRequires: pkgconfig(fuse3) >= 3.2}
|
%{?with_fuse:BuildRequires: pkgconfig(fuse3) >= 3.2}
|
||||||
%{?with_lz4:BuildRequires: lz4-devel >= 1.9.3}
|
%{?with_lz4:BuildRequires: pkgconfig(liblz4) >= 1.9.3}
|
||||||
%{?with_lzma:BuildRequires: pkgconfig(liblzma) >= 5.4}
|
%{?with_lzma:BuildRequires: pkgconfig(liblzma) >= 5.4}
|
||||||
%{?with_qpl:BuildRequires: pkgconfig(qpl) >= 1.5.0}
|
%{?with_qpl:BuildRequires: pkgconfig(qpl) >= 1.5.0}
|
||||||
%{?with_selinux:BuildRequires: pkgconfig(libselinux)}
|
%{?with_selinux:BuildRequires: pkgconfig(libselinux)}
|
||||||
%{?with_uuid:BuildRequires: pkgconfig(uuid)}
|
%{?with_uuid:BuildRequires: pkgconfig(uuid)}
|
||||||
|
%{?with_xxhash:BuildRequires: pkgconfig(libxxhash)}
|
||||||
%{?with_zlib:BuildRequires: pkgconfig(zlib)}
|
%{?with_zlib:BuildRequires: pkgconfig(zlib)}
|
||||||
%{?with_zstd:BuildRequires: pkgconfig(libzstd) >= 1.4.0}
|
%{?with_zstd:BuildRequires: pkgconfig(libzstd) >= 1.4.0}
|
||||||
|
|
||||||
@ -55,9 +57,9 @@ This package includes erofsfuse to mount EROFS images.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -p1
|
%autosetup -p1
|
||||||
autoreconf -fi
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
autoreconf -fi
|
||||||
%configure \
|
%configure \
|
||||||
--enable-multithreading \
|
--enable-multithreading \
|
||||||
--%{?with_deflate:with}%{!?with_deflate:without}-libdeflate \
|
--%{?with_deflate:with}%{!?with_deflate:without}-libdeflate \
|
||||||
@ -67,6 +69,7 @@ autoreconf -fi
|
|||||||
--%{?with_qpl:with}%{!?with_qpl:without}-qpl \
|
--%{?with_qpl:with}%{!?with_qpl:without}-qpl \
|
||||||
--%{?with_selinux:with}%{!?with_selinux:without}-selinux \
|
--%{?with_selinux:with}%{!?with_selinux:without}-selinux \
|
||||||
--%{?with_uuid:with}%{!?with_uuid:without}-uuid \
|
--%{?with_uuid:with}%{!?with_uuid:without}-uuid \
|
||||||
|
--%{?with_xxhash:with}%{!?with_xxhash:without}-xxhash \
|
||||||
--%{?with_zlib:with}%{!?with_zlib:without}-zlib \
|
--%{?with_zlib:with}%{!?with_zlib:without}-zlib \
|
||||||
--%{?with_zstd:with}%{!?with_zstd:without}-libzstd
|
--%{?with_zstd:with}%{!?with_zstd:without}-libzstd
|
||||||
%make_build
|
%make_build
|
||||||
@ -95,6 +98,10 @@ autoreconf -fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jan 02 2025 Neal Gompa <ngompa@centosproject.org> - 1.8.4-2
|
||||||
|
- Rebase to 1.8.4-2 for performance and compression fixes
|
||||||
|
Resolves: RHEL-72588
|
||||||
|
|
||||||
* Wed Nov 20 2024 Abhi Das <adas@redhat.com> - 1.8.2-2
|
* Wed Nov 20 2024 Abhi Das <adas@redhat.com> - 1.8.2-2
|
||||||
- Rebase to 1.8.2-2 for zstd and multithreading support and
|
- Rebase to 1.8.2-2 for zstd and multithreading support and
|
||||||
Remove erroneously added gating.yaml
|
Remove erroneously added gating.yaml
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (erofs-utils-1.8.2.tar.gz) = 474ea30662e498e6ece5d4e5171c333ec040eaffa4f5670d1b728b1461a2a18fa90ea6cc2ad7b26e87732d735985e9108a9c49a7072b4dc4fdfee7916df48593
|
SHA512 (erofs-utils-1.8.4.tar.gz) = c941b0a2ab6c650a9aa4c9cadeb277ebc87007dc51354ff013c7cb763e6e8c9d44ed9e4791730ed05088faaba8c612198b924e70f5e52019382cfdf6d2e6b677
|
||||||
|
Loading…
Reference in New Issue
Block a user