From cce36f459ddb5698fd1a40061c466996482146eb Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Fri, 26 Jul 2019 23:07:41 +0200 Subject: Implement fragment deduplication in data writer The strategy is simple: - The data writer function that write data/fragment blocks get access to the list files. - When writing a fragment, we look for an already written file that has a fragment with the same size and checksum. - If we find one, we throw away the fragment and reuse the existing one. Signed-off-by: David Oberhollenzer --- mkfs/mkfs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'mkfs') diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index a739322..b5c514b 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ #include "mkfs.h" -static int process_file(data_writer_t *data, file_info_t *fi, bool quiet) +static int process_file(data_writer_t *data, file_info_t *fi, bool quiet, + file_info_t *list) { int ret, infd; @@ -14,7 +15,7 @@ static int process_file(data_writer_t *data, file_info_t *fi, bool quiet) return -1; } - ret = write_data_from_fd(data, fi, infd, 0); + ret = write_data_from_fd(data, fi, infd, 0, list); close(infd); return ret; @@ -50,7 +51,7 @@ static int pack_files(data_writer_t *data, fstree_t *fs, options_t *opt) return -1; for (fi = fs->files; fi != NULL; fi = fi->next) { - if (process_file(data, fi, opt->quiet)) + if (process_file(data, fi, opt->quiet, fs->files)) return -1; } -- cgit v1.2.3