This is more robust when the device has removable media.
Signed-off-by: Paolo Bonzini <[email protected]>
---
block.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/block.c b/block.c
index fc5ea56..bef7d37 100644
--- a/block.c
+++ b/block.c
@@ -2991,9 +2991,15 @@ static int coroutine_fn
bdrv_co_is_allocated(BlockDriverState *bs,
int64_t sector_num,
int nb_sectors, int *pnum)
{
+ int64_t length;
int64_t n;
- if (sector_num >= bs->total_sectors) {
+ length = bdrv_getlength(bs);
+ if (length < 0) {
+ return length;
+ }
+
+ if (sector_num >= (length >> BDRV_SECTOR_BITS)) {
*pnum = 0;
return 0;
}
--
1.8.3.1