Module Name: src
Committed By: martin
Date: Thu Jan 9 13:22:32 UTC 2020
Modified Files:
src/usr.sbin/sysinst: bsddisklabel.c defs.h disklabel.c disks.c gpt.c
label.c mbr.c menus.mi menus.pm msg.mi.de msg.mi.en msg.mi.es
msg.mi.fr msg.mi.pl msg.pm.de msg.pm.en msg.pm.es msg.pm.fr
msg.pm.pl part_edit.c partitions.h partman.c target.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/luna68k: 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:
Finish conversion of extended partitioning parts to new abstract
backend interface. XXX still could use a lot of polishing.
To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/usr.sbin/sysinst/bsddisklabel.c
cvs rdiff -u -r1.49 -r1.50 src/usr.sbin/sysinst/defs.h
cvs rdiff -u -r1.27 -r1.28 src/usr.sbin/sysinst/disklabel.c \
src/usr.sbin/sysinst/msg.mi.pl
cvs rdiff -u -r1.58 -r1.59 src/usr.sbin/sysinst/disks.c
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/sysinst/gpt.c \
src/usr.sbin/sysinst/part_edit.c
cvs rdiff -u -r1.17 -r1.18 src/usr.sbin/sysinst/label.c
cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/sysinst/mbr.c
cvs rdiff -u -r1.19 -r1.20 src/usr.sbin/sysinst/menus.mi \
src/usr.sbin/sysinst/msg.mi.de
cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/sysinst/menus.pm
cvs rdiff -u -r1.26 -r1.27 src/usr.sbin/sysinst/msg.mi.en
cvs rdiff -u -r1.20 -r1.21 src/usr.sbin/sysinst/msg.mi.es
cvs rdiff -u -r1.24 -r1.25 src/usr.sbin/sysinst/msg.mi.fr
cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/sysinst/msg.pm.de \
src/usr.sbin/sysinst/msg.pm.en src/usr.sbin/sysinst/msg.pm.es \
src/usr.sbin/sysinst/msg.pm.fr src/usr.sbin/sysinst/msg.pm.pl
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/sysinst/partitions.h
cvs rdiff -u -r1.45 -r1.46 src/usr.sbin/sysinst/partman.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/sysinst/target.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/sysinst/arch/arc/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/bebox/md.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/sysinst/arch/cobalt/md.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/sysinst/arch/evbarm/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/evbmips/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/evbppc/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/hpcarm/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/hpcmips/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/hpcsh/md.c
cvs rdiff -u -r1.27 -r1.28 src/usr.sbin/sysinst/arch/i386/md.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/arch/landisk/md.c
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/arch/luna68k/md.c
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/sysinst/arch/ofppc/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/playstation2/md.c
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/sysinst/arch/prep/md.c
cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/sysinst/arch/sandpoint/md.c
cvs rdiff -u -r1.6 -r1.7 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.33 src/usr.sbin/sysinst/bsddisklabel.c:1.34
--- src/usr.sbin/sysinst/bsddisklabel.c:1.33 Fri Dec 13 22:12:41 2019
+++ src/usr.sbin/sysinst/bsddisklabel.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: bsddisklabel.c,v 1.33 2019/12/13 22:12:41 martin Exp $ */
+/* $NetBSD: bsddisklabel.c,v 1.34 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1547,7 +1547,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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (parts == NULL)
return false;
pm->parts = parts;
@@ -1630,7 +1630,7 @@ make_bsd_partitions(struct install_parti
* edit it and verify it's OK, or abort altogether.
*/
for (;;) {
- int rv = edit_and_check_label(pm, &wanted);
+ int rv = edit_and_check_label(pm, &wanted, true);
if (rv == 0) {
msg_display(MSG_abort_part);
free_usage_set(&wanted);
Index: src/usr.sbin/sysinst/defs.h
diff -u src/usr.sbin/sysinst/defs.h:1.49 src/usr.sbin/sysinst/defs.h:1.50
--- src/usr.sbin/sysinst/defs.h:1.49 Wed Dec 11 15:08:45 2019
+++ src/usr.sbin/sysinst/defs.h Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.49 2019/12/11 15:08:45 martin Exp $ */
+/* $NetBSD: defs.h,v 1.50 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -368,7 +368,7 @@ daddr_t tmp_ramdisk_size;
daddr_t root_limit; /* BIOS (etc) read limit */
-enum SHRED_T { SHRED_NONE=0, SHRED_ZEROS, SHRED_RANDOM, SHRED_CRYPTO };
+enum SHRED_T { SHRED_NONE=0, SHRED_ZEROS, SHRED_RANDOM };
/* All information that is unique for each drive */
SLIST_HEAD(pm_head_t, pm_devs) pm_head;
@@ -430,7 +430,6 @@ struct pm_devs {
*/
char **mounted;
- bool bootable; /* This device is bootable */
bool unsaved; /* Flag indicating to partman that device need saving */
bool found; /* Flag to delete unplugged and unconfigured devices */
int blocked; /* Device is busy and cannot be changed */
@@ -442,11 +441,10 @@ struct pm_devs *pm_new; /* Pointer for n
/* Generic structure for partman */
struct part_entry {
- int retvalue;
part_id id;
struct disk_partitions *parts;
void *dev_ptr;
- size_t index;
+ size_t index; /* e.g. if PM_RAID: this is raids[index] */
int dev_ptr_delta;
char fullname[SSTRSIZE];
enum {PM_DISK=1, PM_PART, PM_SPEC,
@@ -579,7 +577,6 @@ void remove_color_options(void);
void remove_raid_options(void);
void remove_lvm_options(void);
void remove_cgd_options(void);
-void remove_gpt_options(void);
/* Machine dependent functions .... */
void md_init(void);
@@ -697,7 +694,7 @@ int fs_is_lfs(void *);
const char *get_last_mounted(int fd, daddr_t offset, uint *fs_type,
uint *fs_sub_type, uint flags);
void canonicalize_last_mounted(char*);
-int edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset);
+int edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset, bool install);
int edit_ptn(menudesc *, void *);
int checkoverlap(struct disk_partitions *parts);
daddr_t getpartsize(struct disk_partitions *parts, daddr_t partstart,
@@ -869,15 +866,23 @@ static inline int partman(void) { return
static inline int pm_getrefdev(struct pm_devs *x __unused) { return -1; }
#define update_wedges(x) __nothing
#endif
+void pmdiskentry_enable(menudesc*, struct part_entry *);
int pm_partusage(struct pm_devs *, int, int);
void pm_setfstype(struct pm_devs *, part_id, int, int);
+void pm_set_lvmpv(struct pm_devs *, part_id, bool);
+bool pm_is_lvmpv(struct pm_devs *, part_id, const struct disk_part_info*);
int pm_editpart(int);
void pm_rename(struct pm_devs *);
-int pm_shred(struct pm_devs *, int, int);
+void pm_shred(struct part_entry *, int);
void pm_umount(struct pm_devs *, int);
int pm_unconfigure(struct pm_devs *);
-int pm_cgd_edit(void *, struct part_entry *);
+int pm_cgd_edit_new(struct pm_devs *pm, part_id id);
+int pm_cgd_edit_old(struct part_entry *);
void pm_wedges_fill(struct pm_devs *);
+void pm_edit_partitions(struct part_entry *);
+part_id pm_whole_disk(struct part_entry *, int);
+struct pm_devs * pm_from_pe(struct part_entry *);
+bool pm_force_parts(struct pm_devs *);
/*
* Parse a file system position or size in a common way, return
Index: src/usr.sbin/sysinst/disklabel.c
diff -u src/usr.sbin/sysinst/disklabel.c:1.27 src/usr.sbin/sysinst/disklabel.c:1.28
--- src/usr.sbin/sysinst/disklabel.c:1.27 Sun Dec 15 12:09:55 2019
+++ src/usr.sbin/sysinst/disklabel.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: disklabel.c,v 1.27 2019/12/15 12:09:55 martin Exp $ */
+/* $NetBSD: disklabel.c,v 1.28 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -116,7 +116,7 @@ disklabel_change_geom(struct disk_partit
static struct disk_partitions *
disklabel_parts_new(const char *dev, daddr_t start, daddr_t len,
- daddr_t total_size, bool is_boot_drive)
+ daddr_t total_size, bool is_boot_drive, struct disk_partitions *parent)
{
struct disklabel_disk_partitions *parts;
struct disk_geom geo;
@@ -144,14 +144,17 @@ disklabel_parts_new(const char *dev, dad
parts->dp.disk_start = start;
parts->dp.disk_size = parts->dp.free_space = len;
disklabel_init_default_alignment(parts, parts->l.d_secpercyl);
+ parts->dp.parent = parent;
strncpy(parts->l.d_packname, "fictious", sizeof parts->l.d_packname);
#if RAW_PART > 2
- parts->l.d_partitions[RAW_PART-1].p_fstype = FS_UNUSED;
- parts->l.d_partitions[RAW_PART-1].p_offset = start;
- parts->l.d_partitions[RAW_PART-1].p_size = len;
- parts->dp.num_part++;
+ if (parts->dp.parent != NULL) {
+ parts->l.d_partitions[RAW_PART-1].p_fstype = FS_UNUSED;
+ parts->l.d_partitions[RAW_PART-1].p_offset = start;
+ parts->l.d_partitions[RAW_PART-1].p_size = len;
+ parts->dp.num_part++;
+ }
#endif
parts->l.d_partitions[RAW_PART].p_fstype = FS_UNUSED;
parts->l.d_partitions[RAW_PART].p_offset = 0;
@@ -435,10 +438,13 @@ disklabel_delete_all(struct disk_partiti
parts->dp.num_part = 0;
#if RAW_PART > 2
- parts->l.d_partitions[RAW_PART-1].p_fstype = FS_UNUSED;
- parts->l.d_partitions[RAW_PART-1].p_offset = parts->dp.disk_start;
- parts->l.d_partitions[RAW_PART-1].p_size = parts->dp.disk_size;
- parts->dp.num_part++;
+ if (parts->dp.parent != NULL) {
+ parts->l.d_partitions[RAW_PART-1].p_fstype = FS_UNUSED;
+ parts->l.d_partitions[RAW_PART-1].p_offset =
+ parts->dp.disk_start;
+ parts->l.d_partitions[RAW_PART-1].p_size = parts->dp.disk_size;
+ parts->dp.num_part++;
+ }
#endif
parts->l.d_partitions[RAW_PART].p_fstype = FS_UNUSED;
parts->l.d_partitions[RAW_PART].p_offset = 0;
@@ -466,7 +472,8 @@ disklabel_delete(struct disk_partitions
if (ndx == id) {
if (part == RAW_PART
#if RAW_PART > 2
- || part == RAW_PART-1
+ || (part == RAW_PART-1 &&
+ parts->dp.parent != NULL)
#endif
) {
if (err_msg)
@@ -507,7 +514,8 @@ disklabel_delete_range(struct disk_parti
daddr_t end = start + parts->l.d_partitions[part].p_size;
#if RAW_PART > 2
- if (part == RAW_PART - 1 && start == r_start &&
+ if (parts->dp.parent != NULL &&
+ part == RAW_PART - 1 && start == r_start &&
r_start + r_size == end)
continue;
#endif
@@ -537,7 +545,11 @@ dl_init_types(void)
enum part_type pt;
switch (i) {
case FS_UNUSED: pt = PT_undef; break;
- case FS_BSDFFS: pt = PT_root; break;
+ case FS_BSDFFS:
+ case FS_RAID:
+ case FS_BSDLFS:
+ case FS_CGD:
+ pt = PT_root; break;
case FS_SWAP: pt = PT_swap; break;
case FS_MSDOS: pt = PT_FAT; break;
default: pt = PT_unknown; break;
@@ -672,6 +684,21 @@ disklabel_get_generic_type(enum part_typ
}
static bool
+disklabel_get_default_fstype(const struct part_type_desc *nat_type,
+ unsigned *fstype, unsigned *fs_sub_type)
+{
+
+ *fstype = dl_part_type_from_generic(nat_type);
+#ifdef DEFAULT_UFS2
+ if (*fstype == FS_BSDFFS)
+ *fs_sub_type = 2;
+ else
+#endif
+ *fs_sub_type = 0;
+ return true;
+}
+
+static bool
disklabel_get_part_info(const struct disk_partitions *arg, part_id id,
struct disk_part_info *info)
{
@@ -703,7 +730,7 @@ disklabel_get_part_info(const struct dis
info->flags |=
PTI_PSCHEME_INTERNAL|PTI_RAW_PART;
#if RAW_PART > 2
- if (part == (RAW_PART-1) &&
+ if (part == (RAW_PART-1) && parts->dp.parent != NULL &&
parts->l.d_partitions[part].p_fstype == FS_UNUSED)
info->flags |=
PTI_PSCHEME_INTERNAL|PTI_WHOLE_DISK;
@@ -770,8 +797,8 @@ disklabel_get_free_spaces_internal(const
size_t cnt = 0, i;
daddr_t s, e, from, size, end_of_disk;
- if (start < parts->dp.disk_start)
- start = parts->dp.disk_start;
+ if (start <= parts->dp.disk_start+LABELSECTOR)
+ start = parts->dp.disk_start+LABELSECTOR+1;
if (min_space_size < 1)
min_space_size = 1;
if (align > 1 && (start % align) != 0)
@@ -850,7 +877,7 @@ disklabel_can_add_partition(const struct
if (i == RAW_PART)
continue;
#if RAW_PART > 2
- if (i == RAW_PART-1)
+ if (i == RAW_PART-1 && parts->dp.parent != NULL)
continue;
#endif
if (parts->l.d_partitions[i].p_fstype == FS_UNUSED)
@@ -884,7 +911,7 @@ disklabel_set_disk_pack_name(struct disk
static bool
disklabel_get_part_device(const struct disk_partitions *arg,
part_id ptn, char *devname, size_t max_devname_len, int *part,
- enum dev_name_usage which_name, bool with_path)
+ enum dev_name_usage which_name, bool with_path, bool life)
{
const struct disklabel_disk_partitions *parts =
(const struct disklabel_disk_partitions*)arg;
@@ -979,7 +1006,7 @@ disklabel_add_partition(struct disk_part
if (i == RAW_PART)
continue;
#if RAW_PART > 2
- if (i == RAW_PART-1)
+ if (i == RAW_PART-1 && parts->dp.parent != NULL)
continue;
#endif
if (parts->l.d_partitions[i].p_size > 0)
@@ -1042,7 +1069,7 @@ disklabel_add_outer_partition(struct dis
if (i == RAW_PART)
continue;
#if RAW_PART > 2
- if (i == RAW_PART-1)
+ if (i == RAW_PART-1 && parts->dp.parent != NULL)
continue;
#endif
if (parts->l.d_partitions[i].p_size > 0)
@@ -1170,6 +1197,7 @@ disklabel_parts = {
.get_part_type = disklabel_get_type,
.get_generic_part_type = disklabel_get_generic_type,
.get_fs_part_type = disklabel_get_fs_part_type,
+ .get_default_fstype = disklabel_get_default_fstype,
.create_custom_part_type = disklabel_create_custom_part_type,
.create_unknown_part_type = disklabel_create_unknown_part_type,
.get_part_alignment = disklabel_get_alignment,
Index: src/usr.sbin/sysinst/msg.mi.pl
diff -u src/usr.sbin/sysinst/msg.mi.pl:1.27 src/usr.sbin/sysinst/msg.mi.pl:1.28
--- src/usr.sbin/sysinst/msg.mi.pl:1.27 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/msg.mi.pl Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.pl,v 1.27 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: msg.mi.pl,v 1.28 2020/01/09 13:22:30 martin Exp $ */
/* Based on english version: */
/* NetBSD: msg.mi.pl,v 1.36 2004/04/17 18:55:35 atatat Exp */
@@ -1152,15 +1152,12 @@ message failed {Nie powiodlo sie}
message notsupported {Operacja nie jest obslugiwana!}
message askfsmountadv {Punkt montowania (lub "raid", "cgd" albo "lvm")?}
message partman {Partycje rozszerzone}
-message editbsdpart {Edytuj partycje NetBSD}
+message edit_parts {Edytuj partycje}
message editpart {Edytuj partycje}
-message editmbr {Edytuj i zapisz MBR}
-message switchgpt {Przelacz na GPT}
-message switchmbr {Przelacz na MBR}
-message renamedisk {Ustaw nazwe dysku}
+message switch_parts {Switch partitioning scheme}
message fmtasraid {Formatuj jako RAID}
message fmtaslvm {Formatuj jak LVM PV}
-message encrypt {Szyfrowanie}
+message encrypt {Szyfrowanie (CGD)}
message setbootable {Rozruchowy}
message erase {Bezpieczne kasowanie}
message undo {Cofanie zmian}
Index: src/usr.sbin/sysinst/disks.c
diff -u src/usr.sbin/sysinst/disks.c:1.58 src/usr.sbin/sysinst/disks.c:1.59
--- src/usr.sbin/sysinst/disks.c:1.58 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/disks.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.58 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: disks.c,v 1.59 2020/01/09 13:22:30 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);
+ 0, p->dlsize, p->dlsize, is_boot_drive, NULL);
if (new_parts == NULL)
return false;
@@ -914,7 +914,6 @@ find_disks(const char *doingwhat, bool a
pm->found = 1;
pm->ptstart = 0;
pm->ptsize = 0;
- pm->bootable = 0;
strlcpy(pm->diskdev, disk->dd_name, sizeof pm->diskdev);
strlcpy(pm->diskdev_descr, disk->dd_descr, sizeof pm->diskdev_descr);
/* Use as a default disk if the user has the sets on a local disk */
@@ -1132,15 +1131,15 @@ make_filesystems(struct install_partitio
continue;
if (parts->pscheme->get_part_device(parts, ptn->cur_part_id,
- devdev, sizeof devdev, &partno, parent_device_only, false)
- && is_active_rootpart(devdev, partno))
+ devdev, sizeof devdev, &partno, parent_device_only, false,
+ false) && is_active_rootpart(devdev, partno))
continue;
parts->pscheme->get_part_device(parts, ptn->cur_part_id,
- devdev, sizeof devdev, &partno, plain_name, true);
+ devdev, sizeof devdev, &partno, plain_name, true, true);
parts->pscheme->get_part_device(parts, ptn->cur_part_id,
- rdev, sizeof rdev, &partno, raw_dev_name, true);
+ rdev, sizeof rdev, &partno, raw_dev_name, true, true);
switch (ptn->fs_type) {
case FS_APPLEUFS:
@@ -1311,7 +1310,7 @@ make_fstab(struct install_partition_desc
if (ptn->parts->pscheme->get_part_device(ptn->parts,
ptn->cur_part_id, dev_buf, sizeof dev_buf, NULL,
- logical_name, true))
+ logical_name, true, false))
dev = dev_buf;
else
dev = NULL;
@@ -1510,9 +1509,9 @@ process_found_fs(struct data *list, size
&parts, &pno) || parts == NULL || pno == NO_PART)
return 0;
parts->pscheme->get_part_device(parts, pno,
- dev, sizeof(dev), NULL, plain_name, true);
+ dev, sizeof(dev), NULL, plain_name, true, true);
parts->pscheme->get_part_device(parts, pno,
- rdev, sizeof(rdev), NULL, raw_dev_name, true);
+ rdev, sizeof(rdev), NULL, raw_dev_name, true, true);
} else {
/* this fstab entry uses the plain device name */
if (is_root) {
@@ -1832,7 +1831,7 @@ mount_disks(struct install_partition_des
if (!install->infos[i].parts->pscheme->get_part_device(
install->infos[i].parts, install->infos[i].cur_part_id,
- devdev, sizeof devdev, NULL, plain_name, true))
+ devdev, sizeof devdev, NULL, plain_name, true, true))
return -1;
error = mount_root(devdev, true, false, install);
if (error != 0 && error != EBUSY)
@@ -1899,7 +1898,7 @@ set_swap(struct install_partition_desc *
if (!install->infos[i].parts->pscheme->get_part_device(
install->infos[i].parts, install->infos[i].cur_part_id, dev_buf,
- sizeof dev_buf, NULL, plain_name, true))
+ sizeof dev_buf, NULL, plain_name, true, true))
return -1;
rval = swapctl(SWAP_ON, dev_buf, 0);
@@ -2508,11 +2507,11 @@ clone_partition_data(struct disk_partiti
if (!src_parts->pscheme->get_part_device(
src_parts, sid, src_dev, sizeof src_dev, NULL,
- raw_dev_name, true))
+ raw_dev_name, true, true))
return false;
if (!dest_parts->pscheme->get_part_device(
dest_parts, did, target_dev, sizeof target_dev, NULL,
- raw_dev_name, true))
+ raw_dev_name, true, true))
return false;
return run_program(RUN_DISPLAY | RUN_PROGRESS,
Index: src/usr.sbin/sysinst/gpt.c
diff -u src/usr.sbin/sysinst/gpt.c:1.13 src/usr.sbin/sysinst/gpt.c:1.14
--- src/usr.sbin/sysinst/gpt.c:1.13 Fri Dec 13 22:12:41 2019
+++ src/usr.sbin/sysinst/gpt.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: gpt.c,v 1.13 2019/12/13 22:12:41 martin Exp $ */
+/* $NetBSD: gpt.c,v 1.14 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -107,8 +107,8 @@ struct {
{ .name = "lfs", .fstype = FS_BSDLFS, .ptype = PT_root },
{ .name = "linux-data", .fstype = FS_EX2FS, .ptype = PT_root },
{ .name = "apple", .fstype = FS_HFS, .ptype = PT_unknown },
- { .name = "ccd", .fstype = FS_CCD, .ptype = PT_unknown },
- { .name = "cgd", .fstype = FS_CGD, .ptype = PT_unknown },
+ { .name = "ccd", .fstype = FS_CCD, .ptype = PT_root },
+ { .name = "cgd", .fstype = FS_CGD, .ptype = PT_root },
{ .name = "raid", .fstype = FS_RAID, .ptype = PT_root },
{ .name = "vmcore", .fstype = FS_VMKCORE, .ptype = PT_unknown },
{ .name = "vmfs", .fstype = FS_VMFS, .ptype = PT_unknown },
@@ -441,7 +441,7 @@ gpt_read_from_disk(const char *dev, dadd
static struct disk_partitions *
gpt_create_new(const char *disk, daddr_t start, daddr_t len, daddr_t total,
- bool is_boot_drive)
+ bool is_boot_drive, struct disk_partitions *parent)
{
struct gpt_disk_partitions *parts;
@@ -878,7 +878,7 @@ gpt_get_fs_part_type(enum part_type pt,
{
size_t i;
- /* Try with complet match (including part_type) first */
+ /* Try with complete match (including part_type) first */
for (i = 0; i < __arraycount(gpt_fs_types); i++)
if (fstype == gpt_fs_types[i].fstype &&
pt == gpt_fs_types[i].ptype)
@@ -892,6 +892,26 @@ gpt_get_fs_part_type(enum part_type pt,
return NULL;
}
+static bool
+gpt_get_default_fstype(const struct part_type_desc *nat_type,
+ unsigned *fstype, unsigned *fs_sub_type)
+{
+ const struct gpt_ptype_desc *gtype;
+
+ gtype = gpt_find_native_type(nat_type);
+ if (gtype == NULL)
+ return false;
+
+ *fstype = gtype->default_fs_type;
+#ifdef DEFAULT_UFS2
+ if (gtype->default_fs_type == FS_BSDFFS)
+ *fs_sub_type = 2;
+ else
+#endif
+ *fs_sub_type = 0;
+ return true;
+}
+
static const struct part_type_desc *
gpt_get_uuid_part_type(const uuid_t *id)
{
@@ -1278,6 +1298,15 @@ gpt_add_wedge(const char *disk, struct g
strlcpy((char*)&dkw.dkw_wname, p->gp_id, sizeof(dkw.dkw_wname));
dkw.dkw_offset = p->gp_start;
dkw.dkw_size = p->gp_size;
+ if (dkw.dkw_wname[0] == 0) {
+ if (p->gp_label[0] != 0)
+ strlcpy((char*)&dkw.dkw_wname,
+ p->gp_label, sizeof(dkw.dkw_wname));
+ }
+ if (dkw.dkw_wname[0] == 0) {
+ snprintf((char*)dkw.dkw_wname, sizeof dkw.dkw_wname,
+ "%s_%" PRIi64 "@%" PRIi64, disk, p->gp_size, p->gp_start);
+ }
fd = opendisk(disk, O_RDWR, diskpath, sizeof(diskpath), 0);
if (fd < 0)
@@ -1310,7 +1339,7 @@ escape_spaces(char *dest, const char *sr
static bool
gpt_get_part_device(const struct disk_partitions *arg,
part_id id, char *devname, size_t max_devname_len, int *part,
- enum dev_name_usage usage, bool with_path)
+ enum dev_name_usage usage, bool with_path, bool life)
{
const struct gpt_disk_partitions *parts =
(const struct gpt_disk_partitions*)arg;
@@ -1328,8 +1357,11 @@ gpt_get_part_device(const struct disk_pa
if (part)
*part = -1;
- if (!(p->gp_flags & GPEF_WEDGE) &&
- (usage == plain_name || usage == raw_dev_name))
+ if (usage == logical_name && p->gp_label[0] == 0 && p->gp_id[0] == 0)
+ usage = plain_name;
+ if (usage == plain_name || usage == raw_dev_name)
+ life = true;
+ if (!(p->gp_flags & GPEF_WEDGE) && life)
gpt_add_wedge(arg->disk, p);
switch (usage) {
@@ -1740,6 +1772,7 @@ gpt_parts = {
.get_part_type = gpt_get_ptype,
.get_generic_part_type = gpt_get_generic_type,
.get_fs_part_type = gpt_get_fs_part_type,
+ .get_default_fstype = gpt_get_default_fstype,
.create_custom_part_type = gpt_create_custom_part_type,
.create_unknown_part_type = gpt_create_unknown_part_type,
.get_part_alignment = gpt_get_part_alignment,
Index: src/usr.sbin/sysinst/part_edit.c
diff -u src/usr.sbin/sysinst/part_edit.c:1.13 src/usr.sbin/sysinst/part_edit.c:1.14
--- src/usr.sbin/sysinst/part_edit.c:1.13 Sat Nov 16 15:50:45 2019
+++ src/usr.sbin/sysinst/part_edit.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: part_edit.c,v 1.13 2019/11/16 15:50:45 joerg Exp $ */
+/* $NetBSD: part_edit.c,v 1.14 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -1376,7 +1376,12 @@ select_part_scheme(
for (used = 0, ndx = 0; ndx < num_available_part_schemes; ndx++) {
p = available_part_schemes[ndx];
- if (skip != NULL && p == skip)
+ /*
+ * Do not match exactly, we want to skip all lookalikes
+ * too (only_disklabel_parts vs. disklabel_parts)
+ */
+ if (skip != NULL &&
+ p->create_new_for_disk == skip->create_new_for_disk)
continue;
if (bootable && p->have_boot_support != NULL &&
!p->have_boot_support(dev->diskdev))
Index: src/usr.sbin/sysinst/label.c
diff -u src/usr.sbin/sysinst/label.c:1.17 src/usr.sbin/sysinst/label.c:1.18
--- src/usr.sbin/sysinst/label.c:1.17 Sun Dec 15 11:22:46 2019
+++ src/usr.sbin/sysinst/label.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: label.c,v 1.17 2019/12/15 11:22:46 martin Exp $ */
+/* $NetBSD: label.c,v 1.18 2020/01/09 13:22:30 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.17 2019/12/15 11:22:46 martin Exp $");
+__RCSID("$NetBSD: label.c,v 1.18 2020/01/09 13:22:30 martin Exp $");
#endif
#include <sys/types.h>
@@ -182,7 +182,7 @@ checkoverlap(struct disk_partitions *par
* 2 -> continue installation
*/
static int
-verify_parts(struct partition_usage_set *pset)
+verify_parts(struct partition_usage_set *pset, bool install)
{
struct part_usage_info *wanted;
struct disk_partitions *parts;
@@ -217,9 +217,9 @@ verify_parts(struct partition_usage_set
}
}
- if (num_root == 0 ||
+ if ((num_root == 0 && install) ||
(num_root > 1 && inst_start == 0)) {
- if (num_root == 0)
+ if (num_root == 0 && install)
msg_display_subst(MSG_must_be_one_root, 2,
msg_string(parts->pscheme->name),
msg_string(parts->pscheme->short_name));
@@ -426,6 +426,10 @@ renumber_partitions(struct partition_usa
for (i = 0; i < pset->parts->num_part; i++) {
if (pset->infos[i].cur_start != info.start)
continue;
+ if (pset->infos[i].cur_flags != info.flags)
+ continue;
+ if (pset->infos[i].type != info.nat_type->generic_ptype)
+ continue;
memcpy(&ninfos[pno], &pset->infos[i],
sizeof(ninfos[pno]));
ninfos[pno].cur_part_id = pno;
@@ -1549,7 +1553,6 @@ add_partition_adder(menudesc *m, struct
m->opts = nmenopts;
m->numopts++;
- pset->num++;
}
static void
@@ -1561,7 +1564,6 @@ remove_partition_adder(menudesc *m, stru
memmove(m->opts+off, m->opts+off+1,
(m->numopts-off-1)*sizeof(*m->opts));
m->numopts--;
- pset->num--;
}
/*
@@ -1571,6 +1573,9 @@ remove_partition_adder(menudesc *m, stru
static void
show_partition_adder(menudesc *m, struct partition_usage_set *pset)
{
+ if (m->opts == NULL)
+ return;
+
bool can_add_partition = pset->parts->pscheme->can_add_partition(
pset->parts);
bool part_adder_present =
@@ -1605,7 +1610,8 @@ edit_fspart_abort(menudesc *m, void *arg
* Ask the user if they want to edit the partition or give up.
*/
int
-edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset)
+edit_and_check_label(struct pm_devs *p, struct partition_usage_set *pset,
+ bool install)
{
menu_ent *op;
size_t cnt, i;
@@ -1697,7 +1703,7 @@ edit_and_check_label(struct pm_devs *p,
}
/* User thinks the label is OK. */
- i = verify_parts(pset);
+ i = verify_parts(pset, install);
if (i == 1)
continue;
break;
Index: src/usr.sbin/sysinst/mbr.c
diff -u src/usr.sbin/sysinst/mbr.c:1.23 src/usr.sbin/sysinst/mbr.c:1.24
--- src/usr.sbin/sysinst/mbr.c:1.23 Fri Dec 13 22:12:41 2019
+++ src/usr.sbin/sysinst/mbr.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: mbr.c,v 1.23 2019/12/13 22:12:41 martin Exp $ */
+/* $NetBSD: mbr.c,v 1.24 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -149,6 +149,13 @@ const struct disk_partitioning_scheme di
static void convert_mbr_chs(int, int, int, uint8_t *, uint8_t *,
uint8_t *, uint32_t);
+static part_id mbr_add_part(struct disk_partitions *arg,
+ const struct disk_part_info *info, const char **errmsg);
+
+static size_t mbr_get_free_spaces(const struct disk_partitions *arg,
+ struct disk_part_free_space *result, size_t max_num_result,
+ daddr_t min_size, daddr_t align, daddr_t lower_bound, daddr_t ignore);
+
/*
* Notes on the extended partition editor.
*
@@ -827,7 +834,7 @@ 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,
- bool is_boot_drive)
+ bool is_boot_drive, struct disk_partitions *parent)
{
struct mbr_disk_partitions *parts;
@@ -1708,16 +1715,33 @@ mbr_read_disklabel(struct disk_partition
struct mbr_disk_partitions *myparts =
(struct mbr_disk_partitions*)arg;
struct disk_part_info part;
+ struct disk_part_free_space space;
if (force_empty && myparts->dlabel)
- myparts->dlabel->pscheme->delete_all_partitions(myparts->dlabel);
+ myparts->dlabel->pscheme->delete_all_partitions(
+ myparts->dlabel);
if (myparts->dlabel == NULL) {
/*
* Find the NetBSD MBR partition
*/
- if (!mbr_find_netbsd(&myparts->mbr, start, &part))
- return NULL;
+ if (!mbr_find_netbsd(&myparts->mbr, start, &part)) {
+ if (!force_empty)
+ return NULL;
+
+ /* add a "whole disk" NetBSD partition */
+ memset(&part, 0, sizeof part);
+ part.start = min(myparts->ptn_0_offset,start);
+ if (!mbr_get_free_spaces(arg, &space, 1,
+ part.start, myparts->ptn_alignment, -1, -1))
+ return NULL;
+ part.start = space.start;
+ part.size = space.size;
+ part.nat_type = &mbr_gen_type_desc[MBR_PTYPE_NETBSD].gen;
+ mbr_add_part(arg, &part, NULL);
+ if (!mbr_find_netbsd(&myparts->mbr, start, &part))
+ return NULL;
+ }
if (!force_empty)
myparts->dlabel = disklabel_parts.read_from_disk(
@@ -1729,15 +1753,13 @@ 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.disk_size, false, &myparts->dp);
}
- if (myparts->dlabel != NULL) {
- myparts->dlabel->parent = arg;
+ if (myparts->dlabel != NULL)
myparts->dlabel->pscheme->change_disk_geom(
myparts->dlabel, myparts->geo_cyl,
myparts->geo_head, myparts->geo_sec);
- }
}
return myparts->dlabel;
}
@@ -2808,7 +2830,7 @@ add_wedge(const char *disk, daddr_t star
dkw.dkw_offset = start;
dkw.dkw_size = size;
snprintf((char*)dkw.dkw_wname, sizeof dkw.dkw_wname,
- "%s_%" PRIi64 "@%" PRIi64, (const char*)disk, size, start);
+ "%s_%" PRIi64 "@%" PRIi64, disk, size, start);
*wname = 0;
@@ -2827,7 +2849,7 @@ add_wedge(const char *disk, daddr_t star
static bool
mbr_get_part_device(const struct disk_partitions *arg,
part_id ptn, char *devname, size_t max_devname_len, int *part,
- enum dev_name_usage usage, bool with_path)
+ enum dev_name_usage usage, bool with_path, bool life)
{
const struct mbr_disk_partitions *parts =
(const struct mbr_disk_partitions*)arg;
@@ -2857,7 +2879,7 @@ mbr_get_part_device(const struct disk_pa
return parts->dlabel->pscheme->get_part_device(
parts->dlabel, dptn, devname,
max_devname_len,
- part, usage, with_path);
+ part, usage, with_path, life);
}
}
Index: src/usr.sbin/sysinst/menus.mi
diff -u src/usr.sbin/sysinst/menus.mi:1.19 src/usr.sbin/sysinst/menus.mi:1.20
--- src/usr.sbin/sysinst/menus.mi:1.19 Tue Jul 23 16:02:32 2019
+++ src/usr.sbin/sysinst/menus.mi Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: menus.mi,v 1.19 2019/07/23 16:02:32 martin Exp $ */
+/* $NetBSD: menus.mi,v 1.20 2020/01/09 13:22:30 martin Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -195,16 +195,6 @@ remove_lvm_options()
}
void
-remove_gpt_options()
-{
- /*
- * No GPT available, remove the following menu entries:
- */
- remove_menu_option(MENU_pmdiskentry, MSG_switchgpt);
- remove_menu_option(MENU_pmpartentry, MSG_switchgpt);
-}
-
-void
remove_cgd_options()
{
/*
Index: src/usr.sbin/sysinst/msg.mi.de
diff -u src/usr.sbin/sysinst/msg.mi.de:1.19 src/usr.sbin/sysinst/msg.mi.de:1.20
--- src/usr.sbin/sysinst/msg.mi.de:1.19 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/msg.mi.de Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.de,v 1.19 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: msg.mi.de,v 1.20 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1220,15 +1220,12 @@ message failed {Fehlgeschlagen}
message notsupported {Operation wird nicht unterst�tzt!}
message askfsmountadv {Mountpoint oder 'raid' oder 'cgd' oder 'lvm'?}
message partman {Erweiterte Partitionierung}
-message editbsdpart {NetBSD Partitionen bearbeiten}
+message edit_parts {Partitionen bearbeiten}
message editpart {Partitionen bearbeiten}
-message editmbr {MBR bearbeiten und speichern}
-message switchgpt {Wechseln zu GPT}
-message switchmbr {Wechseln zu MBR}
-message renamedisk {Festplatten-Namen festlegen}
-message fmtasraid {Format als RAID}
-message fmtaslvm {Format als LVM-PV}
-message encrypt {Verschl�sseln}
+message switch_parts {Switch partitioning scheme}
+message fmtasraid {Als RAID Komponente formatieren}
+message fmtaslvm {Als LVM-PV formatieren}
+message encrypt {Verschl�sseln (CGD)}
message setbootable {Boot-Flag}
message erase {Safe Erase}
message undo {R�ckg�ngigmachen von �nderungen}
Index: src/usr.sbin/sysinst/menus.pm
diff -u src/usr.sbin/sysinst/menus.pm:1.2 src/usr.sbin/sysinst/menus.pm:1.3
--- src/usr.sbin/sysinst/menus.pm:1.2 Wed Jun 12 06:20:17 2019
+++ src/usr.sbin/sysinst/menus.pm Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: menus.pm,v 1.2 2019/06/12 06:20:17 martin Exp $ */
+/* $NetBSD: menus.pm,v 1.3 2020/01/09 13:22:30 martin Exp $ */
/* NetBSD: menus.mi,v 1.14 2018/09/11 08:05:18 martin Exp */
/*-
@@ -32,51 +32,37 @@
/* Menu system definitions -- extended partitioning */
+/* arg is a struct part_entry* */
menu pmdiskentry, x=50, y=5, exit, default exit;
- option MSG_editbsdpart, exit, action
- {
-#ifndef NO_DISKLABEL /* XXX ??? */
- make_bsd_partitions(NULL);
-#endif
- };
- option MSG_editmbr, exit, action {
- md_get_info(NULL);
- md_pre_disklabel(NULL, pm->parts);
- };
- option MSG_switchgpt, exit, action {
- const char *err;
- if (!convert_scheme(pm, false, &err))
- err_msg_win(err);
- else
- pm_partusage(pm, -1, 1);
- };
- option MSG_renamedisk, exit, action {
- pm->unsaved = 1; pm_rename(pm);
- };
- option MSG_fmtasraid, exit, action {
- pm->unsaved = 1;
- pm_partusage(pm, -1, 1);
- (*(enum setup_type*)arg) = SY_NEWRAID;
- md_make_bsd_partitions(NULL);
- };
- option MSG_fmtaslvm, exit, action {
- pm->unsaved = 1;
- pm_partusage(pm, -1, 1);
- (*(enum setup_type*)arg) = SY_NEWLVM;
- md_make_bsd_partitions(NULL);
+ display action { pmdiskentry_enable(menu, arg); };
+ option MSG_edit_parts, exit, action { pm_edit_partitions(arg); };
+ option MSG_switch_parts, exit, action {
+ struct pm_devs *my_pm = pm_from_pe(arg);
+ const char *err;
+
+ if (!convert_scheme(my_pm, false, &err))
+ err_msg_win(err);
+ else
+ pm_partusage(my_pm, -1, 1);
};
- option MSG_encrypt, exit, action {
- pm->unsaved = 1;
- pm_partusage(pm, -1, 1);
- (*(enum setup_type*)arg) = SY_NEWCGD;
- md_make_bsd_partitions(NULL);
- pm_cgd_edit(0, &(struct part_entry)
- {.dev_ptr = pm, .index = 0 }
- );
- };
- option MSG_setbootable, exit, action {
- pm->unsaved = 1;
- pm->bootable = !pm->bootable;
+ option MSG_fmtasraid, exit, action
+ {
+ pm_whole_disk(arg, SY_NEWRAID);
+ };
+ option MSG_fmtaslvm, exit, action
+ {
+ part_id new_part;
+
+ new_part = pm_whole_disk(arg, SY_NEWLVM);
+ if (new_part != NO_PART)
+ pm_set_lvmpv(pm_from_pe(arg), new_part, true);
+ };
+ option MSG_encrypt, exit, action
+ {
+ part_id new_part;
+ new_part = pm_whole_disk(arg, SY_NEWCGD);
+ if (new_part != NO_PART)
+ pm_cgd_edit_new(pm_from_pe(arg), new_part);
};
option MSG_erase, next menu shred_modes;
option MSG_undo, exit, action {
@@ -88,120 +74,109 @@ menu pmdiskentry, x=50, y=5, exit, defau
pm_partusage(pm, -1, 1);
};
+/* arg is a struct part_entry* */
menu pmpartentry, x=50, y=5, exit, default exit;
- option MSG_edit, exit, action {
- pm->unsaved = 1;
- uint tpfs = 0; /*PI_FSTYPE(&pm->bsdlabel[*(int*)arg]);*/
- // int tplvm = 0; /* pm->bsdlabel[*(int*)arg].lvmpv; */
- pm_editpart(*(int*)arg);
- if (tpfs != 0 /*PI_FSTYPE(&pm->bsdlabel[*(int*)arg]) ||
- tplvm != pm->bsdlabel[*(int*)arg].lvmpv */)
- /* Oops, partition type changed */
- pm_partusage(pm, *(int*)arg, 1);
- };
- option MSG_fmtasraid, exit, action {
- if (pm->no_part) {
- hit_enter_to_continue(NULL, MSG_notsupported);
- return -1;
- }
- pm->unsaved = 1;
- pm_partusage(pm, *(int*)arg, 1);
- pm_setfstype(pm, (part_id)*(int*)arg, FS_RAID, 0);
- };
- option MSG_fmtaslvm, exit, action {
- if (pm->no_part) {
- hit_enter_to_continue(NULL, MSG_notsupported);
- return -1;
- }
- pm->unsaved = 1;
- pm_partusage(pm, *(int*)arg, 1);
- pm_setfstype(pm, (part_id)*(int*)arg, FS_BSDFFS, 2);
- /* pm->bsdlabel[*(int*)arg].lvmpv = 1; */
- };
- option MSG_encrypt, exit, action {
- if (pm->no_part) {
- hit_enter_to_continue(NULL, MSG_notsupported);
- return -1;
- }
- pm->unsaved = 1;
- pm_partusage(pm, *(int*)arg, 1);
- pm_setfstype(pm, (part_id)*(int*)arg, FS_CGD, 0);
- pm_cgd_edit(0,
- &(struct part_entry){.dev_ptr = pm,
- .id = *(int*)arg});
- };
- option MSG_erase, next menu shred_modes;
- option MSG_doumount, exit, action { pm_umount(pm, *(int*)arg); };
- option MSG_Delete_partition, exit, action {
- pm->unsaved = 1;
- pm_partusage(pm, *(int*)arg, 1);
- if (pm->no_part)
- pm_unconfigure(pm);
- else
- pm_setfstype(pm, (part_id)*(int*)arg, FS_UNUSED, 0);
- };
-
-menu pmgptentry, x=50, y=8, exit, default exit;
- option MSG_editpart, exit, action { /* pm_make_gpt_partitions(pm); */ };
- option MSG_switchmbr, exit, action
- {
- const char *err;
- if (!convert_scheme(pm, false, &err))
- err_msg_win(err);
- else
- pm_partusage(pm, -1, 1);
- };
- option MSG_setbootable, exit, action
- {
+ option MSG_edit, exit, action
+ {
+ struct part_entry *cur_pe = arg;
+ pm->unsaved = 1;
+ pm_editpart(cur_pe->id);
+ pm_partusage(pm, cur_pe->id, 1);
+ };
+ option MSG_fmtasraid, exit, action {
+ if (pm->no_part) {
+ hit_enter_to_continue(NULL, MSG_notsupported);
+ return -1;
+ }
+ struct part_entry *cur_pe = arg;
+ pm->unsaved = 1;
+ pm_partusage(pm, cur_pe->id, 1);
+ pm_setfstype(pm, cur_pe->id, FS_RAID, 0);
+ };
+ option MSG_fmtaslvm, exit, action {
+ if (pm->no_part) {
+ hit_enter_to_continue(NULL, MSG_notsupported);
+ return -1;
+ }
+ struct part_entry *cur_pe = arg;
+ pm->unsaved = 1;
+ pm_partusage(pm, cur_pe->id, 1);
+ pm_setfstype(pm, cur_pe->id, FS_BSDFFS, 2);
+ pm_set_lvmpv(pm, cur_pe->id, true);
+ };
+ option MSG_encrypt, exit, action {
+ if (pm->no_part) {
+ hit_enter_to_continue(NULL, MSG_notsupported);
+ return -1;
+ }
+ struct part_entry *cur_pe = arg;
pm->unsaved = 1;
- pm->bootable = !pm->bootable;
- };
+ pm_partusage(pm, cur_pe->id, 1);
+ pm_setfstype(pm, cur_pe->id, FS_CGD, 0);
+ pm_cgd_edit_old(cur_pe);
+ };
option MSG_erase, next menu shred_modes;
- option MSG_undo, exit, action
- {
- /* label_read(); */ pm->unsaved = 0;
- pm_partusage(pm, -1, 1);
- };
- option MSG_unconfig, exit, action
- {
- if (pm_unconfigure(pm) == 0)
- pm_partusage(pm, -1, 1);
- };
+ option MSG_doumount, exit, action {
+ struct part_entry *cur_pe = arg;
+ pm_umount(pm, cur_pe->id);
+ };
+ option MSG_Delete_partition, exit, action {
+ struct part_entry *cur_pe = arg;
+ pm->unsaved = 1;
+ pm_partusage(pm, cur_pe->id, 1);
+ if (pm->no_part)
+ pm_unconfigure(pm);
+ else
+ pm_setfstype(pm, cur_pe->id, FS_UNUSED, 0);
+ };
+/* arg is a struct part_entry* */
menu shred_modes, x=50, y=5, exit, default exit;
- option MSG_fillzeros, exit,
- action { pm_shred(pm, *(int*)arg, SHRED_ZEROS); };
+ option MSG_fillzeros, exit,
+ action { pm_shred(arg, SHRED_ZEROS); };
option MSG_fillrandom, exit,
- action { pm_shred(pm, *(int*)arg, SHRED_RANDOM); };
- option MSG_fillcrypto, exit,
- action { pm_shred(pm, *(int*)arg, SHRED_CRYPTO); };
+ action { pm_shred(arg, SHRED_RANDOM); };
+/* arg is a int pointer for the requested raid level */
menu raidlevel;
option MSG_raid0, exit, action { *(int *)arg = 0; };
option MSG_raid1, exit, action { *(int *)arg = 1; };
option MSG_raid4, exit, action { *(int *)arg = 4; };
option MSG_raid5, exit, action { *(int *)arg = 5; };
+/* arg is a const char ** set to the selected encryption type */
menu cgd_enctype;
- option "aes-xts", exit, action { *(const char**)arg = "aes-xts"; };
- option "aes-cbc", exit, action { *(const char**)arg = "aes-cbc"; };
- option "3des-cbc", exit, action { *(const char**)arg = "3des-cbc"; };
- option "blowfish-cbc", exit, action { *(const char**)arg = "blowfish-cbc"; };
+ option "aes-xts", exit, action { *(const char**)arg = "aes-xts"; };
+ option "aes-cbc", exit, action { *(const char**)arg = "aes-cbc"; };
+ option "3des-cbc", exit, action { *(const char**)arg = "3des-cbc"; };
+ option "blowfish-cbc", exit, action
+ { *(const char**)arg = "blowfish-cbc"; };
+/* arg is a const char ** set to the requested iv type */
menu cgd_ivtype;
- option "encblkno1", exit, action { *(const char**)arg = "encblkno1"; };
- option "encblkno8", exit, action { *(const char**)arg = "encblkno8"; };
+ option "encblkno1", exit, action { *(const char**)arg = "encblkno1"; };
+ option "encblkno8", exit, action { *(const char**)arg = "encblkno8"; };
+/* arg is const char ** set to the key gen type */
menu cgd_keygentype;
- option "pkcs5_pbkdf2/sha1", exit, action { *(const char**)arg = "pkcs5_pbkdf2/sha1"; };
- option "pkcs5_pbkdf2", exit, action { *(const char**)arg = "pkcs5_pbkdf2"; };
- option "storedkey", exit, action { *(const char**)arg = "storedkey"; };
- option "randomkey", exit, action { *(const char**)arg = "randomkey"; };
- option "urandomkey", exit, action { *(const char**)arg = "urandomkey"; };
- option "shell_cmd", exit, action { *(const char**)arg = "shell_cmd"; };
+ option "pkcs5_pbkdf2/sha1", exit, action
+ { *(const char**)arg = "pkcs5_pbkdf2/sha1"; };
+ option "pkcs5_pbkdf2", exit, action
+ { *(const char**)arg = "pkcs5_pbkdf2"; };
+ option "storedkey", exit, action
+ { *(const char**)arg = "storedkey"; };
+ option "randomkey", exit, action
+ { *(const char**)arg = "randomkey"; };
+ option "urandomkey", exit, action
+ { *(const char**)arg = "urandomkey"; };
+ option "shell_cmd", exit, action
+ { *(const char**)arg = "shell_cmd"; };
+/* art is a const char ** set to the requested verification type */
menu cgd_verifytype;
- option "none", exit, action { *(const char**)arg = "none"; };
- option "disklabel", exit, action { *(const char**)arg = "disklabel"; };
- option "ffs", exit, action { *(const char**)arg = "ffs"; };
- option "re-enter", exit, action { *(const char**)arg = "re-enter"; };
+ option "none", exit, action { *(const char**)arg = "none"; };
+ option "disklabel", exit, action { *(const char**)arg = "disklabel"; };
+ option "MBR", exit, action { *(const char**)arg = "mbr"; };
+ option "GPT", exit, action { *(const char**)arg = "gpt"; };
+ option "ffs", exit, action { *(const char**)arg = "ffs"; };
+ option "re-enter", exit, action { *(const char**)arg = "re-enter"; };
Index: src/usr.sbin/sysinst/msg.mi.en
diff -u src/usr.sbin/sysinst/msg.mi.en:1.26 src/usr.sbin/sysinst/msg.mi.en:1.27
--- src/usr.sbin/sysinst/msg.mi.en:1.26 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/msg.mi.en Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.en,v 1.26 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: msg.mi.en,v 1.27 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1150,15 +1150,12 @@ message failed {Failed}
message notsupported {Operation not supported!}
message askfsmountadv {Mountpoint (or 'raid', 'cgd', 'lvm')?}
message partman {Extended partitioning}
-message editbsdpart {Edit NetBSD partitions}
+message edit_parts {Edit partitions}
message editpart {Edit partitions}
-message editmbr {Edit and save MBR}
-message switchgpt {Switch to GPT}
-message switchmbr {Switch to MBR}
-message renamedisk {Set disk name}
+message switch_parts {Switch partitioning scheme}
message fmtasraid {Format as RAID}
message fmtaslvm {Format as LVM PV}
-message encrypt {Encrypt}
+message encrypt {Encrypt (CGD)}
message setbootable {Bootable flag}
message erase {Safe erase}
message undo {Undo changes}
Index: src/usr.sbin/sysinst/msg.mi.es
diff -u src/usr.sbin/sysinst/msg.mi.es:1.20 src/usr.sbin/sysinst/msg.mi.es:1.21
--- src/usr.sbin/sysinst/msg.mi.es:1.20 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/msg.mi.es Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.es,v 1.20 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: msg.mi.es,v 1.21 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1201,15 +1201,12 @@ message failed {Error}
message notsupported {Operaci�n no admitida!}
message askfsmountadv {Punto de montaje o 'raid' o 'CGD' o 'lvm'?}
message partman {Partici�n extendida}
-message editbsdpart {Editar particiones NetBSD}
+message edit_parts {Editar particiones}
message editpart {Editar particiones}
-message editmbr {Editar y guardar MBR}
-message switchgpt {Cambiar a GPT}
-message switchmbr {Cambiar a MBR}
-message renamedisk {Establece el nombre del disco}
+message switch_parts {Switch partitioning scheme}
message fmtasraid {Formato como RAID}
message fmtaslvm {Formato como LVM PV}
-message encrypt {Cifrar}
+message encrypt {Cifrar (CGD)}
message setbootable {La bandera de arranque}
message erase {Borrado seguro}
message undo {Deshacer los cambios}
Index: src/usr.sbin/sysinst/msg.mi.fr
diff -u src/usr.sbin/sysinst/msg.mi.fr:1.24 src/usr.sbin/sysinst/msg.mi.fr:1.25
--- src/usr.sbin/sysinst/msg.mi.fr:1.24 Wed Dec 11 19:23:37 2019
+++ src/usr.sbin/sysinst/msg.mi.fr Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.fr,v 1.24 2019/12/11 19:23:37 martin Exp $ */
+/* $NetBSD: msg.mi.fr,v 1.25 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1253,15 +1253,12 @@ message failed {�chou�}
message notsupported {Le fonctionnement n'est pas pris en charge!}
message askfsmountadv {Point de montage ou de 'raid' ou 'cgd' ou 'lvm'?}
message partman {Partitionnement �tendu}
-message editbsdpart {Modifier les partitions NetBSD}
+message edit_parts {Modifier les partitions}
message editpart {Modifier les partitions}
-message editmbr {Modifiez et enregistrez MBR}
-message switchgpt {Mettre � GPT}
-message switchmbr {Basculer vers MBR}
-message renamedisk {D�finir le nom du disque}
+message switch_parts {Switch partitioning scheme}
message fmtasraid {Format en RAID}
message fmtaslvm {Format de LVM PV}
-message encrypt {Crypter}
+message encrypt {Crypter (CGD)}
message setbootable {Drapeau d'amor�age}
message erase {Fonction d'effacement s�curis�}
message undo {Annuler les changements}
Index: src/usr.sbin/sysinst/msg.pm.de
diff -u src/usr.sbin/sysinst/msg.pm.de:1.1 src/usr.sbin/sysinst/msg.pm.de:1.2
--- src/usr.sbin/sysinst/msg.pm.de:1.1 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.pm.de Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.pm.de,v 1.1 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.pm.de,v 1.2 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -34,9 +34,8 @@
/* extended partition manager message catalog -- German, machine independent */
-message fillzeros {F�llen von Nullen}
-message fillrandom {F�llen von zuf�lligen Daten}
-message fillcrypto {F�llen von Crypto-Daten}
+message fillzeros {F�llen mit Nullen}
+message fillrandom {F�llen mit zuf�lligen Daten}
message raid0 {0 - Keine Parit�t, nur einfache Striping.}
message raid1 {1 - Mirroring. Die Parit�t ist der Spiegel.}
message raid4 {4 - Striping mit Parit�t auf die letzte Komponente gespeichert.}
@@ -45,15 +44,14 @@ message raid5 {5 - Striping mit Parit�t
message wannaunblock {Das Ger�t ist gespert. Wollen Sie es zwangsweise entsperren und fortsetzen?}
message wannatry {Wollen Sie probieren?}
message create_cgd {Erstellen eines kryptographische Datentr�gers (CGD)}
-message create_cnd {Erstellen eines virtuelle Disk-Images (VND)}
+message create_vnd {Erstellen eines virtuelle Disk-Images (VND)}
message create_vg {Erstellen einer Volume-Gruppe (LVM VG)}
message create_lv {Erstellen eines logischen Volumes}
message create_raid {Erstellen eines Software-RAID}
message updpmlist {Aktualisieren der Ger�te-Liste}
message savepm {Speichern der �nderungen}
message pmblocked {GESPERRT}
-message pmunchanged {NICHTS}
-message pmsetboot {BOOTEN}
+message pmunchanged {UNVER�NDERT}
message pmused {BENUTZT}
message pmmounted {(montiert)}
message pmunused {(unbenutzt)}
Index: src/usr.sbin/sysinst/msg.pm.en
diff -u src/usr.sbin/sysinst/msg.pm.en:1.1 src/usr.sbin/sysinst/msg.pm.en:1.2
--- src/usr.sbin/sysinst/msg.pm.en:1.1 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.pm.en Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.pm.en,v 1.1 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.pm.en,v 1.2 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -36,7 +36,6 @@
message fillzeros {Fill with zeros}
message fillrandom {Fill with random data}
-message fillcrypto {Fill with crypto data}
message raid0 {0 - No parity, simple striping.}
message raid1 {1 - Mirroring. The parity is the mirror.}
message raid4 {4 - Striping with parity stored on the last component.}
@@ -47,7 +46,7 @@ Device is blocked. Editing it may cause
Do you want to force unblock it and continue?}
message wannatry {Do you want to try?}
message create_cgd {Create cryptographic volume (CGD)}
-message create_cnd {Create virtual disk image (VND)}
+message create_vnd {Create virtual disk image (VND)}
message create_vg {Create volume group (LVM VG)}
message create_lv {Create logical volume}
message create_raid {Create software RAID}
@@ -55,7 +54,6 @@ message updpmlist {Update device list}
message savepm {Save changes}
message pmblocked {BLOCKED}
message pmunchanged {UNCHANGED}
-message pmsetboot {BOOT}
message pmused {USED}
message pmmounted {(mounted)}
message pmunused {(unused)}
Index: src/usr.sbin/sysinst/msg.pm.es
diff -u src/usr.sbin/sysinst/msg.pm.es:1.1 src/usr.sbin/sysinst/msg.pm.es:1.2
--- src/usr.sbin/sysinst/msg.pm.es:1.1 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.pm.es Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.pm.es,v 1.1 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.pm.es,v 1.2 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -36,7 +36,6 @@
message fillzeros {Llenar con ceros}
message fillrandom {Llene los datos al azar}
-message fillcrypto {Rellene los datos de cifrado}
message raid0 {0 - Sin paridad, creaci�n de bandas s�lo es simple.}
message raid1 {1 - Creaci�n de reflejos. La paridad es el espejo.}
message raid4 {4 - Striping con paridad almacenada en el �ltimo componente. component.}
@@ -45,7 +44,7 @@ message raid5 {5 - Striping con paridad
message wannaunblock {El dispositivo est� bloqueado. �Quiere forzar a desbloquear y continuar? unblock it and continue?}
message wannatry {�Quieres probar?}
message create_cgd {Crear cifrado de volumen (CGD)}
-message create_cnd {Crear imagen de disco virtual (VND)}
+message create_vnd {Crear imagen de disco virtual (VND)}
message create_vg {Crear grupo de vol�menes (LVM VG)}
message create_lv {Crear vol�menes l�gicos}
message create_raid {Crear RAID por software}
@@ -53,7 +52,6 @@ message updpmlist {Actualizar lista de d
message savepm {Guardar los cambios}
message pmblocked {BLOQUEADO}
message pmunchanged {SIN USO}
-message pmsetboot {ARRANCAR}
message pmused {UTILIZA}
message pmmounted {(montado)}
message pmunused {(sin usar)}
Index: src/usr.sbin/sysinst/msg.pm.fr
diff -u src/usr.sbin/sysinst/msg.pm.fr:1.1 src/usr.sbin/sysinst/msg.pm.fr:1.2
--- src/usr.sbin/sysinst/msg.pm.fr:1.1 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.pm.fr Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.pm.fr,v 1.1 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.pm.fr,v 1.2 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -36,7 +36,6 @@
message fillzeros {Remplir de z�ros}
message fillrandom {Remplissez par des donn�es al�atoires}
-message fillcrypto {Remplissez par crypto donn�es}
message raid0 {0 - Pas de parit�, l'entrelacement seulement simple.}
message raid1 {1 - Mirroring. La parit� est le miroir.}
message raid4 {4 - Entrelacement avec parit� stock�es sur le dernier composant. component.}
@@ -45,7 +44,7 @@ message raid5 {5 - Entrelacement avec pa
message wannaunblock {L'appareil est bloqu�. Voulez-vous forcer le d�bloquer et continuer? unblock it and continue?}
message wannatry {Voulez-vous essayer?}
message create_cgd {Le volume cryptographique Cr�er (CGD)}
-message create_cnd {Cr�er une image de disque virtuel (VND)}
+message create_vnd {Cr�er une image de disque virtuel (VND)}
message create_vg {Cr�er un groupe de volumes LVM (VG)}
message create_lv {Cr�er un volume logique}
message create_raid {Cr�er un RAID logiciel}
@@ -53,7 +52,6 @@ message updpmlist {Mettre � jour la list
message savepm {Enregistrer les modifications}
message pmblocked {BLOQUE}
message pmunchanged {INCHANG�}
-message pmsetboot {BOOT}
message pmused {UTILIS�}
message pmmounted {(mont�)}
message pmunused {(non utilis�)}
Index: src/usr.sbin/sysinst/msg.pm.pl
diff -u src/usr.sbin/sysinst/msg.pm.pl:1.1 src/usr.sbin/sysinst/msg.pm.pl:1.2
--- src/usr.sbin/sysinst/msg.pm.pl:1.1 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.pm.pl Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.pm.pl,v 1.1 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.pm.pl,v 1.2 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -36,7 +36,6 @@
message fillzeros {Wype�nij zerami}
message fillrandom {Wype�nij losowymi danymi}
-message fillcrypto {Wype�nij przez crypto danych}
message raid0 {0 - brak parzysto�ci, tylko proste rozk�adanie.}
message raid1 {1 - Mirroring. Parytet jest lustro.}
message raid4 {4 - Malowanie z parytetu przechowywanych w ostatniej cz�ci.}
@@ -45,7 +44,7 @@ message raid5 {5 - Malowanie z parytetu
message wannaunblock {Urz�dzenie jest zablokowane. Czy chcesz, aby zmusi� go odblokowa� i kontynuowa�?}
message wannatry {Czy chcesz spr�bowa�?}
message create_cgd {Utw�rz wolumen kryptograficznych (CGD)}
-message create_cnd {Utw�rz wirtualnego obraz dysku (VND)}
+message create_vnd {Utw�rz wirtualnego obraz dysku (VND)}
message create_vg {Utw�rz grup� wolumin�w (LVM VG)}
message create_lv {Utw�rz wolumin logiczny}
message create_raid {Utw�rz oprogramowania RAID}
@@ -53,7 +52,6 @@ message updpmlist {Aktualizuj list� urz�
message savepm {Zapisz zmiany}
message pmblocked {ZABLOK.}
message pmunchanged {BEZ ZMIAN}
-message pmsetboot {BOOT}
message pmused {U�YWANE}
message pmmounted {(zamontowany)}
message pmunused {(nieu�ywany)}
Index: src/usr.sbin/sysinst/partitions.h
diff -u src/usr.sbin/sysinst/partitions.h:1.12 src/usr.sbin/sysinst/partitions.h:1.13
--- src/usr.sbin/sysinst/partitions.h:1.12 Thu Dec 26 04:53:12 2019
+++ src/usr.sbin/sysinst/partitions.h Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partitions.h,v 1.12 2019/12/26 04:53:12 msaitoh Exp $ */
+/* $NetBSD: partitions.h,v 1.13 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -225,6 +225,12 @@ struct disk_partitioning_scheme {
const struct part_type_desc * (*get_fs_part_type)(
enum part_type, unsigned, unsigned);
/*
+ * Optional: inverse to above: given a part_type_desc, set default
+ * fstype and subtype.
+ */
+ bool (*get_default_fstype)(const struct part_type_desc *,
+ unsigned *fstype, unsigned *fs_sub_type);
+ /*
* Create a custom partition type. If the type already exists
* (or there is a collision), the old existing type will be
* returned and no new type created. This is not considered
@@ -322,10 +328,14 @@ struct disk_partitioning_scheme {
* If with_path is true (and the returned value is a device
* node), include the /dev/ prefix in the result string
* (this is ignored when returning NAME= syntax for /etc/fstab).
+ * If life is true, the device must be made available under
+ * that name (only makes a difference for NAME=syntax if
+ * no wedge has been created yet,) - implied for all variants
+ * where dev_name_usage != logical_name.
*/
bool (*get_part_device)(const struct disk_partitions*,
part_id, char *devname, size_t max_devname_len, int *part,
- enum dev_name_usage, bool with_path);
+ enum dev_name_usage, bool with_path, bool life);
/*
* How big could we resize the given position (start of existing
@@ -433,7 +443,7 @@ struct disk_partitioning_scheme {
*/
struct disk_partitions * (*create_new_for_disk)(const char *,
daddr_t start, daddr_t len, daddr_t disk_total_size,
- bool is_boot_drive);
+ bool is_boot_drive, struct disk_partitions *parent);
/*
* Optional: this scheme may be used to boot from the given disk
Index: src/usr.sbin/sysinst/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.45 src/usr.sbin/sysinst/partman.c:1.46
--- src/usr.sbin/sysinst/partman.c:1.45 Fri Dec 13 22:12:41 2019
+++ src/usr.sbin/sysinst/partman.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: partman.c,v 1.45 2019/12/13 22:12:41 martin Exp $ */
+/* $NetBSD: partman.c,v 1.46 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 2012 Eugene Lozovoy
@@ -63,6 +63,7 @@
#include <fcntl.h>
#include <errno.h>
#include <libgen.h>
+#include <paths.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -129,6 +130,13 @@ struct cgd_desc *cgds;
#define MAX_LVM_VG 16
#define MAX_LVM_PV 255
#define MAX_LVM_LV 255
+
+struct lvm_pv_reg {
+ struct pm_devs *pm;
+ daddr_t start;
+};
+struct lvm_pv_reg lvm_pvs[MAX_LVM_PV]; /* XXX - make dynamic */
+
typedef struct pv_t {
struct pm_devs *pm;
char pm_name[SSTRSIZE];
@@ -192,9 +200,10 @@ struct {
const char *mnt_opts, *on;
} *mnts;
-int cursel; /* Number of selected entry in main menu */
-int changed; /* flag indicating that we have unsaved changes */
-int raid_curspare; /* XXX: replace by true way */
+static int pm_cursel; /* Number of selected entry in main menu */
+static int pm_changed; /* flag indicating that we have unsaved changes */
+static int pm_raid_curspare; /* XXX: replace by true way */
+static int pm_retvalue;
enum { /* RAIDframe menu enum */
PMR_MENU_DEVS, PMR_MENU_DEVSSPARE, PMR_MENU_RAIDLEVEL, PMR_MENU_NUMROW,
@@ -251,7 +260,7 @@ pm_edit_size_value(msg prompt_msg, daddr
new_size_val = parse_disk_pos(answer, &mult, cylsec, NULL);
if (new_size_val > 0)
- *size = new_size_val;
+ *size = new_size_val * mult;
}
static const char *
@@ -341,7 +350,9 @@ pm_dev_list(int type)
struct part_entry disk_entries[MAX_DISKS*MAXPARTITIONS];
struct pm_devs *pm_i;
- SLIST_FOREACH(pm_i, &pm_head, l)
+ SLIST_FOREACH(pm_i, &pm_head, l) {
+ if (pm_i->parts == NULL)
+ continue;
for (i = 0; i < pm_i->parts->num_part; i++) {
ok = false;
if (!pm_i->parts->pscheme->get_part_info(pm_i->parts,
@@ -360,8 +371,8 @@ pm_dev_list(int type)
ok = 1;
break;
case PM_LVM:
-// XXX if (pm_i->bsdlabel[i].lvmpv)
-// ok = 1;
+ if (pm_is_lvmpv(pm_i, i, &info))
+ ok = 1;
break;
}
if (!ok)
@@ -376,7 +387,7 @@ pm_dev_list(int type)
pm_i->parts->pscheme->get_part_device(
pm_i->parts, i, disk_entries[num_devs].fullname,
sizeof disk_entries[num_devs].fullname,
- NULL, plain_name, false);
+ NULL, plain_name, false, true);
menu_entries[num_devs] = (struct menu_ent) {
.opt_name = disk_entries[num_devs].fullname,
@@ -385,20 +396,21 @@ pm_dev_list(int type)
};
num_devs++;
}
+ }
menu_no = new_menu(MSG_avdisks,
menu_entries, num_devs, -1, -1,
(num_devs+1<3)?3:num_devs+1, 13,
MC_SCROLL | MC_NOCLEAR, NULL, NULL, NULL, NULL, MSG_cancel);
if (menu_no == -1)
- return (struct part_entry) { .retvalue = -1, };
+ return (struct part_entry) { };
process_menu(menu_no, &dev_num);
free_menu(menu_no);
if (dev_num < 0 || dev_num >= num_devs)
- return (struct part_entry) { .retvalue = -1, };
+ return (struct part_entry) { };
- disk_entries[dev_num].retvalue = dev_num;
+ pm_retvalue = dev_num;
return disk_entries[dev_num];
}
@@ -414,11 +426,16 @@ pm_manage_getfreenode(void *node, const
for (i = 0; i < s->max; i++) {
ok = 1;
/* Check that node is not already reserved */
- for (ii = 0; ii < s->max; ii++)
- if (*(int*)((char*)s->entry_node + s->entry_size * ii) == i) {
+ for (ii = 0; ii < s->max; ii++) {
+ if (*(int*)((char*)s->entry_enabled + s->entry_size
+ * ii) == 0)
+ continue;
+ if (*(int*)((char*)s->entry_node + s->entry_size * ii)
+ == i) {
ok = 0;
break;
}
+ }
if (! ok)
continue;
/* Check that node is not in the device list */
@@ -511,7 +528,7 @@ pm_raid_edit_menufmt(menudesc *m, int op
case PMR_MENU_DEVS:
strlcpy(buf, msg_string(MSG_raid_disks_fmt),
sizeof buf);
- strlcpy(buf, ": ", sizeof buf);
+ strlcat(buf, ": ", sizeof buf);
for (i = 0; i < MAX_IN_RAID; i++) {
if (dev_ptr->comp[i].parts == NULL ||
dev_ptr->comp[i].is_spare)
@@ -524,7 +541,7 @@ pm_raid_edit_menufmt(menudesc *m, int op
case PMR_MENU_DEVSSPARE:
strlcpy(buf, msg_string(MSG_raid_spares_fmt),
sizeof buf);
- strlcpy(buf, ": ", sizeof buf);
+ strlcat(buf, ": ", sizeof buf);
for (i = 0; i < MAX_IN_RAID; i++) {
if (dev_ptr->comp[i].parts == NULL ||
!dev_ptr->comp[i].is_spare)
@@ -595,11 +612,11 @@ pm_raid_set_value(menudesc *m, void *arg
switch (m->cursel) {
case PMR_MENU_DEVS:
- raid_curspare = 0;
+ pm_raid_curspare = 0;
process_menu(menu_disk_adddel, dev_ptr);
return 0;
case PMR_MENU_DEVSSPARE:
- raid_curspare = 1;
+ pm_raid_curspare = 1;
process_menu(menu_disk_adddel, dev_ptr);
return 0;
case PMR_MENU_RAIDLEVEL:
@@ -718,17 +735,17 @@ pm_raid_disk_add(menudesc *m, void *arg)
int i;
struct raid_desc *dev_ptr = arg;
struct part_entry disk_entrie = pm_dev_list(PM_RAID);
- if (disk_entrie.retvalue < 0)
- return disk_entrie.retvalue;
+ if (pm_retvalue < 0)
+ return pm_retvalue;
for (i = 0; i < MAX_IN_RAID; i++)
if (dev_ptr->comp[i].parts == NULL) {
dev_ptr->comp[i].parts = disk_entrie.parts;
dev_ptr->comp[i].id = disk_entrie.id;
- dev_ptr->comp[i].is_spare = raid_curspare;
+ dev_ptr->comp[i].is_spare = pm_raid_curspare;
strlcpy(dev_ptr->comp[i].name, disk_entrie.fullname,
sizeof dev_ptr->comp[i].name);
- if (raid_curspare)
+ if (pm_raid_curspare)
dev_ptr->numSpare++;
else
dev_ptr->numCol++;
@@ -750,7 +767,7 @@ pm_raid_disk_del(menudesc *m, void *arg)
for (i = 0; i < MAX_IN_RAID; i++) {
if (dev_ptr->comp[i].parts == NULL ||
- dev_ptr->comp[i].is_spare != raid_curspare)
+ dev_ptr->comp[i].is_spare != pm_raid_curspare)
continue;
menu_entries[num_devs] = (struct menu_ent) {
.opt_name = dev_ptr->comp[i].name,
@@ -791,7 +808,7 @@ pm_raid_commit(void)
{
int i, ii;
FILE *f;
- char f_name[STRSIZE];
+ char f_name[STRSIZE], devname[STRSIZE];
for (i = 0; i < MAX_RAID; i++) {
if (! pm_raid_check(&raids[i]))
@@ -814,20 +831,58 @@ pm_raid_commit(void)
raids[i].numRow, raids[i].numCol, raids[i].numSpare);
scripting_fprintf(f, "\nSTART disks\n");
- for (ii = 0; ii < MAX_IN_RAID; ii++)
+ for (ii = 0; ii < MAX_IN_RAID; ii++) {
if (raids[i].comp[ii].parts != NULL &&
!raids[i].comp[ii].is_spare) {
- scripting_fprintf(f, "/dev/%s\n",
- raids[i].comp[ii].name);
+ strcpy(devname, raids[i].comp[ii].name);
+ if (raids[i].comp[ii].parts != NULL &&
+ raids[i].comp[ii].id != NO_PART) {
+ /* wedge may have moved */
+ raids[i].comp[ii].parts->pscheme->
+ get_part_device(
+ raids[i].comp[ii].parts,
+ raids[i].comp[ii].id,
+ devname, sizeof devname, NULL,
+ logical_name, true, true);
+ raids[i].comp[ii].parts->pscheme->
+ get_part_device(
+ raids[i].comp[ii].parts,
+ raids[i].comp[ii].id,
+ raids[i].comp[ii].name,
+ sizeof raids[i].comp[ii].name,
+ NULL, plain_name, true, true);
+ }
+ scripting_fprintf(f, "%s\n", devname);
}
+ }
scripting_fprintf(f, "\nSTART spare\n");
- for (ii = 0; ii < MAX_IN_RAID; ii++)
+ for (ii = 0; ii < MAX_IN_RAID; ii++) {
if (raids[i].comp[ii].parts != NULL &&
raids[i].comp[ii].is_spare) {
- scripting_fprintf(f, "/dev/%s\n",
- raids[i].comp[ii].name);
+ strcpy(devname, raids[i].comp[ii].name);
+ if (raids[i].comp[ii].parts != NULL &&
+ raids[i].comp[ii].id != NO_PART) {
+ /* wedge may have moved */
+ raids[i].comp[ii].parts->pscheme->
+ get_part_device(
+ raids[i].comp[ii].parts,
+ raids[i].comp[ii].id,
+ devname, sizeof devname, NULL,
+ logical_name, true, true);
+ raids[i].comp[ii].parts->pscheme->
+ get_part_device(
+ raids[i].comp[ii].parts,
+ raids[i].comp[ii].id,
+ raids[i].comp[ii].name,
+ sizeof raids[i].comp[ii].name,
+ NULL, plain_name, true, true);
+ }
+
+ scripting_fprintf(f, "%s\n",
+ devname);
}
+ }
scripting_fprintf(f, "\nSTART layout\n%d %d %d %d\n",
raids[i].sectPerSU, raids[i].SUsPerParityUnit,
@@ -926,7 +981,7 @@ pm_vnd_edit_menufmt(menudesc *m, int opt
case PMV_MENU_SIZE:
if (!dev_ptr->is_exist)
snprintf(buf, SSTRSIZE, "%" PRIu64,
- dev_ptr->size);
+ dev_ptr->size / sizemult);
wprintw(m->mw, "%*s %s", -lcol_width,
msg_string(MSG_vnd_size_fmt), buf);
break;
@@ -1318,7 +1373,7 @@ pm_cgd_init(void *arg1, void *arg2)
disk_entrie->parts->pscheme->get_part_device(
disk_entrie->parts, disk_entrie->id,
disk_entrie->fullname, sizeof(disk_entrie->fullname),
- NULL, logical_name, false);
+ NULL, logical_name, false, true);
pm_cgd_disk_set(dev_ptr, disk_entrie);
}
}
@@ -1351,7 +1406,7 @@ pm_cgd_disk_set(struct cgd_desc *dev_ptr
if (disk_entrie == NULL)
return -2;
*disk_entrie = pm_dev_list(PM_CGD);
- if (disk_entrie->retvalue < 0) {
+ if (pm_retvalue < 0) {
free(disk_entrie);
return -1;
}
@@ -1366,32 +1421,58 @@ pm_cgd_disk_set(struct cgd_desc *dev_ptr
}
int
-pm_cgd_edit(void *dev_ptr, struct part_entry *disk_entrie)
+pm_cgd_edit_new(struct pm_devs *mypm, part_id id)
{
- if (disk_entrie != NULL)
- dev_ptr = NULL;
+ struct part_entry pe = { .id = id, .parts = mypm->parts,
+ .dev_ptr = mypm, .type = PM_CGD };
+
return pm_edit(PMC_MENU_END, pm_cgd_edit_menufmt,
pm_cgd_set_value, pm_cgd_check, pm_cgd_init,
- disk_entrie, dev_ptr, 0, &cgds_t_info);
+ &pe, NULL, 0, &cgds_t_info);
+}
+
+int
+pm_cgd_edit_old(struct part_entry *pe)
+{
+ return pm_edit(PMC_MENU_END, pm_cgd_edit_menufmt,
+ pm_cgd_set_value, pm_cgd_check, pm_cgd_init,
+ pe->dev_ptr != NULL ? pe : NULL,
+ pe->dev_ptr, 0, &cgds_t_info);
}
static int
pm_cgd_commit(void)
{
+ char devname[STRSIZE];
int i, error = 0;
+
for (i = 0; i < MAX_CGD; i++) {
if (! pm_cgd_check(&cgds[i]))
continue;
if (run_program(RUN_DISPLAY | RUN_PROGRESS,
- "cgdconfig -g -i %s -k %s -o /tmp/cgd.%d.conf %s %d",
+ "cgdconfig -g -V %s -i %s -k %s -o /tmp/cgd.%d.conf"
+ " %s %d", cgds[i].verify_type,
cgds[i].iv_type, cgds[i].keygen_type, cgds[i].node,
cgds[i].enc_type, cgds[i].key_size) != 0) {
error++;
continue;
}
+ if (cgds[i].pm != NULL && cgds[i].pm->parts != NULL) {
+ /* wedge device names may have changed */
+ cgds[i].pm->parts->pscheme->get_part_device(
+ cgds[i].pm->parts, cgds[i].pm_part,
+ devname, sizeof devname, NULL,
+ logical_name, true, true);
+ cgds[i].pm->parts->pscheme->get_part_device(
+ cgds[i].pm->parts, cgds[i].pm_part,
+ cgds[i].pm_name, sizeof cgds[i].pm_name, NULL,
+ plain_name, false, true);
+ } else {
+ continue;
+ }
if (run_program(RUN_DISPLAY | RUN_PROGRESS,
- "cgdconfig -V re-enter cgd%d /dev/%s /tmp/cgd.%d.conf",
- cgds[i].node, cgds[i].pm_name, cgds[i].node) != 0) {
+ "cgdconfig -V re-enter cgd%d '%s' /tmp/cgd.%d.conf",
+ cgds[i].node, devname, cgds[i].node) != 0) {
error++;
continue;
}
@@ -1458,10 +1539,10 @@ pm_lvm_disk_add(menudesc *m, void *arg)
int i;
lvms_t *dev_ptr = arg;
struct part_entry disk_entrie = pm_dev_list(PM_LVM);
- if (disk_entrie.retvalue < 0)
- return disk_entrie.retvalue;
+ if (pm_retvalue < 0)
+ return pm_retvalue;
- for (i = 0; i < MAX_LVM_PV; i++)
+ for (i = 0; i < MAX_LVM_PV; i++) {
if (dev_ptr->pv[i].pm == NULL) {
dev_ptr->pv[i].pm = disk_entrie.dev_ptr;
dev_ptr->pv[i].pm_part = disk_entrie.id;
@@ -1469,6 +1550,8 @@ pm_lvm_disk_add(menudesc *m, void *arg)
sizeof(dev_ptr->pv[i].pm_name));
break;
}
+ }
+ pm_retvalue = 1;
return 0;
}
@@ -2023,7 +2106,7 @@ int
pm_getrefdev(struct pm_devs *pm_cur)
{
int i, ii, dev_num, num_devs, num_devs_s;
- char descr[SSTRSIZE], dev[SSTRSIZE] = "";
+ char descr[MENUSTRSIZE], dev[MENUSTRSIZE] = "";
pm_cur->refdev = NULL;
if (! strncmp(pm_cur->diskdev, "cgd", 3)) {
@@ -2045,7 +2128,8 @@ pm_getrefdev(struct pm_devs *pm_cur)
pm_cur->refdev = &vnds[i];
vnds[i].pm->parts->pscheme->get_part_device(
vnds[i].pm->parts, vnds[i].pm_part,
- dev, sizeof dev, NULL, plain_name, false);
+ dev, sizeof dev, NULL, plain_name, false,
+ true);
snprintf(descr, sizeof descr, " (%s, %s)",
dev, vnds[i].filepath);
strlcat(pm_cur->diskdev_descr, descr,
@@ -2078,6 +2162,42 @@ pm_getrefdev(struct pm_devs *pm_cur)
return 0;
}
+/*
+ * Enable/disable items in the extended partition disk/partition action
+ * menu
+ */
+void
+pmdiskentry_enable(menudesc *menu, struct part_entry *pe)
+{
+ int i;
+ menu_ent *m;
+ bool enable;
+
+ for (i = 0; i < menu->numopts; i++) {
+ m = &menu->opts[i];
+
+ enable = false;
+ if (m->opt_name == MSG_unconfig) {
+ if (pe->type == PM_DISK)
+ enable = ((struct pm_devs *)pe->dev_ptr)
+ ->refdev != NULL;
+ } else if (m->opt_name == MSG_undo) {
+ if (pe->type != PM_DISK)
+ continue;
+ enable = ((struct pm_devs *)pe->dev_ptr)->unsaved;
+ } else if (m->opt_name == MSG_switch_parts) {
+ enable = pm_from_pe(pe)->parts != NULL;
+ } else {
+ continue;
+ }
+
+ if (enable)
+ m->opt_flags &= ~OPT_IGNORE;
+ else
+ m->opt_flags |= OPT_IGNORE;
+ }
+}
+
/* Detect that partition is in use */
int
pm_partusage(struct pm_devs *pm_cur, int part_num, int do_del)
@@ -2086,6 +2206,9 @@ pm_partusage(struct pm_devs *pm_cur, int
struct disk_part_info info;
part_id id;
+ if (pm_cur->parts == NULL)
+ return -1; /* nothing can be in use */
+
if (part_num < 0) {
/* Check all partitions on device */
for (id = 0; id < pm_cur->parts->num_part; id++) {
@@ -2184,6 +2307,52 @@ pm_destroy_all(void)
}
void
+pm_set_lvmpv(struct pm_devs *my_pm, part_id pno, bool add)
+{
+ size_t i;
+ struct disk_part_info info;
+
+ if (!my_pm->parts->pscheme->get_part_info(my_pm->parts, pno, &info))
+ return;
+
+ if (add) {
+ for (i = 0; i < __arraycount(lvm_pvs); i++)
+ if (lvm_pvs[i].pm == NULL && lvm_pvs[i].start == 0)
+ break;
+ if (i >= __arraycount(lvm_pvs))
+ return;
+ lvm_pvs[i].pm = my_pm;
+ lvm_pvs[i].start = info.start;
+ return;
+ } else {
+ for (i = 0; i < __arraycount(lvm_pvs); i++)
+ if (lvm_pvs[i].pm == my_pm &&
+ lvm_pvs[i].start == info.start)
+ break;
+ if (i >= __arraycount(lvm_pvs))
+ return;
+ lvm_pvs[i].pm = NULL;
+ lvm_pvs[i].start = 0;
+ }
+}
+
+bool
+pm_is_lvmpv(struct pm_devs *my_pm, part_id id,
+ const struct disk_part_info *info)
+{
+ size_t i;
+
+ for (i = 0; i < __arraycount(lvm_pvs); i++) {
+ if (lvm_pvs[i].pm != my_pm)
+ continue;
+ if (lvm_pvs[i].start == info->start)
+ return true;
+ }
+
+ return false;
+}
+
+void
pm_setfstype(struct pm_devs *pm_cur, part_id id, int fstype, int fs_subtype)
{
struct disk_part_info info;
@@ -2224,12 +2393,13 @@ pm_rename(struct pm_devs *pm_cur)
int
pm_editpart(int part_num)
{
-//XXX partinfo backup = pm->bsdlabel[part_num];
+ struct partition_usage_set pset = {};
- edit_ptn(&(struct menudesc){.cursel = part_num}, NULL);
+ usage_set_from_parts(&pset, pm->parts);
+ edit_ptn(&(struct menudesc){.cursel = part_num}, &pset);
+ free_usage_set(&pset);
if (checkoverlap(pm->parts)) {
hit_enter_to_continue(MSG_cantsave, NULL);
-//XXX pm->bsdlabel[part_num] = backup;
return -1;
}
pm->unsaved = 1;
@@ -2237,48 +2407,40 @@ pm_editpart(int part_num)
}
/* Safe erase of disk */
-int
-pm_shred(struct pm_devs *pm_cur, int part, int shredtype)
+void
+pm_shred(struct part_entry *pe, int shredtype)
{
- int error = -1;
+ const char *srcdev;
char dev[SSTRSIZE];
- part_id id;
+ struct pm_devs *my_pm;
- if (part < 0)
- return -1;
+ my_pm = pe->dev_ptr;
+ if (pe->type == PM_DISK) {
+ snprintf(dev, sizeof dev,
+ _PATH_DEV "r%s%c", my_pm->diskdev, 'a' + RAW_PART);
+ if (pe->parts != NULL) {
+ pe->parts->pscheme->free(pe->parts);
+ pe->parts = NULL;
+ my_pm->parts = NULL;
+ }
+ } else if (pe->type == PM_PART) {
+ pe->parts->pscheme->get_part_device(pe->parts, pe->id,
+ dev, sizeof dev, NULL, raw_dev_name, true, true);
+ }
- id = part;
- pm_cur->parts->pscheme->get_part_device(pm_cur->parts, id, dev,
- sizeof dev, NULL, plain_name, false);
- switch(shredtype) {
+ switch (shredtype) {
case SHRED_ZEROS:
- error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "dd of=/dev/%s if=/dev/zero bs=1m progress=100 msgfmt=human",
- dev);
+ srcdev = _PATH_DEVZERO;
break;
case SHRED_RANDOM:
- error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "dd of=/dev/%s if=/dev/urandom bs=1m progress=100 msgfmt=human",
- dev);
- break;
- case SHRED_CRYPTO:
- error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "sh -c 'cgdconfig -s cgd0 /dev/%s aes-cbc 128 < /dev/urandom'",
- dev); /* XXX: cgd0?! */
- if (! error) {
- error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "dd of=/dev/rcgd0d if=/dev/urandom bs=1m progress=100 msgfmt=human");
- error += run_program(RUN_DISPLAY | RUN_PROGRESS,
- "cgdconfig -u cgd0");
- }
+ srcdev = _PATH_URANDOM;
break;
default:
- return -1;
+ return;
}
- pm_partusage(pm_cur, -1, 1);
-//XXX memset(&pm_cur->oldlabel, 0, sizeof pm_cur->oldlabel);
-//XXX memset(&pm_cur->bsdlabel, 0, sizeof pm_cur->bsdlabel);
- return error;
+ run_program(RUN_DISPLAY | RUN_PROGRESS,
+ "progress -f %s -b 1m dd bs=1m of=%s", srcdev, dev);
+ pm_partusage(my_pm, -1, 1);
}
#if 0 // XXX
@@ -2289,11 +2451,11 @@ pm_mountall_sort(const void *a, const vo
}
#endif
+#if 0 // XXX
/* Mount all available partitions */
static int
pm_mountall(void)
{
-#if 0 // XXX
int num_devs = 0;
int mnts_order[MAX_MNTS];
int i, ii, error, ok;
@@ -2321,8 +2483,6 @@ pm_mountall(void)
}
mnts[num_devs].on = pm_i->bsdlabel[i].pi_mount;
if (strcmp(pm_i->bsdlabel[i].pi_mount, "/") == 0) {
- if (pm_i->no_part)
- pm_i->bootable = 1;
/* Use disk with / as a default if the user has
the sets on a local disk */
strlcpy(localfs_dev, pm_i->diskdev, SSTRSIZE);
@@ -2348,9 +2508,9 @@ pm_mountall(void)
if (error)
return error;
}
-#endif
return 0;
}
+#endif
/* Mount partition bypassing ordinary order */
static int
@@ -2395,7 +2555,7 @@ pm_umount(struct pm_devs *pm_cur, int pa
id = (part_id)part_num;
pm_cur->parts->pscheme->get_part_device(pm_cur->parts, id, buf,
- sizeof buf, NULL, plain_name, false);
+ sizeof buf, NULL, plain_name, false, true);
if (run_program(RUN_DISPLAY | RUN_PROGRESS,
"umount -f /dev/%s", buf) == 0) {
@@ -2457,6 +2617,7 @@ pm_unconfigure(struct pm_devs *pm_cur)
}
/* Last checks before leaving partition manager */
+#if 0
static int
pm_lastcheck(void)
{
@@ -2466,6 +2627,7 @@ pm_lastcheck(void)
fclose(file_tmp);
return 0;
}
+#endif
/* Are there unsaved changes? */
static int
@@ -2475,7 +2637,7 @@ pm_needsave(void)
SLIST_FOREACH(pm_i, &pm_head, l)
if (pm_i->unsaved) {
/* Oops, we have unsaved changes */
- changed = 1;
+ pm_changed = 1;
msg_display(MSG_saveprompt);
return ask_yesno(NULL);
}
@@ -2488,40 +2650,21 @@ pm_commit(menudesc *m, void *arg)
{
int retcode;
struct pm_devs *pm_i;
- struct install_partition_desc install;
-
- if (m != NULL && arg != NULL)
- ((struct part_entry *)arg)[0].retvalue = m->cursel + 1;
+ pm_retvalue = -1;
SLIST_FOREACH(pm_i, &pm_head, l) {
if (! pm_i->unsaved)
continue;
- pm_select(pm_i);
- install_desc_from_parts(&install, pm_i->parts);
-
- if (pm_i->no_part) {
- if (make_filesystems(&install) != 0) {
- if (logfp)
- fprintf(logfp, "Special disk %s preparing error\n", pm_i->diskdev);
- goto next;
- }
- pm_i->unsaved = 0;
- } else if (pm_i->parts != NULL) {
-
- if (!pm_i->parts->pscheme->write_to_disk(pm_i->parts) ||
- set_swap_if_low_ram(NULL) != 0 ||
- md_post_disklabel(&install, pm_i->parts) != 0 || /* Enable swap and check badblock */
- make_filesystems(&install) != 0 /* Create filesystems with newfs */
- ) {
- /* Oops, something failed... */
- if (logfp)
- fprintf(logfp, "Disk %s preparing error\n", pm_i->diskdev);
- goto next;
- }
- pm_i->unsaved = 0;
+ if (pm_i->parts == NULL) {
+ pm_i->unsaved = false;
+ continue;
+ }
+ if (!pm_i->parts->pscheme->write_to_disk(pm_i->parts)) {
+ if (logfp)
+ fprintf(logfp, "partitining error %s\n",
+ pm_i->diskdev);
+ return -1;
}
-next:
- free_install_desc(&install);
}
/* Call all functions that may create new devices */
@@ -2549,13 +2692,15 @@ next:
pm_upddevlist(m, arg);
if (logfp)
fflush (logfp);
- return 0;
+
+ pm_retvalue = 0;
+ return 0;
}
+#if 0 // XXX
static int
pm_savebootsector(void)
{
-#if 0 // XXX
struct pm_devs *pm_i;
SLIST_FOREACH(pm_i, &pm_head, l)
if (pm_i->bootable) {
@@ -2591,27 +2736,29 @@ pm_savebootsector(void)
}
}
}
-#endif
return 0;
}
+#endif
/* Function for 'Enter'-menu */
static int
pm_submenu(menudesc *m, void *arg)
{
- int part_num = -1;
struct pm_devs *pm_cur = NULL;
- ((struct part_entry *)arg)[0].retvalue = m->cursel + 1;
+ pm_retvalue = m->cursel + 1;
+ struct part_entry *cur_pe = (struct part_entry *)arg + m->cursel;
- switch (((struct part_entry *)arg)[m->cursel].type) {
+ switch (cur_pe->type) {
case PM_DISK:
case PM_PART:
case PM_SPEC:
- if (((struct part_entry *)arg)[m->cursel].dev_ptr != NULL) {
- pm_cur = ((struct part_entry *)arg)[m->cursel].dev_ptr;
+ if (cur_pe->dev_ptr != NULL) {
+ pm_cur = cur_pe->dev_ptr;
if (pm_cur == NULL)
return -1;
if (pm_cur->blocked) {
+ clear();
+ refresh();
msg_display(MSG_wannaunblock);
if (!ask_noyes(NULL))
return -2;
@@ -2623,79 +2770,37 @@ pm_submenu(menudesc *m, void *arg)
break;
}
- switch (((struct part_entry *)arg)[m->cursel].type) {
+ switch (cur_pe->type) {
case PM_DISK:
- if (pm_cur != NULL
- && pm_cur->parts == NULL) {
-
-#ifndef NO_DISKLABEL
- struct install_partition_desc install = { 0 };
-#endif
- const struct disk_partitioning_scheme *ps =
- select_part_scheme(pm_cur, NULL, false,
- NULL);
- if (!ps)
- return 0;
-
- struct disk_partitions *parts =
- (*ps->create_new_for_disk)(pm_cur->diskdev,
- 0, pm_cur->dlsize, pm_cur->dlsize, false);
- if (!parts)
- return 0;
-
- pm_cur->parts = parts;
- if (pm->dlsize > ps->size_limit)
- pm->dlsize = ps->size_limit;
-
- if (pm_cur->parts == NULL)
- break;
- wclear(stdscr);
- wrefresh(stdscr);
-#ifndef NO_DISKLABEL
- install_desc_from_parts(&install, pm->parts);
- make_bsd_partitions(&install);
- free_install_desc(&install);
-#endif
- }
- // XXX
-// if (pm_cur != NULL
-// && pm_cur->label_type == PM_LABEL_GPT) {
-// process_menu(MENU_pmgptentry, &part_num);
-// pm_wedges_fill(pm_cur);
-// } else {
- process_menu(MENU_pmdiskentry, &part_num);
-// }
+ process_menu(MENU_pmdiskentry, cur_pe);
break;
case PM_PART:
- part_num = ((struct part_entry *)arg)[m->cursel].id;
- process_menu(MENU_pmpartentry, &part_num);
-// if (pm_cur != NULL && pm_cur->label_type == PM_LABEL_GPT)
-// pm_wedges_fill(pm_cur);
+ process_menu(MENU_pmpartentry, cur_pe);
break;
case PM_SPEC:
- part_num = 0;
- process_menu(MENU_pmpartentry, &part_num);
+ process_menu(MENU_pmpartentry, cur_pe);
break;
case PM_RAID:
- return pm_edit(PMR_MENU_END, pm_raid_edit_menufmt,
- pm_raid_set_value, pm_raid_check, pm_raid_init,
- NULL, ((struct part_entry *)arg)[m->cursel].dev_ptr, 0, &raids_t_info);
+ pm_edit(PMR_MENU_END, pm_raid_edit_menufmt,
+ pm_raid_set_value, pm_raid_check, pm_raid_init,
+ NULL, cur_pe->dev_ptr, 0, &raids_t_info);
+ break;
case PM_VND:
return pm_edit(PMV_MENU_END, pm_vnd_edit_menufmt,
- pm_vnd_set_value, pm_vnd_check, pm_vnd_init,
- NULL, ((struct part_entry *)arg)[m->cursel].dev_ptr, 0, &vnds_t_info);
+ pm_vnd_set_value, pm_vnd_check, pm_vnd_init,
+ NULL, cur_pe->dev_ptr, 0, &vnds_t_info);
case PM_CGD:
- return pm_cgd_edit(((struct part_entry *)arg)[m->cursel].dev_ptr,
- NULL);
+ pm_cgd_edit_old(cur_pe);
+ break;
case PM_LVM:
return pm_edit(PML_MENU_END, pm_lvm_edit_menufmt,
- pm_lvm_set_value, pm_lvm_check, pm_lvm_init,
- NULL, ((struct part_entry *)arg)[m->cursel].dev_ptr, 0, &lvms_t_info);
+ pm_lvm_set_value, pm_lvm_check, pm_lvm_init,
+ NULL, cur_pe->dev_ptr, 0, &lvms_t_info);
case PM_LVMLV:
return pm_edit(PMLV_MENU_END, pm_lvmlv_edit_menufmt,
- pm_lvmlv_set_value, pm_lvmlv_check, pm_lvmlv_init,
- NULL, ((struct part_entry *)arg)[m->cursel].dev_ptr,
- ((struct part_entry *)arg)[m->cursel].dev_ptr_delta, &lv_t_info);
+ pm_lvmlv_set_value, pm_lvmlv_check, pm_lvmlv_init,
+ NULL, cur_pe->dev_ptr,
+ cur_pe->dev_ptr_delta, &lv_t_info);
}
return 0;
}
@@ -2718,11 +2823,9 @@ pm_menufmt(menudesc *m, int opt, void *a
dev_status = msg_string(MSG_pmblocked);
else if (! pm_cur->unsaved)
dev_status = msg_string(MSG_pmunchanged);
- else if (pm_cur->bootable)
- dev_status = msg_string(MSG_pmsetboot);
else
dev_status = msg_string(MSG_pmused);
- wprintw(m->mw, "%-33.32s %33.32s",
+ wprintw(m->mw, "%-43.42s %25.24s",
pm_cur->diskdev_descr,
dev_status);
break;
@@ -2730,7 +2833,8 @@ pm_menufmt(menudesc *m, int opt, void *a
if (parts->pscheme->get_part_device != NULL)
parts->pscheme->get_part_device(
parts, part_num,
- dev, sizeof dev, NULL, plain_name, false);
+ dev, sizeof dev, NULL, plain_name, false,
+ true);
else
strcpy(dev, "-");
parts->pscheme->get_part_info(parts,
@@ -2807,7 +2911,7 @@ pm_upddevlist_adv(menudesc *m, void *arg
d->s->parent_size * d->sub_num) != 0)
continue;
/* We have a entry for displaying */
- changed = 1;
+ pm_changed = 1;
m->opts[*i] = (struct menu_ent) {
.opt_name = NULL,
.opt_action = pm_submenu,
@@ -2836,12 +2940,12 @@ pm_upddevlist(menudesc *m, void *arg)
struct disk_part_info info;
if (arg != NULL)
- ((struct part_entry *)arg)[0].retvalue = m->cursel + 1;
+ pm_retvalue = m->cursel + 1;
- changed = 0;
+ pm_changed = 0;
/* Mark all devices as not found */
SLIST_FOREACH(pm_i, &pm_head, l) {
- if (pm_i->parts != NULL) {
+ if (pm_i->parts != NULL && !pm_i->unsaved) {
pm_i->parts->pscheme->free(pm_i->parts);
pm_i->parts = NULL;
}
@@ -2925,16 +3029,24 @@ pm_upddevlist(menudesc *m, void *arg)
}
i++;
}
+ for (ii = 0; ii <= (size_t)i; ii++) {
+ m->opts[ii].opt_flags = OPT_EXIT;
+ }
if (have_cgd) {
pm_upddevlist_adv(m, arg, &i,
- &(pm_upddevlist_adv_t) {MSG_create_cgd, PM_CGD, &cgds_t_info, 0, NULL});
+ &(pm_upddevlist_adv_t) {MSG_create_cgd, PM_CGD,
+ &cgds_t_info, 0, NULL});
}
+ pm_upddevlist_adv(m, arg, &i,
+ &(pm_upddevlist_adv_t) {MSG_create_vnd, PM_VND,
+ &vnds_t_info, 0, NULL});
if (have_lvm) {
pm_upddevlist_adv(m, arg, &i,
- &(pm_upddevlist_adv_t) {MSG_create_cnd, PM_VND, &vnds_t_info, 0, NULL});
- pm_upddevlist_adv(m, arg, &i,
- &(pm_upddevlist_adv_t) {MSG_create_vg, PM_LVM, &lvms_t_info, 0,
- &(pm_upddevlist_adv_t) {MSG_create_lv, PM_LVMLV, &lv_t_info, 0, NULL}});
+ &(pm_upddevlist_adv_t) {MSG_create_vg, PM_LVM,
+ &lvms_t_info, 0,
+ &(pm_upddevlist_adv_t) {MSG_create_lv, PM_LVMLV,
+ &lv_t_info, 0,
+ NULL}});
}
if (have_raid) {
pm_upddevlist_adv(m, arg, &i,
@@ -2949,30 +3061,27 @@ pm_upddevlist(menudesc *m, void *arg)
.opt_name = MSG_savepm,
.opt_action = pm_commit,
};
- for (ii = 0; ii <= (size_t)i; ii++) {
- m->opts[ii].opt_flags = OPT_EXIT;
- }
- if (((struct part_entry *)arg)[0].retvalue >= 0)
- m->cursel = ((struct part_entry *)arg)[0].retvalue - 1;
+ if (pm_retvalue >= 0)
+ m->cursel = pm_retvalue - 1;
return i;
}
static void
pm_menuin(menudesc *m, void *arg)
{
- if (cursel > m->numopts)
+ if (pm_cursel > m->numopts)
m->cursel = m->numopts;
- else if (cursel < 0)
+ else if (pm_cursel < 0)
m->cursel = 0;
else
- m->cursel = cursel;
+ m->cursel = pm_cursel;
}
static void
pm_menuout(menudesc *m, void *arg)
{
- cursel = m->cursel;
+ pm_cursel = m->cursel;
}
/* Main partman function */
@@ -3008,9 +3117,6 @@ partman(void)
else if (!(lvms = calloc(MAX_LVM_VG, sizeof(*lvms))))
have_lvm = 0;
- if (!have_gpt)
- remove_gpt_options();
-
raids_t_info = (structinfo_t) {
.max = MAX_RAID,
.entry_size = sizeof raids[0],
@@ -3052,8 +3158,8 @@ partman(void)
.parent_size = sizeof lvms[0],
};
- cursel = 0;
- changed = 0;
+ pm_cursel = 0;
+ pm_changed = 0;
firstrun = 0;
}
@@ -3064,34 +3170,23 @@ partman(void)
MC_ALWAYS_SCROLL | MC_NOBOX | MC_NOCLEAR,
pm_menuin, pm_menufmt, pm_menuout, NULL, MSG_finishpm);
if (menu_no == -1)
- args[0].retvalue = -1;
+ pm_retvalue = -1;
else {
- args[0].retvalue = 0;
+ pm_retvalue = 0;
clear();
refresh();
process_menu(menu_no, &args);
free_menu(menu_no);
}
- if (args[0].retvalue == 0 && pm->parts != NULL) {
- struct install_partition_desc install;
-
- install_desc_from_parts(&install, pm->parts);
+ if (pm_retvalue == 0 && pm->parts != NULL)
if (pm_needsave())
pm_commit(NULL, NULL);
- if (pm_mountall() != 0 ||
- make_fstab(&install) != 0 ||
- pm_lastcheck() != 0 ||
- pm_savebootsector() != 0) {
- msg_display(MSG_wannatry);
- args[0].retvalue = (ask_yesno(NULL)) ? 1:-1;
- }
- free_install_desc(&install);
- }
- } while (args[0].retvalue > 0);
+
+ } while (pm_retvalue > 0);
/* retvalue <0 - error, retvalue ==0 - user quits, retvalue >0 - all ok */
- return (args[0].retvalue >= 0)?0:-1;
+ return (pm_retvalue >= 0)?0:-1;
}
void
@@ -3106,3 +3201,182 @@ update_wedges(const char *disk)
"dkctl %s makewedges", disk);
}
+bool
+pm_force_parts(struct pm_devs *my_pm)
+{
+ if (my_pm == NULL)
+ return false;
+ if (my_pm->parts != NULL)
+ return true;
+
+ const struct disk_partitioning_scheme *ps =
+ select_part_scheme(my_pm, NULL, false, NULL);
+ if (ps == NULL)
+ return false;
+
+ struct disk_partitions *parts =
+ (*ps->create_new_for_disk)(my_pm->diskdev, 0, my_pm->dlsize,
+ my_pm->dlsize, false, NULL);
+ if (parts == NULL)
+ return false;
+
+ my_pm->parts = parts;
+ if (pm->dlsize > ps->size_limit)
+ pm->dlsize = ps->size_limit;
+
+ return true;
+}
+
+void
+pm_edit_partitions(struct part_entry *pe)
+{
+ struct pm_devs *my_pm = pm_from_pe(pe);
+ struct partition_usage_set pset = { 0 };
+
+ if (!my_pm)
+ return;
+
+ if (!pm_force_parts(my_pm))
+ return;
+
+ clear();
+ refresh();
+
+ usage_set_from_parts(&pset, my_pm->parts);
+ edit_and_check_label(my_pm, &pset, false);
+ free_usage_set(&pset);
+
+ pm_partusage(my_pm, -1, -1);
+ my_pm->unsaved = true;
+ pm_retvalue = 1;
+}
+
+part_id
+pm_whole_disk(struct part_entry *pe, int t)
+{
+ struct pm_devs *my_pm = pm_from_pe(pe);
+ struct disk_partitions *parts, *outer;
+ struct disk_part_info info, oinfo;
+ struct disk_part_free_space space;
+ daddr_t align;
+ int fst;
+ struct partition_usage_set pset = { 0 };
+ part_id new_part, id;
+ size_t i, cnt;
+
+ if (!my_pm)
+ return NO_PART;
+
+ if (!pm_force_parts(my_pm))
+ return NO_PART;
+
+ parts = my_pm->parts;
+ parts->pscheme->delete_all_partitions(parts);
+ if (parts->pscheme->secondary_scheme != NULL) {
+ outer = parts;
+ parts = parts->pscheme->secondary_partitions(outer,
+ 0, true);
+ if (parts == NULL) {
+ parts = outer;
+ } else {
+ if (outer->pscheme->write_to_disk(outer))
+ my_pm->parts = parts;
+ }
+ }
+
+ align = parts->pscheme->get_part_alignment(parts);
+
+ memset(&info, 0, sizeof info);
+ switch (t) {
+ case SY_NEWRAID:
+ fst = FS_RAID;
+ break;
+ case SY_NEWLVM:
+ fst = FS_BSDFFS;
+ break;
+ case SY_NEWCGD:
+ fst = FS_CGD;
+ break;
+ default:
+ assert(false);
+ }
+ info.nat_type = parts->pscheme->get_fs_part_type(PT_root, fst, 0);
+ if (info.nat_type != NULL && parts->pscheme->get_default_fstype != NULL)
+ parts->pscheme->get_default_fstype(info.nat_type,
+ &info.fs_type, &info.fs_sub_type);
+ if (parts->pscheme->get_free_spaces(parts, &space, 1,
+ 5*align, align, -1, -1) != 1)
+ return NO_PART;
+ info.start = space.start;
+ info.size = space.size;
+ new_part = parts->pscheme->add_partition(parts, &info, NULL);
+ if (new_part == NO_PART)
+ return NO_PART;
+
+ parts->pscheme->get_part_info(parts, new_part, &oinfo);
+
+ clear();
+ refresh();
+
+ usage_set_from_parts(&pset, parts);
+ edit_and_check_label(my_pm, &pset, false);
+ free_usage_set(&pset);
+
+ /*
+ * Try to match our new partition after user edit
+ */
+ new_part = NO_PART;
+ for (cnt = i = 0; i < parts->num_part; i++) {
+ if (!parts->pscheme->get_part_info(parts,i, &info))
+ continue;
+ if (info.flags & (PTI_SEC_CONTAINER|PTI_WHOLE_DISK|
+ PTI_PSCHEME_INTERNAL|PTI_RAW_PART))
+ continue;
+ if (info.nat_type != oinfo.nat_type)
+ continue;
+ if (new_part == NO_PART)
+ new_part = i;
+ cnt++;
+ }
+ if (cnt > 1) {
+ /* multiple matches, retry matching with start */
+ id = NO_PART;
+ for (cnt = i = 0; i < parts->num_part; i++) {
+ if (!parts->pscheme->get_part_info(parts, i, &info))
+ continue;
+ if (info.flags & (PTI_SEC_CONTAINER|PTI_WHOLE_DISK|
+ PTI_PSCHEME_INTERNAL|PTI_RAW_PART))
+ continue;
+ if (info.nat_type != oinfo.nat_type)
+ continue;
+ if (info.start != oinfo.start)
+ continue;
+ if (id == NO_PART)
+ id = i;
+ cnt++;
+ }
+ if (id != NO_PART)
+ new_part = id;
+ }
+
+ clear();
+ refresh();
+
+ pm_partusage(my_pm, -1, -1);
+ my_pm->unsaved = true;
+ pm_retvalue = 1;
+
+ return new_part;
+}
+
+struct pm_devs *
+pm_from_pe(struct part_entry *pe)
+{
+ switch (pe->type) {
+ case PM_DISK:
+ return pe->dev_ptr;
+ default:
+ assert(false);
+ }
+ return NULL;
+}
Index: src/usr.sbin/sysinst/target.c
diff -u src/usr.sbin/sysinst/target.c:1.10 src/usr.sbin/sysinst/target.c:1.11
--- src/usr.sbin/sysinst/target.c:1.10 Wed Aug 7 10:08:04 2019
+++ src/usr.sbin/sysinst/target.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: target.c,v 1.10 2019/08/07 10:08:04 martin Exp $ */
+/* $NetBSD: target.c,v 1.11 2020/01/09 13:22:30 martin Exp $ */
/*
* Copyright 1997 Jonathan Stone
@@ -71,7 +71,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: target.c,v 1.10 2019/08/07 10:08:04 martin Exp $");
+__RCSID("$NetBSD: target.c,v 1.11 2020/01/09 13:22:30 martin Exp $");
#endif
/*
@@ -192,7 +192,7 @@ target_already_root(void)
if (!is_root_part_mount(info.last_mounted))
continue;
if (!parts->pscheme->get_part_device(parts, ptn,
- dev, sizeof dev, &rootpart, plain_name, false))
+ dev, sizeof dev, &rootpart, plain_name, false, true))
continue;
last_res = is_active_rootpart(dev, rootpart);
Index: src/usr.sbin/sysinst/arch/arc/md.c
diff -u src/usr.sbin/sysinst/arch/arc/md.c:1.10 src/usr.sbin/sysinst/arch/arc/md.c:1.11
--- src/usr.sbin/sysinst/arch/arc/md.c:1.10 Sat Dec 14 12:00:40 2019
+++ src/usr.sbin/sysinst/arch/arc/md.c Thu Jan 9 13:22:30 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.10 2019/12/14 12:00:40 martin Exp $ */
+/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:30 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/bebox/md.c:1.7
--- src/usr.sbin/sysinst/arch/bebox/md.c:1.6 Wed Aug 14 12:55:35 2019
+++ src/usr.sbin/sysinst/arch/bebox/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:35 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.10 src/usr.sbin/sysinst/arch/cobalt/md.c:1.11
--- src/usr.sbin/sysinst/arch/cobalt/md.c:1.10 Sat Dec 14 12:00:40 2019
+++ src/usr.sbin/sysinst/arch/cobalt/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.10 2019/12/14 12:00:40 martin Exp $ */
+/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.10 src/usr.sbin/sysinst/arch/evbarm/md.c:1.11
--- src/usr.sbin/sysinst/arch/evbarm/md.c:1.10 Wed Dec 11 15:08:45 2019
+++ src/usr.sbin/sysinst/arch/evbarm/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.10 2019/12/11 15:08:45 martin Exp $ */
+/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:31 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -88,7 +88,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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/evbmips/md.c:1.7
--- src/usr.sbin/sysinst/arch/evbmips/md.c:1.6 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/evbmips/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/evbppc/md.c:1.7
--- src/usr.sbin/sysinst/arch/evbppc/md.c:1.6 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/evbppc/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/hpcarm/md.c:1.7
--- src/usr.sbin/sysinst/arch/hpcarm/md.c:1.6 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/hpcarm/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/hpcmips/md.c:1.7
--- src/usr.sbin/sysinst/arch/hpcmips/md.c:1.6 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/hpcmips/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.7 src/usr.sbin/sysinst/arch/hpcsh/md.c:1.8
--- src/usr.sbin/sysinst/arch/hpcsh/md.c:1.7 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/hpcsh/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, 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.27 src/usr.sbin/sysinst/arch/i386/md.c:1.28
--- src/usr.sbin/sysinst/arch/i386/md.c:1.27 Fri Dec 13 22:10:21 2019
+++ src/usr.sbin/sysinst/arch/i386/md.c Thu Jan 9 13:22:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.27 2019/12/13 22:10:21 martin Exp $ */
+/* $NetBSD: md.c,v 1.28 2020/01/09 13:22:31 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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (!parts)
return false;
@@ -285,7 +285,7 @@ md_post_newfs_bios(struct install_partit
install->infos[0].parts->pscheme->get_part_device(
install->infos[0].parts, install->infos[0].cur_part_id,
- rdev, sizeof rdev, NULL, raw_dev_name, true);
+ rdev, sizeof rdev, NULL, raw_dev_name, true, true);
snprintf(boot_options, sizeof boot_options,
"console=%s,speed=%u", consoles[boottype.bp_consdev],
@@ -317,7 +317,7 @@ copy_uefi_boot(const struct part_usage_i
int err;
if (!boot->parts->pscheme->get_part_device(boot->parts,
- boot->cur_part_id, dev, sizeof(dev), NULL, plain_name, true))
+ boot->cur_part_id, dev, sizeof(dev), NULL, plain_name, true, true))
return -1;
/*
Index: src/usr.sbin/sysinst/arch/landisk/md.c
diff -u src/usr.sbin/sysinst/arch/landisk/md.c:1.11 src/usr.sbin/sysinst/arch/landisk/md.c:1.12
--- src/usr.sbin/sysinst/arch/landisk/md.c:1.11 Wed Aug 14 12:55:36 2019
+++ src/usr.sbin/sysinst/arch/landisk/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.11 2019/08/14 12:55:36 martin Exp $ */
+/* $NetBSD: md.c,v 1.12 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/luna68k/md.c
diff -u src/usr.sbin/sysinst/arch/luna68k/md.c:1.7 src/usr.sbin/sysinst/arch/luna68k/md.c:1.8
--- src/usr.sbin/sysinst/arch/luna68k/md.c:1.7 Sat Jul 13 17:13:38 2019
+++ src/usr.sbin/sysinst/arch/luna68k/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.7 2019/07/13 17:13:38 martin Exp $ */
+/* $NetBSD: md.c,v 1.8 2020/01/09 13:22:32 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -193,11 +193,11 @@ md_post_newfs(struct install_partition_d
if (!install->infos[0].parts->pscheme->get_part_device(
install->infos[0].parts, install->infos[0].cur_part_id,
- rdisk, sizeof rdisk, NULL, raw_dev_name, true))
+ rdisk, sizeof rdisk, NULL, raw_dev_name, true, true))
return 1;
if (!install->infos[0].parts->pscheme->get_part_device(
install->infos[0].parts, install->infos[0].cur_part_id,
- disk, sizeof disk, NULL, plain_name, true))
+ disk, sizeof disk, NULL, plain_name, true, true))
return 1;
if (run_program(RUN_DISPLAY | RUN_PROGRESS,
@@ -246,7 +246,7 @@ md_update(struct install_partition_desc
if (!install->infos[0].parts->pscheme->get_part_device(
install->infos[0].parts, install->infos[0].cur_part_id,
- disk, sizeof disk, NULL, plain_name, true))
+ disk, sizeof disk, NULL, plain_name, true, true))
return 0;
/*
Index: src/usr.sbin/sysinst/arch/ofppc/md.c
diff -u src/usr.sbin/sysinst/arch/ofppc/md.c:1.8 src/usr.sbin/sysinst/arch/ofppc/md.c:1.9
--- src/usr.sbin/sysinst/arch/ofppc/md.c:1.8 Wed Aug 14 12:55:37 2019
+++ src/usr.sbin/sysinst/arch/ofppc/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.8 2019/08/14 12:55:37 martin Exp $ */
+/* $NetBSD: md.c,v 1.9 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (!parts)
return false;
@@ -447,18 +447,18 @@ md_post_extract(struct install_partition
parts = parts->parent; /* MBR */
parts->pscheme->get_part_device(parts, bootpart_prep,
- bootdev, sizeof bootdev, NULL, raw_dev_name, true);
+ bootdev, sizeof bootdev, NULL, raw_dev_name, true, true);
parts->pscheme->get_part_device(parts, bootpart_prep,
- bootbdev, sizeof bootbdev, NULL, plain_name, true);
+ bootbdev, sizeof bootbdev, NULL, plain_name, true, true);
run_program(RUN_DISPLAY, "/bin/dd if=/dev/zero of=%s bs=512",
bootdev);
run_program(RUN_DISPLAY, "/bin/dd if=/usr/mdec/ofwboot "
"of=%s bs=512", bootbdev);
parts->pscheme->get_part_device(parts, bootpart_binfo,
- bootdev, sizeof bootdev, NULL, raw_dev_name, true);
+ bootdev, sizeof bootdev, NULL, raw_dev_name, true, true);
parts->pscheme->get_part_device(parts, bootpart_binfo,
- bootbdev, sizeof bootbdev, NULL, plain_name, true);
+ bootbdev, sizeof bootbdev, NULL, plain_name, true, true);
run_program(RUN_DISPLAY, "/bin/dd if=/dev/zero of=%s bs=512",
bootdev);
run_program(RUN_DISPLAY, "/bin/dd if=/tmp/bootinfo.txt "
Index: src/usr.sbin/sysinst/arch/playstation2/md.c
diff -u src/usr.sbin/sysinst/arch/playstation2/md.c:1.6 src/usr.sbin/sysinst/arch/playstation2/md.c:1.7
--- src/usr.sbin/sysinst/arch/playstation2/md.c:1.6 Wed Aug 14 12:55:37 2019
+++ src/usr.sbin/sysinst/arch/playstation2/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:37 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (!parts)
return false;
Index: src/usr.sbin/sysinst/arch/prep/md.c
diff -u src/usr.sbin/sysinst/arch/prep/md.c:1.10 src/usr.sbin/sysinst/arch/prep/md.c:1.11
--- src/usr.sbin/sysinst/arch/prep/md.c:1.10 Sat Dec 14 12:00:40 2019
+++ src/usr.sbin/sysinst/arch/prep/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.10 2019/12/14 12:00:40 martin Exp $ */
+/* $NetBSD: md.c,v 1.11 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/sandpoint/md.c:1.7
--- src/usr.sbin/sysinst/arch/sandpoint/md.c:1.6 Wed Aug 14 12:55:37 2019
+++ src/usr.sbin/sysinst/arch/sandpoint/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:37 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, 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.6 src/usr.sbin/sysinst/arch/zaurus/md.c:1.7
--- src/usr.sbin/sysinst/arch/zaurus/md.c:1.6 Wed Aug 14 12:55:37 2019
+++ src/usr.sbin/sysinst/arch/zaurus/md.c Thu Jan 9 13:22:32 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.6 2019/08/14 12:55:37 martin Exp $ */
+/* $NetBSD: md.c,v 1.7 2020/01/09 13:22:32 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);
+ 0, pm->dlsize, pm->dlsize, true, NULL);
if (!parts)
return false;