summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-07-14 23:01:01 +0200
committercinap_lenrek <cinap_lenrek@localhost>2011-07-14 23:01:01 +0200
commit4ac8429d1154510ba47b346ad5c2a04ed28acdb0 (patch)
tree285ea5be4c15db63bcac92e818ec3ba50bbc71e2
parent7dfdb696a68fc9ef02a9d4877475f2206dec1d85 (diff)
downloadplan9front-4ac8429d1154510ba47b346ad5c2a04ed28acdb0.tar.xz
fdisk: use lba values in fdisk when writing partition not possibly rounded cylinders (because we might guessed the disk geometry wrong)
libdisk: make partition geometry detection work
-rw-r--r--sys/src/cmd/disk/prep/fdisk.c18
-rw-r--r--sys/src/libdisk/disk.c3
2 files changed, 9 insertions, 12 deletions
diff --git a/sys/src/cmd/disk/prep/fdisk.c b/sys/src/cmd/disk/prep/fdisk.c
index 6903d5adc..1998cef62 100644
--- a/sys/src/cmd/disk/prep/fdisk.c
+++ b/sys/src/cmd/disk/prep/fdisk.c
@@ -405,7 +405,7 @@ mkpart(char *name, int primary, vlong lba, vlong size, Tentry *t)
p->changed = 0;
p->start = lba/sec2cyl;
- p->end = (lba+size)/sec2cyl;
+ p->end = (lba+size+sec2cyl-1)/sec2cyl;
p->ctlstart = lba;
p->ctlend = lba+size;
p->lba = lba;
@@ -1028,7 +1028,7 @@ wrextend(Edit *edit, int i, vlong xbase, vlong startlba, vlong *endlba)
p = (Dospart*)edit->part[i];
if(p->primary){
- *endlba = (vlong)p->start*sec2cyl;
+ *endlba = (vlong)p->ctlstart;
goto Finish;
}
@@ -1037,15 +1037,15 @@ wrextend(Edit *edit, int i, vlong xbase, vlong startlba, vlong *endlba)
tp = table.entry;
ep = tp+NTentry;
- ni = wrextend(edit, i+1, xbase, p->end*sec2cyl, endlba);
+ ni = wrextend(edit, i+1, xbase, p->ctlend, endlba);
*tp = p->Tentry;
- wrtentry(disk, tp, p->type, startlba, startlba+disk->s, p->end*sec2cyl);
+ wrtentry(disk, tp, p->type, startlba, startlba+disk->s, p->ctlend);
tp++;
- if(p->end*sec2cyl != *endlba){
+ if(p->ctlend != *endlba){
memset(tp, 0, sizeof *tp);
- wrtentry(disk, tp, TypeEXTENDED, xbase, p->end*sec2cyl, *endlba);
+ wrtentry(disk, tp, TypeEXTENDED, xbase, p->ctlend, *endlba);
tp++;
}
@@ -1081,14 +1081,14 @@ wrpart(Edit *edit)
if(p->start == 0)
s = disk->s;
else
- s = p->start*sec2cyl;
+ s = p->ctlstart;
if(p->primary) {
*tp = p->Tentry;
- wrtentry(disk, tp, p->type, 0, s, p->end*sec2cyl);
+ wrtentry(disk, tp, p->type, 0, s, p->ctlend);
tp++;
i++;
} else {
- ni = wrextend(edit, i, p->start*sec2cyl, p->start*sec2cyl, &endlba);
+ ni = wrextend(edit, i, p->ctlstart, p->ctlstart, &endlba);
memset(tp, 0, sizeof *tp);
if(endlba >= 1024*sec2cyl)
t = TypeEXTHUGE;
diff --git a/sys/src/libdisk/disk.c b/sys/src/libdisk/disk.c
index 94cecea1e..86661a2b0 100644
--- a/sys/src/libdisk/disk.c
+++ b/sys/src/libdisk/disk.c
@@ -63,9 +63,6 @@ partitiongeometry(Disk *disk)
uchar buf[512];
Table *t;
- if(disk->c == 0 || disk->h == 0 || disk->s == 0)
- return -1;
-
t = (Table*)(buf + Toffset);
/*