Module Name: src
Committed By: martin
Date: Mon Jan 27 21:21:23 UTC 2020
Modified Files:
src/usr.sbin/sysinst: bsddisklabel.c defs.h disklabel.c disks.c gpt.c
label.c mbr.c menus.mi part_edit.c partitions.c partitions.h
partman.c sizemultname.c
src/usr.sbin/sysinst/arch/arc: md.c
src/usr.sbin/sysinst/arch/bebox: md.c
src/usr.sbin/sysinst/arch/cobalt: md.c
src/usr.sbin/sysinst/arch/evbarm: md.c
src/usr.sbin/sysinst/arch/evbmips: md.c
src/usr.sbin/sysinst/arch/evbppc: md.c
src/usr.sbin/sysinst/arch/hpcarm: md.c
src/usr.sbin/sysinst/arch/hpcmips: md.c
src/usr.sbin/sysinst/arch/hpcsh: md.c
src/usr.sbin/sysinst/arch/i386: md.c
src/usr.sbin/sysinst/arch/landisk: md.c
src/usr.sbin/sysinst/arch/ofppc: md.c
src/usr.sbin/sysinst/arch/playstation2: md.c
src/usr.sbin/sysinst/arch/prep: md.c
src/usr.sbin/sysinst/arch/sandpoint: md.c
src/usr.sbin/sysinst/arch/zaurus: md.c
Log Message:
Fix support for non-512-byte/sector disks again after I broke it when
introducing the abstract partition backends.
To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/usr.sbin/sysinst/bsddisklabel.c
cvs rdiff -u -r1.53 -r1.54 src/usr.sbin/sysinst/defs.h
cvs rdiff -u -r1.33 -r1.34 src/usr.sbin/sysinst/disklabel.c
cvs rdiff -u -r1.61 -r1.62 src/usr.sbin/sysinst/disks.c
cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/sysinst/gpt.c \
src/usr.sbin/sysinst/part_edit.c
cvs rdiff -u -r1.19 -r1.20 src/usr.sbin/sysinst/label.c
cvs rdiff -u -r1.29 -r1.30 src/usr.sbin/sysinst/mbr.c
cvs rdiff -u -r1.20 -r1.21 src/usr.sbin/sysinst/menus.mi
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/sysinst/partitions.c
cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/sysinst/partitions.h
cvs rdiff -u -r1.48 -r1.49 src/usr.sbin/sysinst/partman.c
cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/sysinst/sizemultname.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/arch/arc/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/bebox/md.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/arch/cobalt/md.c
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/sysinst/arch/evbarm/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/evbmips/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/evbppc/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/hpcarm/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/hpcmips/md.c
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/sysinst/arch/hpcsh/md.c
cvs rdiff -u -r1.28 -r1.29 src/usr.sbin/sysinst/arch/i386/md.c
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/sysinst/arch/landisk/md.c
cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/sysinst/arch/ofppc/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/playstation2/md.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/arch/prep/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/sandpoint/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/zaurus/md.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/sysinst/bsddisklabel.c
diff -u src/usr.sbin/sysinst/bsddisklabel.c:1.37 src/usr.sbin/sysinst/bsddisklabel.c:1.38
--- src/usr.sbin/sysinst/bsddisklabel.c:1.37 Fri Jan 24 07:31:15 2020
+++ src/usr.sbin/sysinst/bsddisklabel.c Mon Jan 27 21:21:21 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bsddisklabel.c,v 1.37 2020/01/24 07:31:15 martin Exp $ */
+/* $NetBSD: bsddisklabel.c,v 1.38 2020/01/27 21:21:21 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -622,7 +622,7 @@ set_ptn_size(menudesc *m, void *arg)
break;
}
mult = sizemult;
- new_size_val = parse_disk_pos(answer, &mult,
+ new_size_val = parse_disk_pos(answer, &mult, pm->sectorsize,
pm->dlcylsize, &extend);
if (strcmp(answer, dflt) == 0)
@@ -1634,7 +1634,7 @@ make_bsd_partitions(struct install_parti
if (pscheme == NULL)
return false;
parts = pscheme->create_new_for_disk(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (parts == NULL)
return false;
pm->parts = parts;
Index: src/usr.sbin/sysinst/defs.h
diff -u src/usr.sbin/sysinst/defs.h:1.53 src/usr.sbin/sysinst/defs.h:1.54
--- src/usr.sbin/sysinst/defs.h:1.53 Fri Jan 24 07:31:15 2020
+++ src/usr.sbin/sysinst/defs.h Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.53 2020/01/24 07:31:15 martin Exp $ */
+/* $NetBSD: defs.h,v 1.54 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -368,7 +368,7 @@ char machine[SSTRSIZE];
int ignorerror;
int ttysig_ignore;
pid_t ttysig_forward;
-int sizemult;
+uint sizemult;
extern const char *multname;
extern const char *err_outofmem;
int partman_go; /* run extended partition manager */
@@ -421,12 +421,16 @@ struct pm_devs {
*/
bool cur_system;
- /* Actual values for current disk - set by find_disks() or
- md_get_info() */
- int sectorsize, dlcyl, dlhead, dlsec, dlcylsize, current_cylsize;
- daddr_t dlsize;
+ /* Actual values for current disk geometry - set by find_disks() or
+ * md_get_info()
+ */
+ uint sectorsize, dlcyl, dlhead, dlsec, dlcylsize, current_cylsize;
+ /*
+ * Total size of the disk - in 'sectorsize' units (!)
+ */
+ daddr_t dlsize; /* total number of disk sectors */
- /* Area of disk we can allocate, start and size in disk sectors. */
+ /* Area of disk we can allocate, start and size in sectors. */
daddr_t ptstart, ptsize;
/* For some bootblocks we need to know the CHS addressable limit */
@@ -813,8 +817,8 @@ void add_rc_conf(const char *, ...) __pr
int del_rc_conf(const char *);
void add_sysctl_conf(const char *, ...) __printflike(1, 2);
void enable_rc_conf(void);
-void set_sizemult(uint secs);
-void set_default_sizemult(uint secs);
+void set_sizemult(daddr_t, uint bps);
+void set_default_sizemult(const char *disk, daddr_t unit, uint bps);
int check_lfs_progs(void);
void init_set_status(int);
void customise_sets(void);
@@ -913,7 +917,8 @@ bool pm_force_parts(struct pm_devs *);
daddr_t parse_disk_pos(
const char *, /* in: input string */
daddr_t *, /* in/out: multiplicator for return value */
- daddr_t, /* in: cylinder size in blocks */
+ daddr_t bps, /* in: sector size in bytes */
+ daddr_t, /* in: cylinder size in sectors */
bool *); /* NULL if "extend" is not supported, & of
* "extend" flag otherwise */
Index: src/usr.sbin/sysinst/disklabel.c
diff -u src/usr.sbin/sysinst/disklabel.c:1.33 src/usr.sbin/sysinst/disklabel.c:1.34
--- src/usr.sbin/sysinst/disklabel.c:1.33 Tue Jan 21 20:04:30 2020
+++ src/usr.sbin/sysinst/disklabel.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: disklabel.c,v 1.33 2020/01/21 20:04:30 martin Exp $ */
+/* $NetBSD: disklabel.c,v 1.34 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@ disklabel_init_default_alignment(struct
uint track)
{
if (track == 0)
- track = MEG / 512;
+ track = MEG / parts->dp.bytes_per_sector;
if (dl_maxpart == 0)
dl_maxpart = getmaxpartitions();
@@ -82,7 +82,8 @@ disklabel_init_default_alignment(struct
/* Use 1MB alignemnt for large (>128GB) disks */
if (parts->dp.disk_size > HUGE_DISK_SIZE) {
parts->ptn_alignment = 2048;
- } else if (parts->dp.disk_size > TINY_DISK_SIZE) {
+ } else if (parts->dp.disk_size > TINY_DISK_SIZE ||
+ parts->dp.bytes_per_sector > 512) {
parts->ptn_alignment = 64;
} else {
parts->ptn_alignment = 1;
@@ -107,9 +108,11 @@ disklabel_change_geom(struct disk_partit
disklabel_init_default_alignment(parts, nhead * nsec);
if (ncyl*nhead*nsec <= TINY_DISK_SIZE)
- set_default_sizemult(1);
+ set_default_sizemult(arg->disk,
+ arg->bytes_per_sector, arg->bytes_per_sector);
else
- set_default_sizemult(MEG/512);
+ set_default_sizemult(arg->disk, MEG,
+ arg->bytes_per_sector);
return true;
}
@@ -134,10 +137,11 @@ disklabel_non_bootable(const char *disk)
static struct disk_partitions *
disklabel_parts_new(const char *dev, daddr_t start, daddr_t len,
- daddr_t total_size, bool is_boot_drive, struct disk_partitions *parent)
+ bool is_boot_drive, struct disk_partitions *parent)
{
struct disklabel_disk_partitions *parts;
struct disk_geom geo;
+ daddr_t total_size;
if (!get_disk_geom(dev, &geo))
return NULL;
@@ -146,10 +150,11 @@ disklabel_parts_new(const char *dev, dad
if (parts == NULL)
return NULL;
- if (len > disklabel_parts.size_limit)
- len = disklabel_parts.size_limit;
- if (total_size > disklabel_parts.size_limit)
- total_size = disklabel_parts.size_limit;
+ total_size = geo.dg_secperunit;
+ if (len*(geo.dg_secsize/512) > disklabel_parts.size_limit)
+ len = disklabel_parts.size_limit/(geo.dg_secsize/512);
+ if (total_size*(geo.dg_secsize/512) > disklabel_parts.size_limit)
+ total_size = disklabel_parts.size_limit/(geo.dg_secsize/512);
parts->l.d_ncylinders = geo.dg_ncylinders;
parts->l.d_ntracks = geo.dg_ntracks;
@@ -161,6 +166,7 @@ disklabel_parts_new(const char *dev, dad
parts->dp.disk = strdup(dev);
parts->dp.disk_start = start;
parts->dp.disk_size = parts->dp.free_space = len;
+ parts->dp.bytes_per_sector = parts->l.d_secsize;
disklabel_init_default_alignment(parts, parts->l.d_secpercyl);
parts->dp.parent = parent;
@@ -185,7 +191,7 @@ disklabel_parts_new(const char *dev, dad
}
static struct disk_partitions *
-disklabel_parts_read(const char *disk, daddr_t start, daddr_t len,
+disklabel_parts_read(const char *disk, daddr_t start, daddr_t len, size_t bps,
const struct disk_partitioning_scheme *scheme)
{
int fd;
@@ -246,6 +252,8 @@ disklabel_parts_read(const char *disk, d
parts->dp.disk = strdup(disk);
parts->dp.disk_start = start;
parts->dp.disk_size = parts->dp.free_space = len;
+ parts->l.d_secsize = bps;
+ parts->dp.bytes_per_sector = bps;
disklabel_init_default_alignment(parts, parts->l.d_secpercyl);
for (int part = 0; part < parts->l.d_npartitions; part++) {
@@ -1013,13 +1021,13 @@ disklabel_add_partition(struct disk_part
struct disk_part_info data = *info;
if (disklabel_get_free_spaces_internal(parts, &space, 1, 1, 1,
- info->start, -1) < 1) {
+ data.start, -1) < 1) {
if (err_msg)
*err_msg = msg_string(MSG_No_free_space);
return NO_PART;
}
if (space.start <= (parts->dp.disk_start + LABELSECTOR) &&
- need_to_skip_past_label(info)) {
+ need_to_skip_past_label(&data)) {
daddr_t new_start = roundup(parts->dp.disk_start + LABELSECTOR,
parts->ptn_alignment);
daddr_t off = new_start - space.start;
@@ -1040,12 +1048,12 @@ disklabel_add_partition(struct disk_part
for (new_id = 0, i = 0; i < parts->l.d_npartitions; i++) {
if (parts->l.d_partitions[i].p_size > 0)
new_id++;
- if (info->nat_type->generic_ptype != PT_root &&
- info->nat_type->generic_ptype != PT_swap && i < RAW_PART)
+ if (data.nat_type->generic_ptype != PT_root &&
+ data.nat_type->generic_ptype != PT_swap && i < RAW_PART)
continue;
- if (i == 0 && info->nat_type->generic_ptype != PT_root)
+ if (i == 0 && data.nat_type->generic_ptype != PT_root)
continue;
- if (i == 1 && info->nat_type->generic_ptype != PT_swap)
+ if (i == 1 && data.nat_type->generic_ptype != PT_swap)
continue;
if (i == RAW_PART)
continue;
@@ -1072,13 +1080,13 @@ disklabel_add_partition(struct disk_part
parts->l.d_partitions[part].p_offset = data.start;
parts->l.d_partitions[part].p_size = data.size;
parts->l.d_partitions[part].p_fstype =
- dl_part_type_from_generic(info->nat_type);
- if (info->last_mounted && info->last_mounted[0])
- strlcpy(parts->last_mounted[part], info->last_mounted,
+ dl_part_type_from_generic(data.nat_type);
+ if (data.last_mounted && data.last_mounted[0])
+ strlcpy(parts->last_mounted[part], data.last_mounted,
sizeof(parts->last_mounted[part]));
else
parts->last_mounted[part][0] = 0;
- parts->fs_sub_type[part] = info->fs_sub_type;
+ parts->fs_sub_type[part] = data.fs_sub_type;
parts->dp.num_part++;
if (data.size <= parts->dp.free_space)
parts->dp.free_space -= data.size;
Index: src/usr.sbin/sysinst/disks.c
diff -u src/usr.sbin/sysinst/disks.c:1.61 src/usr.sbin/sysinst/disks.c:1.62
--- src/usr.sbin/sysinst/disks.c:1.61 Fri Jan 24 07:31:15 2020
+++ src/usr.sbin/sysinst/disks.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.61 2020/01/24 07:31:15 martin Exp $ */
+/* $NetBSD: disks.c,v 1.62 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -758,7 +758,7 @@ convert_scheme(struct pm_devs *p, bool i
return false;
new_parts = new_scheme->create_new_for_disk(p->diskdev,
- 0, p->dlsize, p->dlsize, is_boot_drive, NULL);
+ 0, p->dlsize, is_boot_drive, NULL);
if (new_parts == NULL)
return false;
@@ -904,6 +904,7 @@ find_disks(const char *doingwhat, bool a
partitions_read_disk(
pm_i->diskdev,
disk->dd_totsec,
+ disk->dd_secsize,
disk->dd_no_mbr);
}
}
@@ -928,11 +929,11 @@ find_disks(const char *doingwhat, bool a
pm->dlsec = disk->dd_sec;
pm->dlsize = disk->dd_totsec;
if (pm->dlsize == 0)
- pm->dlsize = disk->dd_cyl * disk->dd_head
- * disk->dd_sec;
+ pm->dlsize =
+ disk->dd_cyl * disk->dd_head * disk->dd_sec;
pm->parts = partitions_read_disk(pm->diskdev,
- disk->dd_totsec, disk->dd_no_mbr);
+ pm->dlsize, disk->dd_secsize, disk->dd_no_mbr);
again:
@@ -960,8 +961,8 @@ again:
pm->dlsec = disk->dd_sec;
pm->dlsize = disk->dd_totsec;
if (pm->dlsize == 0)
- pm->dlsize = disk->dd_cyl * disk->dd_head
- * disk->dd_sec;
+ pm->dlsize =
+ disk->dd_cyl * disk->dd_head * disk->dd_sec;
if (pm->parts && pm->parts->pscheme->size_limit != 0
&& pm->dlsize > pm->parts->pscheme->size_limit
@@ -970,7 +971,7 @@ again:
char size[5], limit[5];
humanize_number(size, sizeof(size),
- (uint64_t)pm->dlsize * 512U,
+ (uint64_t)pm->dlsize * pm->sectorsize,
"", HN_AUTOSCALE, HN_B | HN_NOSPACE
| HN_DECIMAL);
@@ -1461,7 +1462,9 @@ find_part_by_name(const char *name, stru
if (strcmp(disks[n].dd_name, pm->diskdev) == 0)
continue;
ps = partitions_read_disk(disks[n].dd_name,
- disks[n].dd_totsec, disks[n].dd_no_mbr);
+ disks[n].dd_totsec,
+ disks[n].dd_secsize,
+ disks[n].dd_no_mbr);
if (ps == NULL)
continue;
if (ps->pscheme->find_by_name == NULL)
@@ -2391,7 +2394,9 @@ select_partitions(struct selected_partit
continue;
ps = partitions_read_disk(disks[n].dd_name,
- disks[n].dd_totsec, disks[n].dd_no_mbr);
+ disks[n].dd_totsec,
+ disks[n].dd_secsize,
+ disks[n].dd_no_mbr);
if (ps == NULL)
continue;
data.all_parts[data.all_cnt++] = ps;
Index: src/usr.sbin/sysinst/gpt.c
diff -u src/usr.sbin/sysinst/gpt.c:1.15 src/usr.sbin/sysinst/gpt.c:1.16
--- src/usr.sbin/sysinst/gpt.c:1.15 Wed Jan 15 19:36:30 2020
+++ src/usr.sbin/sysinst/gpt.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: gpt.c,v 1.15 2020/01/15 19:36:30 martin Exp $ */
+/* $NetBSD: gpt.c,v 1.16 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -50,7 +50,7 @@ bool gpt_parts_check(void); /* check for
* gpt type -l | wc -l */
#define GPT_DEV_LEN 16 /* dkNN */
-#define GPT_PARTS_PER_SEC 4 /* a 512 byte sector hols 4 entries */
+#define GPT_PARTS_PER_SEC 4 /* a 512 byte sector holds 4 entries */
#define GPT_DEFAULT_MAX_PARTS 128
/* a usable label will be short, so we can get away with an arbitrary limit */
@@ -255,7 +255,7 @@ update_part_from_wedge_info(struct gpt_d
}
static struct disk_partitions *
-gpt_read_from_disk(const char *dev, daddr_t start, daddr_t len,
+gpt_read_from_disk(const char *dev, daddr_t start, daddr_t len, size_t bps,
const struct disk_partitioning_scheme *scheme)
{
char diskpath[MAXPATHLEN];
@@ -374,6 +374,7 @@ gpt_read_from_disk(const char *dev, dadd
parts->dp.disk_start = start;
parts->dp.disk_size = disk_size;
parts->dp.free_space = avail_size;
+ parts->dp.bytes_per_sector = bps;
parts->has_gpt = true;
fd = opendisk(parts->dp.disk, O_RDONLY, diskpath, sizeof(diskpath), 0);
@@ -446,16 +447,20 @@ gpt_cyl_size(const struct disk_partition
}
static struct disk_partitions *
-gpt_create_new(const char *disk, daddr_t start, daddr_t len, daddr_t total,
+gpt_create_new(const char *disk, daddr_t start, daddr_t len,
bool is_boot_drive, struct disk_partitions *parent)
{
struct gpt_disk_partitions *parts;
+ struct disk_geom geo;
if (start != 0) {
assert(0);
return NULL;
}
+ if (!get_disk_geom(disk, &geo))
+ return NULL;
+
parts = calloc(1, sizeof(*parts));
if (!parts)
return NULL;
@@ -468,6 +473,7 @@ gpt_create_new(const char *disk, daddr_t
parts->dp.disk_start = start;
parts->dp.disk_size = len;
+ parts->dp.bytes_per_sector = geo.dg_secsize;
parts->dp.free_space = len - start - parts->prologue - parts->epilogue;
parts->has_gpt = false;
Index: src/usr.sbin/sysinst/part_edit.c
diff -u src/usr.sbin/sysinst/part_edit.c:1.15 src/usr.sbin/sysinst/part_edit.c:1.16
--- src/usr.sbin/sysinst/part_edit.c:1.15 Mon Jan 20 21:26:35 2020
+++ src/usr.sbin/sysinst/part_edit.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: part_edit.c,v 1.15 2020/01/20 21:26:35 martin Exp $ */
+/* $NetBSD: part_edit.c,v 1.16 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -1189,7 +1189,7 @@ ask_outer_partsizes(struct disk_partitio
}
/* Default to MB, and use bios geometry for cylinder size */
- set_default_sizemult(MEG/512);
+ set_default_sizemult(parts->disk, MEG, parts->bytes_per_sector);
if (pm->current_cylsize == 0)
pm->current_cylsize = 16065; /* noone cares nowadays */
pm->ptstart = 0;
@@ -1394,7 +1394,8 @@ select_part_scheme(
if (dev->no_mbr && p->name == MSG_parttype_mbr)
continue;
#endif
- if (p->size_limit && dev->dlsize > p->size_limit) {
+ if (p->size_limit && dev->dlsize*(dev->sectorsize/512) >
+ p->size_limit) {
char buf[255], hum_lim[5];
humanize_number(hum_lim, sizeof(hum_lim),
@@ -1430,7 +1431,7 @@ select_part_scheme(
const char *p2 = msg_string(MSG_select_part_limit);
humanize_number(hum_lim, sizeof(hum_lim),
- (uint64_t)dev->dlsize*512, "",
+ (uint64_t)dev->dlsize*dev->sectorsize, "",
HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
const char *args[] = { dev->diskdev, hum_lim };
Index: src/usr.sbin/sysinst/label.c
diff -u src/usr.sbin/sysinst/label.c:1.19 src/usr.sbin/sysinst/label.c:1.20
--- src/usr.sbin/sysinst/label.c:1.19 Wed Jan 15 19:37:41 2020
+++ src/usr.sbin/sysinst/label.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: label.c,v 1.19 2020/01/15 19:37:41 martin Exp $ */
+/* $NetBSD: label.c,v 1.20 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Jonathan Stone
@@ -36,7 +36,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: label.c,v 1.19 2020/01/15 19:37:41 martin Exp $");
+__RCSID("$NetBSD: label.c,v 1.20 2020/01/27 21:21:22 martin Exp $");
#endif
#include <sys/types.h>
@@ -1142,10 +1142,10 @@ fmt_fspart_header(menudesc *menu, void *
if (pset->infos[ptn].flags & PUIFLG_CLONE_PARTS)
with_clone = true;
humanize_number(total, sizeof total,
- pset->parts->disk_size * 512,
+ pset->parts->disk_size * pset->parts->bytes_per_sector,
"", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
humanize_number(free_space, sizeof free_space,
- pset->cur_free_space * 512,
+ pset->cur_free_space * pset->parts->bytes_per_sector,
"", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
if (with_clone)
@@ -1983,7 +1983,8 @@ getpartoff(struct disk_partitions *parts
i = min;
localsizemult = 1;
} else {
- i = parse_disk_pos(isize, &localsizemult,
+ i = parse_disk_pos(isize, &localsizemult,
+ parts->bytes_per_sector,
parts->pscheme->get_cylinder_size(parts), NULL);
if (i < 0) {
errmsg = msg_string(MSG_invalid_sector_number);
@@ -2095,6 +2096,7 @@ getpartsize(struct disk_partitions *part
max_r = max;
} else {
i = parse_disk_pos(isize, &localsizemult,
+ parts->bytes_per_sector,
parts->pscheme->get_cylinder_size(parts), NULL);
if (localsizemult != sizemult)
max_r = max;
@@ -2147,6 +2149,7 @@ daddr_t
parse_disk_pos(
const char *str,
daddr_t *localsizemult,
+ daddr_t bps,
daddr_t cyl_size,
bool *extend_this)
{
@@ -2165,13 +2168,13 @@ parse_disk_pos(
if (*cp == 'G' || *cp == 'g') {
if (mult_found)
return -1;
- *localsizemult = GIG / 512;
+ *localsizemult = GIG / bps;
goto next;
}
if (*cp == 'M' || *cp == 'm') {
if (mult_found)
return -1;
- *localsizemult = MEG / 512;
+ *localsizemult = MEG / bps;
goto next;
}
if (*cp == 'c' || *cp == 'C') {
Index: src/usr.sbin/sysinst/mbr.c
diff -u src/usr.sbin/sysinst/mbr.c:1.29 src/usr.sbin/sysinst/mbr.c:1.30
--- src/usr.sbin/sysinst/mbr.c:1.29 Mon Jan 20 21:26:35 2020
+++ src/usr.sbin/sysinst/mbr.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: mbr.c,v 1.29 2020/01/20 21:26:35 martin Exp $ */
+/* $NetBSD: mbr.c,v 1.30 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -234,6 +234,67 @@ dump_mbr(mbr_info_t *m, const char *labe
}
#endif
+/*
+ * Like pread, but handles re-blocking for non 512 byte sector disks
+ */
+static ssize_t
+blockread(int fd, size_t secsize, void *buf, size_t nbytes, off_t offset)
+{
+ ssize_t nr;
+ off_t sector = offset / 512;
+ off_t offs = sector * (off_t)secsize;
+ off_t mod = offs & (secsize - 1);
+ off_t rnd = offs & ~(secsize - 1);
+ char *iobuf;
+
+ assert(nbytes <= 512);
+
+ if (secsize == 512)
+ return pread(fd, buf, nbytes, offset);
+
+ iobuf = malloc(secsize);
+ if (iobuf == NULL)
+ return -1;
+ nr = pread(fd, iobuf, secsize, rnd);
+ if (nr == (off_t)secsize)
+ memcpy(buf, &iobuf[mod], nbytes);
+ free(iobuf);
+
+ return nr == (off_t)secsize ? (off_t)nbytes : -1;
+}
+
+/*
+ * Same for pwrite
+ */
+static ssize_t
+blockwrite(int fd, size_t secsize, const void *buf, size_t nbytes,
+ off_t offset)
+{
+ ssize_t nr;
+ off_t sector = offset / secsize;
+ off_t offs = sector * (off_t)secsize;
+ off_t mod = offs & (secsize - 1);
+ off_t rnd = offs & ~(secsize - 1);
+ char *iobuf;
+
+ assert(nbytes <= 512);
+
+ if (secsize == 512)
+ return pwrite(fd, buf, nbytes, offset);
+
+ iobuf = malloc(secsize);
+ if (iobuf == NULL)
+ return -1;
+ nr = pread(fd, iobuf, secsize, rnd);
+ if (nr == (off_t)secsize) {
+ memcpy(&iobuf[mod], buf, nbytes);
+ nr = pwrite(fd, iobuf, secsize, rnd);
+ }
+ free(iobuf);
+
+ return nr == (off_t)secsize ? (off_t)nbytes : -1;
+}
+
static void
free_last_mounted(mbr_info_t *m)
{
@@ -466,7 +527,7 @@ valid_mbr(struct mbr_sector *mbrs)
}
static int
-read_mbr(const char *disk, mbr_info_t *mbri)
+read_mbr(const char *disk, size_t secsize, mbr_info_t *mbri)
{
struct mbr_partition *mbrp;
struct mbr_sector *mbrs = &mbri->mbr;
@@ -488,7 +549,7 @@ read_mbr(const char *disk, mbr_info_t *m
goto bad_mbr;
for (;;) {
- if (pread(fd, mbrs, sizeof *mbrs,
+ if (blockread(fd, secsize, mbrs, sizeof *mbrs,
(ext_base + next_ext) * (off_t)MBR_SECSIZE) - sizeof *mbrs != 0)
break;
@@ -597,7 +658,8 @@ read_mbr(const char *disk, mbr_info_t *m
}
static int
-write_mbr(const char *disk, mbr_info_t *mbri, int bsec, int bhead, int bcyl)
+write_mbr(const char *disk, size_t secsize, mbr_info_t *mbri, int bsec,
+ int bhead, int bcyl)
{
char diskpath[MAXPATHLEN];
int fd, i, ret = 0, bits = 0;
@@ -613,7 +675,8 @@ write_mbr(const char *disk, mbr_info_t *
dump_mbr(mbri, "write");
/* Open the disk. */
- fd = opendisk(disk, O_WRONLY, diskpath, sizeof(diskpath), 0);
+ fd = opendisk(disk, secsize == 512 ? O_WRONLY : O_RDWR,
+ diskpath, sizeof(diskpath), 0);
if (fd < 0)
return -1;
@@ -709,7 +772,7 @@ write_mbr(const char *disk, mbr_info_t *
}
mbrsec.mbr_magic = htole16(MBR_MAGIC);
- if (pwrite(fd, &mbrsec, sizeof mbrsec,
+ if (blockwrite(fd, secsize, &mbrsec, sizeof mbrsec,
sector * (off_t)MBR_SECSIZE) < 0) {
ret = -1;
break;
@@ -833,10 +896,11 @@ mbr_init_default_alignments(struct mbr_d
}
static struct disk_partitions *
-mbr_create_new(const char *disk, daddr_t start, daddr_t len, daddr_t total,
+mbr_create_new(const char *disk, daddr_t start, daddr_t len,
bool is_boot_drive, struct disk_partitions *parent)
{
struct mbr_disk_partitions *parts;
+ struct disk_geom geo;
assert(start == 0);
if (start != 0)
@@ -853,9 +917,18 @@ mbr_create_new(const char *disk, daddr_t
parts->dp.disk_start = start;
parts->dp.disk_size = len;
parts->dp.free_space = len-1;
+ parts->dp.bytes_per_sector = 512;
parts->geo_sec = MAXSECTOR;
parts->geo_head = MAXHEAD;
parts->geo_cyl = len/MAXHEAD/MAXSECTOR+1;
+
+ if (get_disk_geom(disk, &geo)) {
+ parts->geo_sec = geo.dg_nsectors;
+ parts->geo_head = geo.dg_ntracks;
+ parts->geo_cyl = geo.dg_ncylinders;
+ parts->dp.bytes_per_sector = geo.dg_secsize;
+ }
+
mbr_init_default_alignments(parts, 0);
return &parts->dp;
@@ -897,7 +970,7 @@ mbr_calc_free_space(struct mbr_disk_part
}
static struct disk_partitions *
-mbr_read_from_disk(const char *disk, daddr_t start, daddr_t len,
+mbr_read_from_disk(const char *disk, daddr_t start, daddr_t len, size_t bps,
const struct disk_partitioning_scheme *scheme)
{
struct mbr_disk_partitions *parts;
@@ -919,8 +992,9 @@ mbr_read_from_disk(const char *disk, dad
parts->geo_sec = MAXSECTOR;
parts->geo_head = MAXHEAD;
parts->geo_cyl = len/MAXHEAD/MAXSECTOR+1;
+ parts->dp.bytes_per_sector = bps;
mbr_init_default_alignments(parts, 0);
- if (read_mbr(disk, &parts->mbr) == -1) {
+ if (read_mbr(disk, parts->dp.bytes_per_sector, &parts->mbr) == -1) {
free(parts);
return NULL;
}
@@ -952,8 +1026,8 @@ mbr_write_to_disk(struct disk_partitions
else
bcyl = (unsigned long)(parts->dp.disk_size / t);
- return write_mbr(parts->dp.disk, &parts->mbr,
- bsec, bhead, bcyl) == 0;
+ return write_mbr(parts->dp.disk, parts->dp.bytes_per_sector,
+ &parts->mbr, bsec, bhead, bcyl) == 0;
}
static bool
@@ -969,7 +1043,8 @@ mbr_change_disk_geom(struct disk_partiti
mbr_init_default_alignments(parts, nhead * nsec);
if (parts->dp.disk_size <= TINY_DISK_SIZE) {
- set_default_sizemult(1);
+ set_default_sizemult(arg->disk,
+ parts->dp.bytes_per_sector, parts->dp.bytes_per_sector);
return true;
}
@@ -996,7 +1071,7 @@ mbr_change_disk_geom(struct disk_partiti
}
}
}
- set_default_sizemult(MEG/512);
+ set_default_sizemult(arg->disk, MEG, parts->dp.bytes_per_sector);
return true;
}
@@ -1757,7 +1832,7 @@ mbr_read_disklabel(struct disk_partition
if (!force_empty) {
myparts->dlabel = disklabel_parts.read_from_disk(
myparts->dp.disk, part.start, part.size,
- &disklabel_parts);
+ myparts->dp.bytes_per_sector, &disklabel_parts);
if (myparts->dlabel != NULL)
myparts->dlabel->parent = &myparts->dp;
}
@@ -1767,7 +1842,7 @@ mbr_read_disklabel(struct disk_partition
myparts->dlabel =
disklabel_parts.create_new_for_disk(
myparts->dp.disk, part.start, part.size,
- myparts->dp.disk_size, false, &myparts->dp);
+ false, &myparts->dp);
}
if (myparts->dlabel != NULL)
Index: src/usr.sbin/sysinst/menus.mi
diff -u src/usr.sbin/sysinst/menus.mi:1.20 src/usr.sbin/sysinst/menus.mi:1.21
--- src/usr.sbin/sysinst/menus.mi:1.20 Thu Jan 9 13:22:30 2020
+++ src/usr.sbin/sysinst/menus.mi Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: menus.mi,v 1.20 2020/01/09 13:22:30 martin Exp $ */
+/* $NetBSD: menus.mi,v 1.21 2020/01/27 21:21:22 martin Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -321,14 +321,18 @@ menu sizechoice, sub menu, y=0, title MS
menu->cursel = 2;
else if (sizemult == 1)
menu->cursel = 3;
- else if (sizemult == (GIG/512))
+ else if (sizemult == (GIG/pm->sectorsize))
menu->cursel = 0;
else
menu->cursel = 1; };
- option MSG_Gigabytes, exit, action { set_sizemult(GIG/512); };
- option MSG_Megabytes, exit, action { set_sizemult(MEG/512); };
- option MSG_Cylinders, exit, action { set_sizemult(pm->current_cylsize); };
- option MSG_Sectors, exit, action { set_sizemult(1); };
+ option MSG_Gigabytes, exit, action
+ { set_sizemult(GIG, pm->sectorsize); };
+ option MSG_Megabytes, exit, action
+ { set_sizemult(MEG, pm->sectorsize); };
+ option MSG_Cylinders, exit, action
+ { set_sizemult(pm->current_cylsize*pm->sectorsize, pm->sectorsize); };
+ option MSG_Sectors, exit, action
+ { set_sizemult(pm->sectorsize, pm->sectorsize); };
menu ptnsize_replace_existing_partition, sub menu, y=0,
title MSG_ptnsize_replace_existing;
Index: src/usr.sbin/sysinst/partitions.c
diff -u src/usr.sbin/sysinst/partitions.c:1.8 src/usr.sbin/sysinst/partitions.c:1.9
--- src/usr.sbin/sysinst/partitions.c:1.8 Sun Dec 15 12:01:05 2019
+++ src/usr.sbin/sysinst/partitions.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partitions.c,v 1.8 2019/12/15 12:01:05 martin Exp $ */
+/* $NetBSD: partitions.c,v 1.9 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -42,10 +42,13 @@ const struct disk_partitioning_scheme **
size_t num_available_part_schemes;
/*
- * Generic reader - query a disk device and read all partitions from it
+ * Generic reader - query a disk device and read all partitions from it.
+ * disk_size is in units of physical sector size, which is passe as
+ * bytes_per_sec.
*/
struct disk_partitions *
-partitions_read_disk(const char *dev, daddr_t disk_size, bool no_mbr)
+partitions_read_disk(const char *dev, daddr_t disk_size, size_t bytes_per_sec,
+ bool no_mbr)
{
const struct disk_partitioning_scheme **ps;
@@ -58,7 +61,8 @@ partitions_read_disk(const char *dev, da
continue;
#endif
struct disk_partitions *parts =
- (*ps)->read_from_disk(dev, 0, disk_size, *ps);
+ (*ps)->read_from_disk(dev, 0, disk_size, bytes_per_sec,
+ *ps);
if (parts)
return parts;
}
Index: src/usr.sbin/sysinst/partitions.h
diff -u src/usr.sbin/sysinst/partitions.h:1.14 src/usr.sbin/sysinst/partitions.h:1.15
--- src/usr.sbin/sysinst/partitions.h:1.14 Wed Jan 15 19:36:30 2020
+++ src/usr.sbin/sysinst/partitions.h Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partitions.h,v 1.14 2020/01/15 19:36:30 martin Exp $ */
+/* $NetBSD: partitions.h,v 1.15 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -31,6 +31,17 @@
* Abstract interface to access arbitrary disk partitioning schemes and
* keep Sysinst proper independent of the implementation / on-disk
* details.
+ *
+ * NOTE:
+ * - all sector numbers, alignement and sizes are in units of the
+ * disks physical sector size (not necessarily 512 bytes)!
+ * - some interfaces pass the disks sector size (when it is easily
+ * available at typical callers), but the backends can always
+ * assume it to be equal to the real physical sector size. If
+ * no value is passed, the backend can query the disk data
+ * via get_disk_geom().
+ * - single exception: disk_partitioning_scheme::size_limit is in 512
+ * byte sectors (as it is not associated with a concrete disk)
*/
#include <sys/types.h>
@@ -180,7 +191,10 @@ struct disk_partitioning_scheme {
/* description of scheme specific partition flags */
msg part_flag_desc;
- /* size restrictions for this partitioning scheme */
+ /*
+ * size restrictions for this partitioning scheme (number
+ * of 512 byte sectors max)
+ */
daddr_t size_limit; /* 0 if not limited */
/*
@@ -435,15 +449,15 @@ struct disk_partitioning_scheme {
* disk.
*/
struct disk_partitions * (*read_from_disk)(const char *,
- daddr_t start, daddr_t len, const struct
- disk_partitioning_scheme *);
+ daddr_t start, daddr_t len, size_t bytes_per_sec,
+ const struct disk_partitioning_scheme *);
/*
- * Set up all internal data for a new disk
+ * Set up all internal data for a new disk.
*/
struct disk_partitions * (*create_new_for_disk)(const char *,
- daddr_t start, daddr_t len, daddr_t disk_total_size,
- bool is_boot_drive, struct disk_partitions *parent);
+ daddr_t start, daddr_t len, bool is_boot_drive,
+ struct disk_partitions *parent);
/*
* Optional: this scheme may be used to boot from the given disk
@@ -542,6 +556,12 @@ struct disk_partitions {
/* global/public disk data */
/*
+ * The basic unit of size used for this disk (all "start",
+ * "size" and "align" values are in this unit).
+ */
+ size_t bytes_per_sector; /* must be 2^n and >= 512 */
+
+ /*
* Valid partitions may have IDs in the range 0 .. num_part (excl.)
*/
part_id num_part;
@@ -580,7 +600,8 @@ extern size_t num_available_part_schemes
* Generic reader - query a disk device and read all partitions from it
*/
struct disk_partitions *
-partitions_read_disk(const char *, daddr_t disk_size, bool no_mbr);
+partitions_read_disk(const char *, daddr_t disk_size,
+ size_t bytes_per_sector, bool no_mbr);
/*
* Generic part info adaption, may be overriden by individual partitionin
Index: src/usr.sbin/sysinst/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.48 src/usr.sbin/sysinst/partman.c:1.49
--- src/usr.sbin/sysinst/partman.c:1.48 Wed Jan 15 19:08:24 2020
+++ src/usr.sbin/sysinst/partman.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partman.c,v 1.48 2020/01/15 19:08:24 martin Exp $ */
+/* $NetBSD: partman.c,v 1.49 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 2012 Eugene Lozovoy
@@ -245,7 +245,7 @@ static int pm_upddevlist(menudesc *, voi
static void pm_select(struct pm_devs *);
static void
-pm_edit_size_value(msg prompt_msg, daddr_t cylsec, daddr_t *size)
+pm_edit_size_value(msg prompt_msg, daddr_t bps, daddr_t cylsec, daddr_t *size)
{
char answer[16], dflt[16];
@@ -257,7 +257,7 @@ pm_edit_size_value(msg prompt_msg, daddr
msg_prompt_win(prompt_msg, -1, 18, 0, 0, dflt, answer, sizeof answer);
mult = sizemult;
- new_size_val = parse_disk_pos(answer, &mult, cylsec, NULL);
+ new_size_val = parse_disk_pos(answer, &mult, bps, cylsec, NULL);
if (new_size_val > 0)
*size = new_size_val * mult;
@@ -1057,7 +1057,8 @@ pm_vnd_set_value(menudesc *m, void *arg)
if (dev_ptr->is_exist)
return 0;
- pm_edit_size_value(MSG_vnd_size_ask, pm->dlcylsize,
+ pm_edit_size_value(MSG_vnd_size_ask,
+ pm->sectorsize, pm->dlcylsize,
&dev_ptr->size);
break;
@@ -1881,7 +1882,8 @@ pm_lvmlv_set_value(menudesc *m, void *ar
return 0;
case PMLV_MENU_SIZE:
pm_edit_size_value(MSG_lvmlv_size_ask,
- pm->dlcylsize, &dev_ptr->size); /* XXX cylsize? */
+ pm->sectorsize, pm->dlcylsize,
+ &dev_ptr->size); /* XXX cylsize? */
break;
case PMLV_MENU_READONLY:
dev_ptr->readonly = !dev_ptr->readonly;
@@ -3230,8 +3232,8 @@ pm_force_parts(struct pm_devs *my_pm)
return false;
struct disk_partitions *parts =
- (*ps->create_new_for_disk)(my_pm->diskdev, 0, my_pm->dlsize,
- my_pm->dlsize, false, NULL);
+ (*ps->create_new_for_disk)(my_pm->diskdev, 0,
+ my_pm->dlsize, false, NULL);
if (parts == NULL)
return false;
Index: src/usr.sbin/sysinst/sizemultname.c
diff -u src/usr.sbin/sysinst/sizemultname.c:1.3 src/usr.sbin/sysinst/sizemultname.c:1.4
--- src/usr.sbin/sysinst/sizemultname.c:1.3 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/sizemultname.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: sizemultname.c,v 1.3 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: sizemultname.c,v 1.4 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -49,18 +49,18 @@
#include "menu_defs.h"
void
-set_sizemult(uint secs)
+set_sizemult(daddr_t unit, uint bps)
{
- if (secs == 0)
+ if (unit == 0 || bps == 0)
return;
- sizemult = secs;
+ sizemult = unit/bps;
- if (secs == 1)
+ if (sizemult == 1)
multname = msg_string(MSG_secname);
- else if (secs == MEG/512)
+ else if (unit == MEG)
multname = msg_string(MSG_megname);
- else if (secs == GIG/512)
+ else if (unit == GIG)
multname = msg_string(MSG_gigname);
else
multname = msg_string(MSG_cylname);
@@ -70,15 +70,14 @@ set_sizemult(uint secs)
* Only first call sets it
*/
void
-set_default_sizemult(uint secs)
+set_default_sizemult(const char *disk, daddr_t unit, uint bps)
{
- static bool default_done;
+ static char last_dev[40];
- if (default_done)
+ if (strcmp(disk, last_dev) == 0)
return;
- default_done = true;
- set_sizemult(secs);
+ strlcpy(last_dev, disk, sizeof last_dev);
+ set_sizemult(unit, bps);
}
-
Index: src/usr.sbin/sysinst/arch/arc/md.c
diff -u src/usr.sbin/sysinst/arch/arc/md.c:1.11 src/usr.sbin/sysinst/arch/arc/md.c:1.12
--- src/usr.sbin/sysinst/arch/arc/md.c:1.11 Thu Jan 9 13:22:30 2020
+++ src/usr.sbin/sysinst/arch/arc/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:30 martin Exp $ */
+/* $NetBSD: md.c,v 1.12 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -79,7 +79,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/bebox/md.c
diff -u src/usr.sbin/sysinst/arch/bebox/md.c:1.7 src/usr.sbin/sysinst/arch/bebox/md.c:1.8
--- src/usr.sbin/sysinst/arch/bebox/md.c:1.7 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/bebox/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -72,7 +72,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/cobalt/md.c
diff -u src/usr.sbin/sysinst/arch/cobalt/md.c:1.11 src/usr.sbin/sysinst/arch/cobalt/md.c:1.12
--- src/usr.sbin/sysinst/arch/cobalt/md.c:1.11 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/cobalt/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.12 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -79,7 +79,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/evbarm/md.c
diff -u src/usr.sbin/sysinst/arch/evbarm/md.c:1.13 src/usr.sbin/sysinst/arch/evbarm/md.c:1.14
--- src/usr.sbin/sysinst/arch/evbarm/md.c:1.13 Mon Jan 20 21:26:35 2020
+++ src/usr.sbin/sysinst/arch/evbarm/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.13 2020/01/20 21:26:35 martin Exp $ */
+/* $NetBSD: md.c,v 1.14 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -107,7 +107,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/evbmips/md.c
diff -u src/usr.sbin/sysinst/arch/evbmips/md.c:1.7 src/usr.sbin/sysinst/arch/evbmips/md.c:1.8
--- src/usr.sbin/sysinst/arch/evbmips/md.c:1.7 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/evbmips/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997,2002 Piermont Information Systems Inc.
@@ -72,7 +72,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/evbppc/md.c
diff -u src/usr.sbin/sysinst/arch/evbppc/md.c:1.7 src/usr.sbin/sysinst/arch/evbppc/md.c:1.8
--- src/usr.sbin/sysinst/arch/evbppc/md.c:1.7 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/evbppc/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997,2002 Piermont Information Systems Inc.
@@ -72,7 +72,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/hpcarm/md.c
diff -u src/usr.sbin/sysinst/arch/hpcarm/md.c:1.7 src/usr.sbin/sysinst/arch/hpcarm/md.c:1.8
--- src/usr.sbin/sysinst/arch/hpcarm/md.c:1.7 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/hpcarm/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -101,7 +101,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/hpcmips/md.c
diff -u src/usr.sbin/sysinst/arch/hpcmips/md.c:1.7 src/usr.sbin/sysinst/arch/hpcmips/md.c:1.8
--- src/usr.sbin/sysinst/arch/hpcmips/md.c:1.7 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/hpcmips/md.c Mon Jan 27 21:21:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:22 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -75,7 +75,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/hpcsh/md.c
diff -u src/usr.sbin/sysinst/arch/hpcsh/md.c:1.8 src/usr.sbin/sysinst/arch/hpcsh/md.c:1.9
--- src/usr.sbin/sysinst/arch/hpcsh/md.c:1.8 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/hpcsh/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.8 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.9 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -76,7 +76,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/i386/md.c
diff -u src/usr.sbin/sysinst/arch/i386/md.c:1.28 src/usr.sbin/sysinst/arch/i386/md.c:1.29
--- src/usr.sbin/sysinst/arch/i386/md.c:1.28 Thu Jan 9 13:22:31 2020
+++ src/usr.sbin/sysinst/arch/i386/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.28 2020/01/09 13:22:31 martin Exp $ */
+/* $NetBSD: md.c,v 1.29 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -122,7 +122,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
@@ -136,7 +136,7 @@ md_get_info(struct install_partition_des
pm->parts->pscheme->change_disk_geom(pm->parts,
bcyl, bhead, bsec);
else
- set_default_sizemult(MEG/512);
+ set_default_sizemult(pm->diskdev, MEG, pm->sectorsize);
/*
* If the selected scheme does not need two-stage partitioning
Index: src/usr.sbin/sysinst/arch/landisk/md.c
diff -u src/usr.sbin/sysinst/arch/landisk/md.c:1.12 src/usr.sbin/sysinst/arch/landisk/md.c:1.13
--- src/usr.sbin/sysinst/arch/landisk/md.c:1.12 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/landisk/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.12 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.13 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997,2002 Piermont Information Systems Inc.
@@ -72,7 +72,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/ofppc/md.c
diff -u src/usr.sbin/sysinst/arch/ofppc/md.c:1.9 src/usr.sbin/sysinst/arch/ofppc/md.c:1.10
--- src/usr.sbin/sysinst/arch/ofppc/md.c:1.9 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/ofppc/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.9 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.10 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -93,7 +93,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/playstation2/md.c
diff -u src/usr.sbin/sysinst/arch/playstation2/md.c:1.7 src/usr.sbin/sysinst/arch/playstation2/md.c:1.8
--- src/usr.sbin/sysinst/arch/playstation2/md.c:1.7 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/playstation2/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -77,7 +77,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
@@ -94,7 +94,7 @@ md_get_info(struct install_partition_des
pm->parts->pscheme->change_disk_geom(pm->parts,
cyl, head, sec);
else
- set_default_sizemult(MEG/512);
+ set_default_sizemult(pm->diskdev, MEG, pm->sectorsize);
/*
* If the selected scheme does not need two-stage partitioning
Index: src/usr.sbin/sysinst/arch/prep/md.c
diff -u src/usr.sbin/sysinst/arch/prep/md.c:1.11 src/usr.sbin/sysinst/arch/prep/md.c:1.12
--- src/usr.sbin/sysinst/arch/prep/md.c:1.11 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/prep/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.12 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -77,7 +77,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/sandpoint/md.c
diff -u src/usr.sbin/sysinst/arch/sandpoint/md.c:1.7 src/usr.sbin/sysinst/arch/sandpoint/md.c:1.8
--- src/usr.sbin/sysinst/arch/sandpoint/md.c:1.7 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/sandpoint/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -106,7 +106,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/zaurus/md.c
diff -u src/usr.sbin/sysinst/arch/zaurus/md.c:1.7 src/usr.sbin/sysinst/arch/zaurus/md.c:1.8
--- src/usr.sbin/sysinst/arch/zaurus/md.c:1.7 Thu Jan 9 13:22:32 2020
+++ src/usr.sbin/sysinst/arch/zaurus/md.c Mon Jan 27 21:21:23 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/27 21:21:23 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -86,7 +86,7 @@ md_get_info(struct install_partition_des
struct disk_partitions *parts =
(*ps->create_new_for_disk)(pm->diskdev,
- 0, pm->dlsize, pm->dlsize, true, NULL);
+ 0, pm->dlsize, true, NULL);
if (!parts)
return false;