After this patch, "-E dedupe" can now support chunk-based data deduplication with block-sized chunks if compression is off.
Signed-off-by: Gao Xiang <[email protected]> --- mkfs/main.c | 35 ++++++++++++++++++++--------------- 1 file 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", -- 2.24.4
