1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
Upstream-Status: Backport [https://github.com/kdave/btrfs-progs/commit/73545c1fe6304f08ab306b76d2bcacaf22a5e99a]
Signed-off-by: Ross Burton <ross.burton@arm.com>
From 4f4eafe8ebcc86f84f6c85a5c5814c430d8f190c Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Tue, 24 May 2022 13:44:29 +0100
Subject: [PATCH] btrfs-progs: add option to disable LZO support
LZO as a compression format is pretty archaic these days, there are
better algorithsm in all metrics for compression and decompression, and
lzo hasn't had a new release since 2017.
Add an option to disable LZO (defaulting to enabled), and respect it in
cmds/restore.c.
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
Makefile | 2 +-
Makefile.inc.in | 1 +
cmds/restore.c | 7 +++++++
configure.ac | 30 ++++++++++++++++++++----------
4 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/Makefile b/Makefile
index af4908f9..0e8e05f3 100644
--- a/Makefile
+++ b/Makefile
@@ -335,7 +335,7 @@ endif
btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2)
btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS)
btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype
-cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
+cmds_restore_cflags = -DBTRFSRESTORE_LZO=$(BTRFSRESTORE_LZO) -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
ifeq ($(CRYPTOPROVIDER_BUILTIN),1)
CRYPTO_OBJECTS = crypto/sha224-256.o crypto/blake2b-ref.o
diff --git a/Makefile.inc.in b/Makefile.inc.in
index c995aef9..385b7ae1 100644
--- a/Makefile.inc.in
+++ b/Makefile.inc.in
@@ -16,6 +16,7 @@ BUILD_PROGRAMS = @BUILD_PROGRAMS@
BUILD_SHARED_LIBRARIES = @BUILD_SHARED_LIBRARIES@
BUILD_STATIC_LIBRARIES = @BUILD_STATIC_LIBRARIES@
BTRFSCONVERT_EXT2 = @BTRFSCONVERT_EXT2@
+BTRFSRESTORE_LZO = @BTRFSRESTORE_LZO@
BTRFSCONVERT_REISERFS = @BTRFSCONVERT_REISERFS@
BTRFSRESTORE_ZSTD = @BTRFSRESTORE_ZSTD@
PYTHON_BINDINGS = @PYTHON_BINDINGS@
diff --git a/cmds/restore.c b/cmds/restore.c
index 5923d571..4dd79fce 100644
--- a/cmds/restore.c
+++ b/cmds/restore.c
@@ -25,8 +25,10 @@
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
+#if BTRFSRESTORE_LZO
#include <lzo/lzoconf.h>
#include <lzo/lzo1x.h>
+#endif
#include <zlib.h>
#if BTRFSRESTORE_ZSTD
#include <zstd.h>
@@ -98,6 +100,10 @@ static inline size_t read_compress_length(unsigned char *buf)
static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf,
char *outbuf, u64 compress_len, u64 *decompress_len)
{
+#if !BTRFSRESTORE_LZO
+ error("btrfs not compiled with lzo support");
+ return -1;
+#else
size_t new_len;
size_t in_len;
size_t out_len = 0;
@@ -156,6 +162,7 @@ static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf,
*decompress_len = out_len;
return 0;
+#endif
}
static int decompress_zstd(const char *inbuf, char *outbuf, u64 compress_len,
diff --git a/configure.ac b/configure.ac
index d907636b..c1ad2c22 100644
--- a/configure.ac
+++ b/configure.ac
@@ -372,16 +372,26 @@ if ${PKG_CONFIG} udev --atleast-version 190; then
fi
AC_SUBST(UDEVDIR)
-dnl lzo library does not provide pkg-config, let use classic way
-AC_CHECK_LIB([lzo2], [lzo_version], [
- LZO2_LIBS="-llzo2"
- LZO2_CFLAGS=""
- LZO2_LIBS_STATIC="-llzo2"],[
- AC_MSG_ERROR([cannot find lzo2 library])
-])
-AC_SUBST([LZO2_LIBS])
-AC_SUBST([LZO2_LIBS_STATIC])
-AC_SUBST([LZO2_CFLAGS])
+AC_ARG_ENABLE([lzo],
+ AS_HELP_STRING([--disable-lzo], [build without lzo support]),
+ [], [enable_lzo=yes]
+)
+
+if test "x$enable_lzo" = xyes; then
+ dnl lzo library does not provide pkg-config, let use classic way
+ AC_CHECK_LIB([lzo2], [lzo_version], [
+ LZO2_LIBS="-llzo2"
+ LZO2_CFLAGS=""
+ LZO2_LIBS_STATIC="-llzo2"],[
+ AC_MSG_ERROR([cannot find lzo2 library])
+ ])
+ AC_SUBST([LZO2_LIBS])
+ AC_SUBST([LZO2_LIBS_STATIC])
+ AC_SUBST([LZO2_CFLAGS])
+fi
+
+AS_IF([test "x$enable_lzo" = xyes], [BTRFSRESTORE_LZO=1], [BTRFSRESTORE_LZO=0])
+AC_SUBST(BTRFSRESTORE_LZO)
dnl call PKG_INSTALLDIR from pkg.m4 to set pkgconfigdir
m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_MSG_ERROR([please install pkgconf])])
--
2.25.1
|