qemu-io: fix the alloc command
Because sector_num is not updated, the loop would either go on forever or return garbage. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8655d2de0a
commit
cc785c349d
10
qemu-io.c
10
qemu-io.c
@ -1560,7 +1560,7 @@ out:
|
|||||||
|
|
||||||
static int alloc_f(int argc, char **argv)
|
static int alloc_f(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int64_t offset;
|
int64_t offset, sector_num;
|
||||||
int nb_sectors, remaining;
|
int nb_sectors, remaining;
|
||||||
char s1[64];
|
char s1[64];
|
||||||
int num, sum_alloc;
|
int num, sum_alloc;
|
||||||
@ -1581,12 +1581,18 @@ static int alloc_f(int argc, char **argv)
|
|||||||
|
|
||||||
remaining = nb_sectors;
|
remaining = nb_sectors;
|
||||||
sum_alloc = 0;
|
sum_alloc = 0;
|
||||||
|
sector_num = offset >> 9;
|
||||||
while (remaining) {
|
while (remaining) {
|
||||||
ret = bdrv_is_allocated(bs, offset >> 9, nb_sectors, &num);
|
ret = bdrv_is_allocated(bs, sector_num, remaining, &num);
|
||||||
|
sector_num += num;
|
||||||
remaining -= num;
|
remaining -= num;
|
||||||
if (ret) {
|
if (ret) {
|
||||||
sum_alloc += num;
|
sum_alloc += num;
|
||||||
}
|
}
|
||||||
|
if (num == 0) {
|
||||||
|
nb_sectors -= remaining;
|
||||||
|
remaining = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cvtstr(offset, s1, sizeof(s1));
|
cvtstr(offset, s1, sizeof(s1));
|
||||||
|
Loading…
Reference in New Issue
Block a user