qemu-img: Change check_empty_sectors() to byte-based

Continue on the quest to make more things byte-based instead of
sector-based.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Eric Blake 2017-10-11 22:47:13 -05:00 committed by Kevin Wolf
parent 0608e40e8e
commit c41508edc6
1 changed files with 15 additions and 12 deletions

View File

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