vvfat: unify and correct computation of sector count

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>
This commit is contained in:
Paolo Bonzini 2011-10-05 09:12:06 +02:00 committed by Kevin Wolf
parent aad37c06dd
commit 5a742b5557

View File

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