Commit c41508ed authored by Eric Blake's avatar Eric Blake Committed by Kevin Wolf
Browse files

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: default avatarEric Blake <eblake@redhat.com>
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 0608e40e
Loading
Loading
Loading
Loading
+15 −12
Original line number Diff line number Diff line
@@ -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;
    }

@@ -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) {
@@ -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;