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 | |
| 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')
| -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;  	}  | 
