Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sysinst Deal with manualy set disk geometries more ...
details: https://anonhg.NetBSD.org/src/rev/a9fc6eacccc1
branches: trunk
changeset: 457322:a9fc6eacccc1
user: martin <martin%NetBSD.org@localhost>
date: Wed Jun 19 17:32:31 2019 +0000
description:
Deal with manualy set disk geometries more carefully to avoid a division
by zero.
diffstat:
usr.sbin/sysinst/arch/i386/md.c | 17 ++++++++---------
usr.sbin/sysinst/mbr.c | 28 +++++++++++++++++++---------
usr.sbin/sysinst/mbr.h | 4 ++--
3 files changed, 29 insertions(+), 20 deletions(-)
diffs (134 lines):
diff -r e158ed93d246 -r a9fc6eacccc1 usr.sbin/sysinst/arch/i386/md.c
--- a/usr.sbin/sysinst/arch/i386/md.c Wed Jun 19 16:14:07 2019 +0000
+++ b/usr.sbin/sysinst/arch/i386/md.c Wed Jun 19 17:32:31 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.16 2019/06/17 14:18:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.17 2019/06/19 17:32:31 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -533,7 +533,8 @@
if (nip == NULL || nip->ni_nmatches == 0) {
nogeom:
if (nip != NULL)
- msg_display(MSG_nobiosgeom, pm->dlcyl, pm->dlhead, pm->dlsec);
+ msg_display(MSG_nobiosgeom, pm->dlcyl, pm->dlhead,
+ pm->dlsec);
if (guess_biosgeom_from_parts(parts, &cyl, &head, &sec) >= 0
&& nip != NULL)
msg_display_add(MSG_biosguess, cyl, head, sec);
@@ -571,13 +572,11 @@
}
}
if (biosdisk == NULL) {
- if (nip != NULL) {
- set_bios_geom(parts, cyl, head, sec);
- } else {
- *bcyl = cyl;
- *bhead = head;
- *bsec = sec;
- }
+ *bcyl = cyl;
+ *bhead = head;
+ *bsec = sec;
+ if (nip != NULL)
+ set_bios_geom(parts, bcyl, bhead, bsec);
} else {
*bcyl = biosdisk->bi_cyl;
*bhead = biosdisk->bi_head;
diff -r e158ed93d246 -r a9fc6eacccc1 usr.sbin/sysinst/mbr.c
--- a/usr.sbin/sysinst/mbr.c Wed Jun 19 16:14:07 2019 +0000
+++ b/usr.sbin/sysinst/mbr.c Wed Jun 19 17:32:31 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mbr.c,v 1.13 2019/06/15 08:20:33 martin Exp $ */
+/* $NetBSD: mbr.c,v 1.14 2019/06/19 17:32:31 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -243,7 +243,7 @@
msg_display(MSG_nobiosgeom, pm->dlcyl, pm->dlhead, pm->dlsec);
if (guess_biosgeom_from_parts(parts, &cyl, &head, &sec) >= 0)
msg_display_add(MSG_biosguess, cyl, head, sec);
- set_bios_geom(parts, cyl, head, sec);
+ set_bios_geom(parts, &cyl, &head, &sec);
if (parts->pscheme->change_disk_geom)
parts->pscheme->change_disk_geom(parts, cyl, head, sec);
@@ -267,7 +267,7 @@
* store in globals.
*/
void
-set_bios_geom(struct disk_partitions *parts, int cyl, int head, int sec)
+set_bios_geom(struct disk_partitions *parts, int *cyl, int *head, int *sec)
{
char res[80];
int bsec, bhead, bcyl;
@@ -279,13 +279,13 @@
msg_display_add(MSG_setbiosgeom);
do {
- snprintf(res, 80, "%d", sec);
+ snprintf(res, 80, "%d", *sec);
msg_prompt_add(MSG_sectors, res, res, 80);
bsec = atoi(res);
} while (bsec <= 0 || bsec > MAXSECTOR);
do {
- snprintf(res, 80, "%d", head);
+ snprintf(res, 80, "%d", *head);
msg_prompt_add(MSG_heads, res, res, 80);
bhead = atoi(res);
} while (bhead <= 0 || bhead > MAXHEAD);
@@ -297,7 +297,10 @@
bcyl = MAXCYL;
pm->max_chs = (unsigned long)bcyl * bhead * bsec;
pm->current_cylsize = bhead * bsec;
- parts->pscheme->change_disk_geom(parts, cyl, head, sec);
+ parts->pscheme->change_disk_geom(parts, bcyl, bhead, bsec);
+ *cyl = bcyl;
+ *head = bhead;
+ *sec = bsec;
}
static int
@@ -915,12 +918,19 @@
{
struct mbr_disk_partitions *parts =
(struct mbr_disk_partitions *)new_state;
- unsigned long bsec = parts->geo_sec,
- bhead = parts->ext_ptn_alignment / bsec,
- bcyl;
+ unsigned long bsec, bhead, bcyl;
daddr_t t;
+ assert(parts->geo_sec != 0);
+ if (parts->geo_sec != 0) {
+ bsec = parts->geo_sec;
+ bhead = parts->ext_ptn_alignment / bsec;
+ } else {
+ bsec = MAXSECTOR;
+ bhead = MAXHEAD;
+ }
t = bsec * bhead;
+ assert(t != 0);
if ((daddr_t)(1UL<<10) * t <= parts->dp.disk_size)
bcyl = (1UL<<10) - 1;
else
diff -r e158ed93d246 -r a9fc6eacccc1 usr.sbin/sysinst/mbr.h
--- a/usr.sbin/sysinst/mbr.h Wed Jun 19 16:14:07 2019 +0000
+++ b/usr.sbin/sysinst/mbr.h Wed Jun 19 17:32:31 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mbr.h,v 1.2 2019/06/12 06:20:17 martin Exp $ */
+/* $NetBSD: mbr.h,v 1.3 2019/06/19 17:32:31 martin Exp $ */
/*
* Copyright 1997, 1988 Piermont Information Systems Inc.
@@ -99,7 +99,7 @@
int guess_biosgeom_from_parts(struct disk_partitions*, int *, int *, int *);
bool set_bios_geom_with_mbr_guess(struct disk_partitions*);
-void set_bios_geom(struct disk_partitions *, int cyl, int head, int sec);
+void set_bios_geom(struct disk_partitions *, int *cyl, int *head, int *sec);
int otherpart(int);
int ourpart(int);
void edit_ptn_bounds(void);
Home |
Main Index |
Thread Index |
Old Index