@@ -1709,7 +1709,8 @@ typedef struct BdrvCoGetBlockStatusData {
* beyond the end of the disk image it will be clamped.
*
* If returned value is positive and BDRV_BLOCK_OFFSET_VALID bit is set, 'file'
- * points to the BDS which the sector range is allocated in.
+ * points to the BDS which the sector range is allocated in. If the block driver
+ * does not set 'file', it will be set to NULL.
*/
static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
int64_t sector_num,
@@ -1720,6 +1721,8 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
int64_t n;
int64_t ret, ret2;
+ *file = NULL;
+
total_sectors = bdrv_nb_sectors(bs);
if (total_sectors < 0) {
return total_sectors;
@@ -1744,7 +1747,6 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
return ret;
}
- *file = NULL;
bdrv_inc_in_flight(bs);
ret = bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum,
file);
*file should always be set (to NULL, if nothing else) instead of leaving it dangling sometimes. This should also be documented so callers can rely on this behavior. Signed-off-by: Max Reitz <mreitz@redhat.com> --- block/io.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)