vvfat: unify and correct computation of sector count
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 5 Oct 2011 07:12:06 +0000 (09:12 +0200)
committerKevin Wolf <kwolf@redhat.com>
Fri, 4 Nov 2011 15:27:07 +0000 (16:27 +0100)
The sector count is stored in the partition and hence must not include the
sectors before its start.  At the same time, remove the useless special
casing for 1.44 MB floppies.  This fixes fsck on VVFAT hard disks,
which otherwise tries to seek past the end of the disk.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/vvfat.c

index 1f7cc48fe5d94b9083bbf961ba6ff18b3d5a999c..3e7b40786fee33c8668cef3fe9f56e28d9339d66 100644 (file)
@@ -1026,8 +1026,6 @@ DLOG(if (stderr == NULL) {
        bs->cyls = 80; bs->heads = 2; bs->secs = 36;
     }
 
-    s->sector_count=bs->cyls*bs->heads*bs->secs;
-
     if (strstr(dirname, ":32:")) {
        fprintf(stderr, "Big fat greek warning: FAT32 has not been tested. You are welcome to do so!\n");
        s->fat_type = 32;
@@ -1035,9 +1033,11 @@ DLOG(if (stderr == NULL) {
        s->fat_type = 16;
     } else if (strstr(dirname, ":12:")) {
        s->fat_type = 12;
-       s->sector_count=2880;
+       bs->secs = 18;
     }
 
+    s->sector_count=bs->cyls*bs->heads*bs->secs-(s->first_sectors_number-1);
+
     if (strstr(dirname, ":rw:")) {
        if (enable_write_target(s))
            return -1;