Commit d15a771da15513560371443bd361abbcf51f70b8
1 parent
a9465922
qcow2 is now used for '-snapshot' - keep BlockDriverState.total_sectors
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2094 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
7 additions
and
8 deletions
block.c
| ... | ... | @@ -296,7 +296,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, |
| 296 | 296 | bdrv_delete(bs1); |
| 297 | 297 | |
| 298 | 298 | get_tmp_filename(tmp_filename, sizeof(tmp_filename)); |
| 299 | - if (bdrv_create(&bdrv_qcow, tmp_filename, | |
| 299 | + if (bdrv_create(&bdrv_qcow2, tmp_filename, | |
| 300 | 300 | total_size, filename, 0) < 0) { |
| 301 | 301 | return -1; |
| 302 | 302 | } |
| ... | ... | @@ -335,7 +335,9 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, |
| 335 | 335 | qemu_free(bs->opaque); |
| 336 | 336 | return ret; |
| 337 | 337 | } |
| 338 | - | |
| 338 | + if (drv->bdrv_getlength) { | |
| 339 | + bs->total_sectors = bdrv_getlength(bs) >> SECTOR_BITS; | |
| 340 | + } | |
| 339 | 341 | #ifndef _WIN32 |
| 340 | 342 | if (bs->is_temporary) { |
| 341 | 343 | unlink(filename); |
| ... | ... | @@ -647,11 +649,7 @@ int64_t bdrv_getlength(BlockDriverState *bs) |
| 647 | 649 | |
| 648 | 650 | void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr) |
| 649 | 651 | { |
| 650 | - int64_t size; | |
| 651 | - size = bdrv_getlength(bs); | |
| 652 | - if (size < 0) | |
| 653 | - size = 0; | |
| 654 | - *nb_sectors_ptr = size >> SECTOR_BITS; | |
| 652 | + *nb_sectors_ptr = bs->total_sectors; | |
| 655 | 653 | } |
| 656 | 654 | |
| 657 | 655 | /* force a given boot sector. */ | ... | ... |
block_int.h
| ... | ... | @@ -73,7 +73,8 @@ struct BlockDriver { |
| 73 | 73 | }; |
| 74 | 74 | |
| 75 | 75 | struct BlockDriverState { |
| 76 | - int64_t total_sectors; /* XXX: will be suppressed */ | |
| 76 | + int64_t total_sectors; /* if we are reading a disk image, give its | |
| 77 | + size in sectors */ | |
| 77 | 78 | int read_only; /* if true, the media is read only */ |
| 78 | 79 | int inserted; /* if true, the media is present */ |
| 79 | 80 | int removable; /* if true, the media can be removed */ | ... | ... |