diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-07-26 23:07:41 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-07-28 16:33:57 +0200 |
commit | cce36f459ddb5698fd1a40061c466996482146eb (patch) | |
tree | 05037e8f8d18c850a2f8afeac427e3dcada717dc /mkfs/mkfs.c | |
parent | e480a7459377817fbab7029a7dad47c969b8dd97 (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.c | 7 |
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; } |