Don't skip parts of a file when calling fiemap

A mis-incremented offset in the fiemap-processing code meant that
non-sparse portions of files were missed.
This commit is contained in:
Alex Young
2012-11-20 17:24:19 +00:00
parent 4f650d85c2
commit ed70dacf2f
4 changed files with 37 additions and 3 deletions

View File

@@ -140,8 +140,11 @@ void write_not_zeroes(struct client* client, uint64_t from, int len)
* and memcpy being fast, rather than try to
* hand-optimized something specific.
*/
if (zerobuffer[0] != 0 ||
memcmp(zerobuffer, zerobuffer + 1, blockrun - 1)) {
int all_zeros = (zerobuffer[0] == 0) &&
(0 == memcmp( zerobuffer, zerobuffer+1, blockrun-1 ));
if ( !all_zeros ) {
memcpy(client->mapped+from, zerobuffer, blockrun);
bitset_set_range(map, from, blockrun);
server_dirty(client->serve, from, blockrun);