qcow2 is now used for '-snapshot' - keep BlockDriverState.total_sectors
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 6 Aug 2006 13:35:09 +0000 (13:35 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 6 Aug 2006 13:35:09 +0000 (13:35 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2094 c046a42c-6fe2-441c-8c8c-71466251a162

block.c
block_int.h

diff --git a/block.c b/block.c
index 529dd4e..dacee2f 100644 (file)
--- a/block.c
+++ b/block.c
@@ -296,7 +296,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
         bdrv_delete(bs1);
         
         get_tmp_filename(tmp_filename, sizeof(tmp_filename));
-        if (bdrv_create(&bdrv_qcow, tmp_filename, 
+        if (bdrv_create(&bdrv_qcow2, tmp_filename, 
                         total_size, filename, 0) < 0) {
             return -1;
         }
@@ -335,7 +335,9 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
         qemu_free(bs->opaque);
         return ret;
     }
-
+    if (drv->bdrv_getlength) {
+        bs->total_sectors = bdrv_getlength(bs) >> SECTOR_BITS;
+    }
 #ifndef _WIN32
     if (bs->is_temporary) {
         unlink(filename);
@@ -647,11 +649,7 @@ int64_t bdrv_getlength(BlockDriverState *bs)
 
 void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr)
 {
-    int64_t size;
-    size = bdrv_getlength(bs);
-    if (size < 0)
-        size = 0;
-    *nb_sectors_ptr = size >> SECTOR_BITS;
+    *nb_sectors_ptr = bs->total_sectors;
 }
 
 /* force a given boot sector. */
index b3bc5b3..26cc4ff 100644 (file)
@@ -73,7 +73,8 @@ struct BlockDriver {
 };
 
 struct BlockDriverState {
-    int64_t total_sectors; /* XXX: will be suppressed */
+    int64_t total_sectors; /* if we are reading a disk image, give its
+                              size in sectors */
     int read_only; /* if true, the media is read only */
     int inserted; /* if true, the media is present */
     int removable; /* if true, the media can be removed */