mirror of https://gitee.com/openkylin/qemu.git
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:
parent
0608e40e8e
commit
c41508edc6
27
qemu-img.c
27
qemu-img.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue