aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@linux.alibaba.com>2022-10-17 11:17:36 +0800
committerGao Xiang <hsiangkao@linux.alibaba.com>2022-10-19 00:25:39 +0800
commit148c12a79f3b39eefc3878aaac57f4ea69af8ee3 (patch)
tree3de43115cb57414a8c59349a30c63f33c3a41f91
parent9410884c64544d0dd189e8840bdb035ffeb46a98 (diff)
downloaderofs-utils-148c12a79f3b39eefc3878aaac57f4ea69af8ee3.tar.gz
erofs-utils: use chunk-based data deduplication if compression is off
After this patch, "-E dedupe" can now support chunk-based data deduplication with block-sized chunks if compression is off. Link: https://lore.kernel.org/r/20221017031736.90542-1-hsiangkao@linux.alibaba.com Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
-rw-r--r--mkfs/main.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/mkfs/main.c b/mkfs/main.c
index 00a2deb..77d635c 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -663,12 +663,6 @@ int main(int argc, char **argv)
return 1;
}
- if (cfg.c_chunkbits) {
- err = erofs_blob_init(cfg.c_blobdev_path);
- if (err)
- return 1;
- }
-
err = lstat64(cfg.c_src_path, &st);
if (err)
return 1;
@@ -747,15 +741,6 @@ int main(int argc, char **argv)
goto exit;
}
- if (cfg.c_dedupe) {
- err = z_erofs_dedupe_init(EROFS_BLKSIZ);
- if (err) {
- erofs_err("failed to initialize deduplication: %s",
- erofs_strerror(err));
- goto exit;
- }
- }
-
err = z_erofs_compress_init(sb_bh);
if (err) {
erofs_err("failed to initialize compressor: %s",
@@ -763,6 +748,26 @@ int main(int argc, char **argv)
goto exit;
}
+ if (cfg.c_dedupe) {
+ if (!cfg.c_compr_alg_master) {
+ erofs_err("Compression is not enabled. Turn on chunk-based data deduplication instead.");
+ cfg.c_chunkbits = LOG_BLOCK_SIZE;
+ } else {
+ err = z_erofs_dedupe_init(EROFS_BLKSIZ);
+ if (err) {
+ erofs_err("failed to initialize deduplication: %s",
+ erofs_strerror(err));
+ goto exit;
+ }
+ }
+ }
+
+ if (cfg.c_chunkbits) {
+ err = erofs_blob_init(cfg.c_blobdev_path);
+ if (err)
+ return 1;
+ }
+
err = erofs_generate_devtable();
if (err) {
erofs_err("failed to generate device table: %s",