diff options
| author | martin <martin@NetBSD.org> | 2020-10-03 18:54:18 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2020-10-03 18:54:18 +0000 |
| commit | bf7de24acdbb2100397314e910192e7fdce3400a (patch) | |
| tree | 3d058d277643254e7c74831684cde0163da8f9db /usr.sbin | |
| parent | 3aee09c260314e90e4bf121e58cd9bb332e14f19 (diff) | |
PR 55384: detangle pm->ptstart from the "install" flag (selecting a
target partition). Instead introduce a new PTI_INSTALL_TARGET per partition
flag and deal with it in the partitioning backends.
Honour pm->ptstart when allocating new partitions - it is supposed to be
the first sector usable by NetBSD.
Diffstat (limited to 'usr.sbin')
| -rw-r--r-- | usr.sbin/sysinst/bsddisklabel.c | 4 | ||||
| -rw-r--r-- | usr.sbin/sysinst/disklabel.c | 26 | ||||
| -rw-r--r-- | usr.sbin/sysinst/gpt.c | 27 | ||||
| -rw-r--r-- | usr.sbin/sysinst/label.c | 24 | ||||
| -rw-r--r-- | usr.sbin/sysinst/mbr.c | 34 | ||||
| -rw-r--r-- | usr.sbin/sysinst/part_edit.c | 40 | ||||
| -rw-r--r-- | usr.sbin/sysinst/partitions.h | 8 |
7 files changed, 111 insertions, 52 deletions
diff --git a/usr.sbin/sysinst/bsddisklabel.c b/usr.sbin/sysinst/bsddisklabel.c index b0e2674b36c..85873e5c84f 100644 --- a/usr.sbin/sysinst/bsddisklabel.c +++ b/usr.sbin/sysinst/bsddisklabel.c @@ -1,4 +1,4 @@ -/* $NetBSD: bsddisklabel.c,v 1.45 2020/09/29 15:29:17 martin Exp $ */ +/* $NetBSD: bsddisklabel.c,v 1.46 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -1431,7 +1431,7 @@ apply_settings_to_partitions(struct pm_devs *p, struct disk_partitions *parts, } } - from = -1; + from = p->ptstart > 0 ? pm->ptstart : -1; /* * First add all outer partitions - we need to align those exactly * with the inner counterpart later. diff --git a/usr.sbin/sysinst/disklabel.c b/usr.sbin/sysinst/disklabel.c index 19bd64f6079..24976bbdd7e 100644 --- a/usr.sbin/sysinst/disklabel.c +++ b/usr.sbin/sysinst/disklabel.c @@ -1,4 +1,4 @@ -/* $NetBSD: disklabel.c,v 1.39 2020/09/29 15:29:17 martin Exp $ */ +/* $NetBSD: disklabel.c,v 1.40 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright 2018 The NetBSD Foundation, Inc. @@ -42,7 +42,7 @@ const struct disk_partitioning_scheme disklabel_parts; struct disklabel_disk_partitions { struct disk_partitions dp; struct disklabel l; - daddr_t ptn_alignment; + daddr_t ptn_alignment, install_target; char last_mounted[MAXPARTITIONS][MOUNTLEN]; uint fs_sub_type[MAXPARTITIONS]; }; @@ -150,6 +150,7 @@ disklabel_parts_new(const char *dev, daddr_t start, daddr_t len, if (parts == NULL) return NULL; + parts->install_target = -1; total_size = geo.dg_secperunit; if (len*(geo.dg_secsize/512) > disklabel_parts.size_limit) len = disklabel_parts.size_limit/(geo.dg_secsize/512); @@ -213,6 +214,7 @@ disklabel_parts_read(const char *disk, daddr_t start, daddr_t len, size_t bps, struct disklabel_disk_partitions *parts = calloc(1, sizeof(*parts)); if (parts == NULL) return NULL; + parts->install_target = -1; fd = opendisk(disk, O_RDONLY, diskpath, sizeof(diskpath), 0); if (fd == -1) { @@ -272,8 +274,12 @@ disklabel_parts_read(const char *disk, daddr_t start, daddr_t len, size_t bps, flags = 0; if (parts->l.d_partitions[part].p_fstype == FS_MSDOS) flags = GLM_MAYBE_FAT32; - else if (parts->l.d_partitions[part].p_fstype == FS_BSDFFS) + else if (parts->l.d_partitions[part].p_fstype == FS_BSDFFS) { flags = GLM_LIKELY_FFS; + if (parts->install_target < 0) + parts->install_target = + parts->l.d_partitions[part].p_offset; + } if (flags != 0) { uint fs_type, fs_sub_type; const char *lm = get_last_mounted(fd, @@ -511,6 +517,9 @@ disklabel_delete(struct disk_partitions *arg, part_id id, MSG_part_not_deletable); return false; } + if (parts->install_target == + parts->l.d_partitions[part].p_offset) + parts->install_target = -1; parts->l.d_partitions[part].p_size = 0; parts->l.d_partitions[part].p_offset = 0; parts->l.d_partitions[part].p_fstype = FS_UNUSED; @@ -552,6 +561,8 @@ disklabel_delete_range(struct disk_partitions *arg, daddr_t r_start, if ((start >= r_start && start <= r_start+r_size) || (end >= r_start && end <= r_start+r_size)) { + if (start == parts->install_target) + parts->install_target = -1; if (parts->dp.num_part > 1) parts->dp.num_part--; parts->dp.free_space += @@ -765,6 +776,8 @@ disklabel_get_part_info(const struct disk_partitions *arg, part_id id, parts->l.d_partitions[part].p_fstype == FS_UNUSED) info->flags |= PTI_PSCHEME_INTERNAL|PTI_RAW_PART; + if (info->start == parts->install_target) + info->flags |= PTI_INSTALL_TARGET; #if RAW_PART == 3 if (part == (RAW_PART-1) && parts->dp.parent != NULL && parts->l.d_partitions[part].p_fstype == FS_UNUSED) @@ -789,6 +802,7 @@ disklabel_set_part_info(struct disk_partitions *arg, part_id id, struct disklabel_disk_partitions *parts = (struct disklabel_disk_partitions*)arg; part_id ndx; + bool was_inst_target; if (dl_types[0].description == NULL) dl_init_types(); @@ -800,6 +814,8 @@ disklabel_set_part_info(struct disk_partitions *arg, part_id id, continue; if (ndx == id) { + was_inst_target = parts->l.d_partitions[part].p_offset + == parts->install_target; parts->l.d_partitions[part].p_offset = info->start; parts->l.d_partitions[part].p_size = info->size; parts->l.d_partitions[part].p_fstype = @@ -809,6 +825,10 @@ disklabel_set_part_info(struct disk_partitions *arg, part_id id, strlcpy(parts->last_mounted[part], info->last_mounted, sizeof(parts->last_mounted[part])); + if (info->flags & PTI_INSTALL_TARGET) + parts->install_target = info->start; + else if (was_inst_target) + parts->install_target = -1; assert(info->fs_type == 0 || info->fs_type == parts->l.d_partitions[part].p_fstype); if (info->fs_sub_type != 0) diff --git a/usr.sbin/sysinst/gpt.c b/usr.sbin/sysinst/gpt.c index 5543809d5e1..bfe620cff23 100644 --- a/usr.sbin/sysinst/gpt.c +++ b/usr.sbin/sysinst/gpt.c @@ -1,4 +1,4 @@ -/* $NetBSD: gpt.c,v 1.18 2020/03/30 12:19:28 martin Exp $ */ +/* $NetBSD: gpt.c,v 1.19 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright 2018 The NetBSD Foundation, Inc. @@ -137,6 +137,7 @@ struct gpt_part_entry { #define GPEF_MODIFIED 2 /* this entry has been changed */ #define GPEF_WEDGE 4 /* wedge for this exists */ #define GPEF_RESIZED 8 /* size has changed */ +#define GPEF_TARGET 16 /* marked install target */ struct gpt_part_entry *gp_next; }; @@ -281,6 +282,9 @@ gpt_read_from_disk(const char *dev, daddr_t start, daddr_t len, size_t bps, static const char regpart_prefix[] = "GPT part - "; struct gpt_disk_partitions *parts; struct gpt_part_entry *last = NULL, *add_to = NULL; + const struct gpt_ptype_desc *native_root + = gpt_find_native_type(gpt_native_root); + bool have_target = false; if (collect(T_OUTPUT, &textbuf, "gpt -r show -a %s 2>/dev/null", dev) < 1) @@ -352,6 +356,11 @@ gpt_read_from_disk(const char *dev, daddr_t start, daddr_t len, size_t bps, np->gp_start = p_start; np->gp_size = p_size; np->gp_flags |= GPEF_ON_DISK; + if (!have_target && native_root != NULL && + strcmp(np->gp_id, native_root->tid) == 0) { + have_target = true; + np->gp_flags |= GPEF_TARGET; + } if (last == NULL) parts->partitions = np; @@ -509,6 +518,8 @@ gpt_get_part_info(const struct disk_partitions *arg, part_id id, info->last_mounted = p->last_mounted; info->fs_type = p->fs_type; info->fs_sub_type = p->fs_sub_type; + if (p->gp_flags & GPEF_TARGET) + info->flags |= PTI_INSTALL_TARGET; return true; } @@ -604,6 +615,7 @@ gpt_set_part_info(struct disk_partitions *arg, part_id id, struct gpt_part_entry *p = parts->partitions, *n; part_id no; daddr_t lendiff; + bool was_target; for (no = 0; p != NULL && no < id; no++) p = p->gp_next; @@ -611,6 +623,17 @@ gpt_set_part_info(struct disk_partitions *arg, part_id id, if (no != id || p == NULL) return false; + /* update target mark - we can only have one */ + was_target = (p->gp_flags & GPEF_TARGET) != 0; + if (info->flags & PTI_INSTALL_TARGET) + p->gp_flags |= GPEF_TARGET; + else + p->gp_flags &= ~GPEF_TARGET; + if (was_target) + for (n = parts->partitions; n != NULL; n = n->gp_next) + if (n != p) + n->gp_flags &= ~GPEF_TARGET; + if ((p->gp_flags & GPEF_ON_DISK)) { if (info->start != p->gp_start) { /* partition moved, we need to delete and re-add */ @@ -1444,7 +1467,7 @@ gpt_write_to_disk(struct disk_partitions *arg) p->gp_flags &= ~GPEF_WEDGE; if (root_id == NO_PART && p->gp_type != NULL) { if (p->gp_type->gent.generic_ptype == PT_root && - p->gp_start == pm->ptstart) { + (p->gp_flags & GPEF_TARGET)) { root_id = pno; root_is_new = !(p->gp_flags & GPEF_ON_DISK); } else if (efi_id == NO_PART && diff --git a/usr.sbin/sysinst/label.c b/usr.sbin/sysinst/label.c index 25fec1302e6..d35a47fe0fb 100644 --- a/usr.sbin/sysinst/label.c +++ b/usr.sbin/sysinst/label.c @@ -1,4 +1,4 @@ -/* $NetBSD: label.c,v 1.25 2020/09/29 14:29:56 martin Exp $ */ +/* $NetBSD: label.c,v 1.26 2020/10/03 18:54:18 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.25 2020/09/29 14:29:56 martin Exp $"); +__RCSID("$NetBSD: label.c,v 1.26 2020/10/03 18:54:18 martin Exp $"); #endif #include <sys/types.h> @@ -190,8 +190,8 @@ verify_parts(struct partition_usage_set *pset, bool install) daddr_t first_bsdstart, first_bsdsize, inst_start, inst_size; int rv; - first_bsdstart = first_bsdsize = 0; - inst_start = inst_size = 0; + first_bsdstart = inst_start = -1; + first_bsdsize = inst_size = 0; num_root = 0; parts = pset->parts; for (i = 0; i < pset->num; i++) { @@ -207,18 +207,19 @@ verify_parts(struct partition_usage_set *pset, bool install) continue; num_root++; - if (first_bsdstart == 0) { + if (first_bsdstart <= 0) { first_bsdstart = wanted->cur_start; first_bsdsize = wanted->size; } - if (inst_start == 0 && wanted->cur_start == pm->ptstart) { + if (inst_start < 0 && + (wanted->cur_flags & PTI_INSTALL_TARGET)) { inst_start = wanted->cur_start; inst_size = wanted->size; } } if ((num_root == 0 && install) || - (num_root > 1 && inst_start == 0)) { + (num_root > 1 && inst_start < 0)) { if (num_root == 0 && install) msg_display_subst(MSG_must_be_one_root, 2, msg_string(parts->pscheme->name), @@ -322,10 +323,7 @@ edit_install(menudesc *m, void *arg) { struct single_part_fs_edit *edit = arg; - if (edit->info.start == pm->ptstart) - pm->ptstart = 0; - else - pm->ptstart = edit->info.start; + edit->info.flags ^= PTI_INSTALL_TARGET; return 0; } @@ -1064,7 +1062,7 @@ draw_edit_ptn_line(menudesc *m, int opt, void *arg) } if (m->opts[opt].opt_action == edit_install) { wprintw(m->mw, "%*s : %s", col_width, ptn_install, - msg_string(edit->info.start == pm->ptstart + msg_string((edit->info.flags & PTI_INSTALL_TARGET) ? MSG_Yes : MSG_No)); return; } @@ -1318,7 +1316,7 @@ fmt_fspart_row(menudesc *m, int ptn, void *arg) fp = flag_str; inst_flags = pset->infos[ptn].instflags; - if (with_inst_flag && info.start == pm->ptstart && + if (with_inst_flag && (info.flags & PTI_INSTALL_TARGET) && info.nat_type->generic_ptype == PT_root) { static char inst_flag; diff --git a/usr.sbin/sysinst/mbr.c b/usr.sbin/sysinst/mbr.c index e4f3b04d8f5..b2c86833896 100644 --- a/usr.sbin/sysinst/mbr.c +++ b/usr.sbin/sysinst/mbr.c @@ -1,4 +1,4 @@ -/* $NetBSD: mbr.c,v 1.33 2020/09/29 15:29:17 martin Exp $ */ +/* $NetBSD: mbr.c,v 1.34 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -133,7 +133,7 @@ struct mbr_disk_partitions { struct disk_partitions dp, *dlabel; mbr_info_t mbr; uint ptn_alignment, ptn_0_offset, ext_ptn_alignment, - geo_sec, geo_head, geo_cyl; + geo_sec, geo_head, geo_cyl, target; }; const struct disk_partitioning_scheme mbr_parts; @@ -529,7 +529,8 @@ valid_mbr(struct mbr_sector *mbrs) } static int -read_mbr(const char *disk, size_t secsize, mbr_info_t *mbri) +read_mbr(const char *disk, size_t secsize, mbr_info_t *mbri, + struct mbr_disk_partitions *parts) { struct mbr_partition *mbrp; struct mbr_sector *mbrs = &mbri->mbr; @@ -552,7 +553,8 @@ read_mbr(const char *disk, size_t secsize, mbr_info_t *mbri) for (;;) { if (blockread(fd, secsize, mbrs, sizeof *mbrs, - (ext_base + next_ext) * (off_t)MBR_SECSIZE) - sizeof *mbrs != 0) + (ext_base + next_ext) * (off_t)MBR_SECSIZE) + - sizeof *mbrs != 0) break; if (!valid_mbr(mbrs)) @@ -605,9 +607,13 @@ read_mbr(const char *disk, size_t secsize, mbr_info_t *mbri) next_ext = mbrp->mbrp_start; } else { uint flags = 0; - if (mbrp->mbrp_type == MBR_PTYPE_NETBSD) + if (mbrp->mbrp_type == MBR_PTYPE_NETBSD) { flags |= GLM_LIKELY_FFS; - else if (mbrp->mbrp_type == MBR_PTYPE_FAT12 || + if (parts->target == ~0U) + parts->target = + mbri->sector + + mbrp->mbrp_start; + } else if (mbrp->mbrp_type == MBR_PTYPE_FAT12 || mbrp->mbrp_type == MBR_PTYPE_FAT16S || mbrp->mbrp_type == MBR_PTYPE_FAT16B || mbrp->mbrp_type == MBR_PTYPE_FAT32 || @@ -923,6 +929,7 @@ mbr_create_new(const char *disk, daddr_t start, daddr_t len, parts->geo_sec = MAXSECTOR; parts->geo_head = MAXHEAD; parts->geo_cyl = len/MAXHEAD/MAXSECTOR+1; + parts->target = ~0U; if (get_disk_geom(disk, &geo)) { parts->geo_sec = geo.dg_nsectors; @@ -995,8 +1002,10 @@ mbr_read_from_disk(const char *disk, daddr_t start, daddr_t len, size_t bps, parts->geo_head = MAXHEAD; parts->geo_cyl = len/MAXHEAD/MAXSECTOR+1; parts->dp.bytes_per_sector = bps; + parts->target = ~0U; mbr_init_default_alignments(parts, 0); - if (read_mbr(disk, parts->dp.bytes_per_sector, &parts->mbr) == -1) { + if (read_mbr(disk, parts->dp.bytes_per_sector, &parts->mbr, parts) + == -1) { free(parts); return NULL; } @@ -1360,8 +1369,12 @@ mbr_do_get_part_info(const struct disk_partitions *arg, part_id id, const struct mbr_partition *mp, void *cookie) { struct disk_part_info *info = cookie; + const struct mbr_disk_partitions *parts = + (const struct mbr_disk_partitions*)arg; mbr_partition_to_info(mp, mb->sector, info); + if (mp->mbrp_start + mb->sector == parts->target) + info->flags |= PTI_INSTALL_TARGET; if (mb->last_mounted[i] != NULL && mb->last_mounted[i][0] != 0) info->last_mounted = mb->last_mounted[i]; if (mb->fs_type[i] != FS_UNUSED) { @@ -1760,6 +1773,10 @@ found: if (!mbr_info_to_partitition(&data, &m->mbr.mbr_parts[i], m->sector, err_msg)) return false; + if (data.flags & PTI_INSTALL_TARGET) + parts->target = start; + else if (old_start == parts->target) + parts->target = -1; if (data.last_mounted && m->last_mounted[i] && data.last_mounted != m->last_mounted[i]) { free(__UNCONST(m->last_mounted[i])); @@ -2077,6 +2094,9 @@ mbr_delete_part(struct disk_partitions *arg, part_id pno, const char **err_msg) return false; } + if (parts->target == data.start) + parts->target = ~0U; + if (parts->dlabel) { /* * If we change the mbr partitioning, the we must diff --git a/usr.sbin/sysinst/part_edit.c b/usr.sbin/sysinst/part_edit.c index 2434d381d75..8207b6373f0 100644 --- a/usr.sbin/sysinst/part_edit.c +++ b/usr.sbin/sysinst/part_edit.c @@ -1,4 +1,4 @@ -/* $NetBSD: part_edit.c,v 1.17 2020/09/29 14:29:56 martin Exp $ */ +/* $NetBSD: part_edit.c,v 1.18 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright (c) 2019 The NetBSD Foundation, Inc. @@ -243,13 +243,7 @@ edit_part_install(menudesc *m, void *arg) { struct part_edit_info *marg = arg; - if (pm->ptstart == marg->cur.start) { - pm->ptstart = 0; - pm->ptsize = 0; - } else { - pm->ptstart = marg->cur.start; - pm->ptsize = marg->cur.size; - } + marg->cur.flags ^= PTI_INSTALL_TARGET; return 0; } @@ -571,7 +565,7 @@ add_part_entry(menudesc *m, void *arg) struct part_edit_info data = { .parts = pdata->av.arg, .first_custom_opt = PTN_OPTS_COMMON }; int ptn_menu; - daddr_t ptn_alignment; + daddr_t ptn_alignment, start; menu_ent *opts; size_t num_opts; struct disk_part_free_space space; @@ -583,12 +577,13 @@ add_part_entry(menudesc *m, void *arg) return 1; ptn_alignment = data.parts->pscheme->get_part_alignment(data.parts); + start = pm->ptstart > 0 ? pm->ptstart : -1; data.cur_id = NO_PART; memset(&data.cur, 0, sizeof(data.cur)); data.cur.nat_type = data.parts->pscheme-> get_generic_part_type(PT_root); if (data.parts->pscheme->get_free_spaces(data.parts, &space, 1, - max(sizemult, ptn_alignment), ptn_alignment, -1, -1) > 0) { + max(sizemult, ptn_alignment), ptn_alignment, start, -1) > 0) { data.cur.start = space.start; data.cur.size = space.size; } else { @@ -691,7 +686,7 @@ draw_outer_ptn_line(menudesc *m, int line, void *arg) case PTN_OPT_INSTALL: wprintw(m->mw, "%*s : %s", col_width, ptn_install, (marg->cur.nat_type->generic_ptype == PT_root && - marg->cur.start == pm->ptstart) ? yes : no); + (marg->cur.flags & PTI_INSTALL_TARGET)) ? yes : no); break; } @@ -768,7 +763,7 @@ draw_outer_part_line(menudesc *m, int opt, void *arg) return; } - if (info.start == pm->ptstart && + if ((info.flags & PTI_INSTALL_TARGET) && info.nat_type->generic_ptype == PT_root) { if (install_flag == 0) install_flag = msg_string(MSG_install_flag)[0]; @@ -965,17 +960,18 @@ parts_use_wholedisk(struct disk_partitions *parts, part_id nbsd; struct disk_part_info info; struct disk_part_free_space space; - daddr_t align; + daddr_t align, start; size_t i; parts->pscheme->delete_all_partitions(parts); align = parts->pscheme->get_part_alignment(parts); + start = pm->ptstart > 0 ? pm->ptstart : -1; if (ext_parts != NULL) { for (i = 0; i < add_ext_parts; i++) { info = ext_parts[i]; if (parts->pscheme->get_free_spaces(parts, &space, - 1, info.size, align, -1, -1) != 1) + 1, info.size, align, start, -1) != 1) return false; info.start = space.start; if (info.nat_type == NULL) @@ -989,7 +985,7 @@ parts_use_wholedisk(struct disk_partitions *parts, } if (parts->pscheme->get_free_spaces(parts, &space, 1, 3*align, - align, -1, -1) != 1) + align, start, -1) != 1) return false; memset(&info, 0, sizeof(info)); @@ -1009,8 +1005,6 @@ parts_use_wholedisk(struct disk_partitions *parts, parts->pscheme->secondary_partitions(parts, info.start, true); } - pm->ptstart = info.start; - pm->ptsize = info.size; return true; } @@ -1098,8 +1092,8 @@ verify_outer_parts(struct disk_partitions *parts, bool quiet) int num_bsdparts; daddr_t first_bsdstart, first_bsdsize, inst_start, inst_size; - first_bsdstart = first_bsdsize = 0; - inst_start = inst_size = 0; + first_bsdstart = inst_start = -1; + first_bsdsize = inst_size = 0; num_bsdparts = 0; for (i = 0; i < parts->num_part; i++) { struct disk_part_info info; @@ -1111,18 +1105,18 @@ verify_outer_parts(struct disk_partitions *parts, bool quiet) continue; num_bsdparts++; - if (first_bsdstart == 0) { + if (first_bsdstart < 0) { first_bsdstart = info.start; first_bsdsize = info.size; } - if (inst_start == 0 && info.start == pm->ptstart) { + if (inst_start< 0 && (info.flags & PTI_INSTALL_TARGET)) { inst_start = info.start; inst_size = info.size; } } if (num_bsdparts == 0 || - (num_bsdparts > 1 && inst_start == 0)) { + (num_bsdparts > 1 && inst_start < 0)) { if (quiet && num_bsdparts == 0) return 0; if (quiet && parts->pscheme->guess_install_target && @@ -1197,8 +1191,6 @@ ask_outer_partsizes(struct disk_partitions *parts) set_default_sizemult(parts->disk, MEG, parts->bytes_per_sector); if (pm->current_cylsize == 0) pm->current_cylsize = 16065; /* noone cares nowadays */ - pm->ptstart = 0; - pm->ptsize = 0; memset(&data, 0, sizeof data); data.av.arg = parts; diff --git a/usr.sbin/sysinst/partitions.h b/usr.sbin/sysinst/partitions.h index cc935a01321..1dcfa219f6d 100644 --- a/usr.sbin/sysinst/partitions.h +++ b/usr.sbin/sysinst/partitions.h @@ -1,4 +1,4 @@ -/* $NetBSD: partitions.h,v 1.16 2020/09/29 15:29:17 martin Exp $ */ +/* $NetBSD: partitions.h,v 1.17 2020/10/03 18:54:18 martin Exp $ */ /* * Copyright 2018 The NetBSD Foundation, Inc. @@ -117,6 +117,12 @@ struct part_type_desc { #define PTI_PSCHEME_INTERNAL 8 /* no user partition, e.g. MBRs extend partition */ #define PTI_RAW_PART 16 /* total disk */ +#define PTI_INSTALL_TARGET 32 /* marks the target partition + * assumed to become / after + * reboot; may not be + * persistent; may only be + * set for a single partition! + */ /* A single partition */ struct disk_part_info { |
