block: do not use ->total_sectors in bdrv_co_is_allocated

This is more robust when the device has removable media.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
master
Paolo Bonzini 2013-09-04 19:00:23 +02:00 committed by Stefan Hajnoczi
parent bdad13b9de
commit 617ccb466e
1 changed files with 7 additions and 1 deletions

View File

@ -3065,9 +3065,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;
}