summaryrefslogtreecommitdiff
path: root/mkfs/mkfs.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-07-26 23:07:41 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-07-28 16:33:57 +0200
commitcce36f459ddb5698fd1a40061c466996482146eb (patch)
tree05037e8f8d18c850a2f8afeac427e3dcada717dc /mkfs/mkfs.c
parente480a7459377817fbab7029a7dad47c969b8dd97 (diff)
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 <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'mkfs/mkfs.c')
-rw-r--r--mkfs/mkfs.c7
1 files changed, 4 insertions, 3 deletions
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;
}