The following expression is incorrect because blk_pread_nonzeroes() deals in units of bytes, not sectors:
bytes = MIN(size - offset, BDRV_REQUEST_MAX_SECTORS) ^^^^^^^ BDRV_REQUEST_MAX_BYTES is the appropriate constant. Fixes: a4b15a8b9ef2 ("pflash: Only read non-zero parts of backend image") Cc: Xiang Zheng <zhengxia...@huawei.com> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> --- hw/block/block.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/block/block.c b/hw/block/block.c index 9f52ee6e72..ff503002aa 100644 --- a/hw/block/block.c +++ b/hw/block/block.c @@ -30,7 +30,7 @@ static int blk_pread_nonzeroes(BlockBackend *blk, hwaddr size, void *buf) BlockDriverState *bs = blk_bs(blk); for (;;) { - bytes = MIN(size - offset, BDRV_REQUEST_MAX_SECTORS); + bytes = MIN(size - offset, BDRV_REQUEST_MAX_BYTES); if (bytes <= 0) { return 0; } -- 2.43.0