Loading qemu-img.c +15 −12 Original line number Diff line number Diff line Loading @@ -1203,30 +1203,29 @@ static int64_t sectors_to_bytes(int64_t sectors) * an error message. * * @param blk: BlockBackend for the image * @param sect_num: Number of first sector to check * @param sect_count: Number of sectors to check * @param offset: Starting offset to check * @param bytes: Number of bytes to check * @param filename: Name of disk file we are checking (logging purpose) * @param buffer: Allocated buffer for storing read data * @param quiet: Flag for quiet mode */ static int check_empty_sectors(BlockBackend *blk, int64_t sect_num, int sect_count, const char *filename, static int check_empty_sectors(BlockBackend *blk, int64_t offset, int64_t bytes, const char *filename, uint8_t *buffer, bool quiet) { int ret = 0; int64_t idx; ret = blk_pread(blk, sect_num << BDRV_SECTOR_BITS, buffer, sect_count << BDRV_SECTOR_BITS); ret = blk_pread(blk, offset, buffer, bytes); if (ret < 0) { error_report("Error while reading offset %" PRId64 " of %s: %s", sectors_to_bytes(sect_num), filename, strerror(-ret)); offset, filename, strerror(-ret)); return 4; } idx = find_nonzero(buffer, sect_count * BDRV_SECTOR_SIZE); idx = find_nonzero(buffer, bytes); if (idx >= 0) { qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n", sectors_to_bytes(sect_num) + idx); offset + idx); return 1; } Loading Loading @@ -1471,10 +1470,12 @@ static int img_compare(int argc, char **argv) } else { nb_sectors = MIN(nb_sectors, IO_BUF_SIZE >> BDRV_SECTOR_BITS); if (allocated1) { ret = check_empty_sectors(blk1, sector_num, nb_sectors, ret = check_empty_sectors(blk1, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename1, buf1, quiet); } else { ret = check_empty_sectors(blk2, sector_num, nb_sectors, ret = check_empty_sectors(blk2, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename2, buf1, quiet); } if (ret) { Loading Loading @@ -1519,7 +1520,9 @@ static int img_compare(int argc, char **argv) nb_sectors = count >> BDRV_SECTOR_BITS; if (ret & BDRV_BLOCK_ALLOCATED && !(ret & BDRV_BLOCK_ZERO)) { nb_sectors = MIN(nb_sectors, IO_BUF_SIZE >> BDRV_SECTOR_BITS); ret = check_empty_sectors(blk_over, sector_num, nb_sectors, ret = check_empty_sectors(blk_over, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename_over, buf1, quiet); if (ret) { goto out; Loading Loading
qemu-img.c +15 −12 Original line number Diff line number Diff line Loading @@ -1203,30 +1203,29 @@ static int64_t sectors_to_bytes(int64_t sectors) * an error message. * * @param blk: BlockBackend for the image * @param sect_num: Number of first sector to check * @param sect_count: Number of sectors to check * @param offset: Starting offset to check * @param bytes: Number of bytes to check * @param filename: Name of disk file we are checking (logging purpose) * @param buffer: Allocated buffer for storing read data * @param quiet: Flag for quiet mode */ static int check_empty_sectors(BlockBackend *blk, int64_t sect_num, int sect_count, const char *filename, static int check_empty_sectors(BlockBackend *blk, int64_t offset, int64_t bytes, const char *filename, uint8_t *buffer, bool quiet) { int ret = 0; int64_t idx; ret = blk_pread(blk, sect_num << BDRV_SECTOR_BITS, buffer, sect_count << BDRV_SECTOR_BITS); ret = blk_pread(blk, offset, buffer, bytes); if (ret < 0) { error_report("Error while reading offset %" PRId64 " of %s: %s", sectors_to_bytes(sect_num), filename, strerror(-ret)); offset, filename, strerror(-ret)); return 4; } idx = find_nonzero(buffer, sect_count * BDRV_SECTOR_SIZE); idx = find_nonzero(buffer, bytes); if (idx >= 0) { qprintf(quiet, "Content mismatch at offset %" PRId64 "!\n", sectors_to_bytes(sect_num) + idx); offset + idx); return 1; } Loading Loading @@ -1471,10 +1470,12 @@ static int img_compare(int argc, char **argv) } else { nb_sectors = MIN(nb_sectors, IO_BUF_SIZE >> BDRV_SECTOR_BITS); if (allocated1) { ret = check_empty_sectors(blk1, sector_num, nb_sectors, ret = check_empty_sectors(blk1, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename1, buf1, quiet); } else { ret = check_empty_sectors(blk2, sector_num, nb_sectors, ret = check_empty_sectors(blk2, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename2, buf1, quiet); } if (ret) { Loading Loading @@ -1519,7 +1520,9 @@ static int img_compare(int argc, char **argv) nb_sectors = count >> BDRV_SECTOR_BITS; if (ret & BDRV_BLOCK_ALLOCATED && !(ret & BDRV_BLOCK_ZERO)) { nb_sectors = MIN(nb_sectors, IO_BUF_SIZE >> BDRV_SECTOR_BITS); ret = check_empty_sectors(blk_over, sector_num, nb_sectors, ret = check_empty_sectors(blk_over, sector_num * BDRV_SECTOR_SIZE, nb_sectors * BDRV_SECTOR_SIZE, filename_over, buf1, quiet); if (ret) { goto out; Loading