Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sysinst PR 55142: on popular demand bring back expe...
details: https://anonhg.NetBSD.org/src/rev/41f19cdd1f36
branches: trunk
changeset: 940672:41f19cdd1f36
user: martin <martin%NetBSD.org@localhost>
date: Tue Oct 13 17:26:28 2020 +0000
description:
PR 55142: on popular demand bring back expert options to adjust the
number of free inodes, block size and fragment size for FFS and LFS.
diffstat:
usr.sbin/sysinst/bsddisklabel.c | 11 ++-
usr.sbin/sysinst/defs.h | 5 +-
usr.sbin/sysinst/disklabel.c | 27 ++++++-
usr.sbin/sysinst/disks.c | 33 +++++++-
usr.sbin/sysinst/gpt.c | 11 ++-
usr.sbin/sysinst/label.c | 144 +++++++++++++++++++++++++++++++++++++++-
usr.sbin/sysinst/msg.mi.de | 39 ++++++---
usr.sbin/sysinst/msg.mi.en | 31 +++++--
usr.sbin/sysinst/msg.mi.es | 31 +++++--
usr.sbin/sysinst/msg.mi.fr | 31 +++++--
usr.sbin/sysinst/msg.mi.pl | 31 +++++--
usr.sbin/sysinst/partitions.h | 8 +-
usr.sbin/sysinst/util.c | 5 +-
13 files changed, 334 insertions(+), 73 deletions(-)
diffs (truncated from 844 to 300 lines):
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/bsddisklabel.c
--- a/usr.sbin/sysinst/bsddisklabel.c Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/bsddisklabel.c Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bsddisklabel.c,v 1.55 2020/10/13 10:44:25 martin Exp $ */
+/* $NetBSD: bsddisklabel.c,v 1.56 2020/10/13 17:26:28 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1494,6 +1494,9 @@
infos[i].last_mounted = want->mount;
infos[i].fs_type = want->fs_type;
infos[i].fs_sub_type = want->fs_version;
+ infos[i].fs_opt1 = want->fs_opt1;
+ infos[i].fs_opt2 = want->fs_opt2;
+ infos[i].fs_opt3 = want->fs_opt3;
new_part_id = ps->pscheme->add_partition(ps,
&infos[i], NULL);
if (new_part_id == NO_PART)
@@ -1578,6 +1581,9 @@
infos[i].last_mounted = want->mount;
infos[i].fs_type = want->fs_type;
infos[i].fs_sub_type = want->fs_version;
+ infos[i].fs_opt1 = want->fs_opt1;
+ infos[i].fs_opt2 = want->fs_opt2;
+ infos[i].fs_opt3 = want->fs_opt3;
if (want->fs_type != FS_UNUSED &&
want->type != PT_swap) {
want->instflags |= PUIINST_NEWFS;
@@ -1637,6 +1643,9 @@
infos[i].last_mounted = want->mount;
infos[i].fs_type = want->fs_type;
infos[i].fs_sub_type = want->fs_version;
+ infos[i].fs_opt1 = want->fs_opt1;
+ infos[i].fs_opt2 = want->fs_opt2;
+ infos[i].fs_opt3 = want->fs_opt3;
if (wanted->parts->pscheme->add_outer_partition
!= NULL)
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/defs.h
--- a/usr.sbin/sysinst/defs.h Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/defs.h Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.66 2020/10/12 16:14:32 martin Exp $ */
+/* $NetBSD: defs.h,v 1.67 2020/10/13 17:26:28 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -311,6 +311,7 @@
unsigned int instflags; /* installer handling flags */
uint fs_type, fs_version; /* e.g. FS_LFS, or FS_BSDFS,
* version = 2 for FFSv2 */
+ uint fs_opt1, fs_opt2, fs_opt3; /* FS specific, FFS: block/frag */
#ifndef NO_CLONES
/*
* Only != NULL when PUIFLG_CLONE_PARTS is set, describes the
@@ -352,7 +353,7 @@
*/
struct single_part_fs_edit {
struct partition_usage_set *pset;
- size_t index, first_custom_attr;
+ size_t index, first_custom_attr, offset, mode;
part_id id;
struct disk_part_info info; /* current partition data */
struct part_usage_info *wanted; /* points at our edit data */
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/disklabel.c
--- a/usr.sbin/sysinst/disklabel.c Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/disklabel.c Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disklabel.c,v 1.41 2020/10/12 16:14:32 martin Exp $ */
+/* $NetBSD: disklabel.c,v 1.42 2020/10/13 17:26:28 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -44,7 +44,7 @@
struct disklabel l;
daddr_t ptn_alignment, install_target;
char last_mounted[MAXPARTITIONS][MOUNTLEN];
- uint fs_sub_type[MAXPARTITIONS];
+ uint fs_sub_type[MAXPARTITIONS], fs_opt3[MAXPARTITIONS];
};
/*
@@ -772,6 +772,10 @@
info->last_mounted = parts->last_mounted[part];
info->fs_type = parts->l.d_partitions[part].p_fstype;
info->fs_sub_type = parts->fs_sub_type[part];
+ info->fs_opt2 = parts->l.d_partitions[part].p_fsize;
+ info->fs_opt1 = info->fs_opt2 *
+ parts->l.d_partitions[part].p_frag;
+ info->fs_opt3 = parts->fs_opt3[part];
if (part == RAW_PART &&
parts->l.d_partitions[part].p_fstype == FS_UNUSED)
info->flags |=
@@ -820,6 +824,13 @@
parts->l.d_partitions[part].p_size = info->size;
parts->l.d_partitions[part].p_fstype =
dl_part_type_from_generic(info->nat_type);
+ parts->l.d_partitions[part].p_fsize = info->fs_opt2;
+ if (info->fs_opt2 != 0)
+ parts->l.d_partitions[part].p_frag =
+ info->fs_opt1 / info->fs_opt2;
+ else
+ parts->l.d_partitions[part].p_frag = 0;
+ parts->fs_opt3[part] = info->fs_opt3;
if (info->last_mounted != NULL &&
info->last_mounted != parts->last_mounted[part])
strlcpy(parts->last_mounted[part],
@@ -1111,6 +1122,12 @@
parts->l.d_partitions[part].p_size = data.size;
parts->l.d_partitions[part].p_fstype =
dl_part_type_from_generic(data.nat_type);
+ parts->l.d_partitions[part].p_fsize = info->fs_opt2;
+ if (info->fs_opt2 != 0)
+ parts->l.d_partitions[part].p_frag =
+ info->fs_opt1 / info->fs_opt2;
+ else
+ parts->l.d_partitions[part].p_frag = 0;
if (data.last_mounted && data.last_mounted[0])
strlcpy(parts->last_mounted[part], data.last_mounted,
sizeof(parts->last_mounted[part]));
@@ -1174,6 +1191,12 @@
parts->l.d_partitions[part].p_size = info->size;
parts->l.d_partitions[part].p_fstype =
dl_part_type_from_generic(info->nat_type);
+ parts->l.d_partitions[part].p_fsize = info->fs_opt2;
+ if (info->fs_opt2 != 0)
+ parts->l.d_partitions[part].p_frag =
+ info->fs_opt1 / info->fs_opt2;
+ else
+ parts->l.d_partitions[part].p_frag = 0;
if (info->last_mounted && info->last_mounted[0])
strlcpy(parts->last_mounted[part], info->last_mounted,
sizeof(parts->last_mounted[part]));
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/disks.c
--- a/usr.sbin/sysinst/disks.c Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/disks.c Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.70 2020/10/12 14:29:41 martin Exp $ */
+/* $NetBSD: disks.c,v 1.71 2020/10/13 17:26:28 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1078,7 +1078,8 @@
make_filesystems(struct install_partition_desc *install)
{
int error = 0, partno = -1;
- char *newfs = NULL, devdev[PATH_MAX], rdev[PATH_MAX];
+ char *newfs = NULL, devdev[PATH_MAX], rdev[PATH_MAX],
+ opts[200], opt[30];
size_t i;
struct part_usage_info *ptn;
struct disk_partitions *parts;
@@ -1142,16 +1143,33 @@
parts->pscheme->get_part_device(parts, ptn->cur_part_id,
rdev, sizeof rdev, &partno, raw_dev_name, true, true);
+ opts[0] = 0;
switch (ptn->fs_type) {
case FS_APPLEUFS:
- asprintf(&newfs, "/sbin/newfs");
+ if (ptn->fs_opt3 != 0)
+ snprintf(opts, sizeof opts, "-i %u",
+ ptn->fs_opt3);
+ asprintf(&newfs, "/sbin/newfs %s", opts);
mnt_opts = "-tffs -o async";
fsname = "ffs";
break;
case FS_BSDFFS:
+ if (ptn->fs_opt3 != 0)
+ snprintf(opts, sizeof opts, "-i %u ",
+ ptn->fs_opt3);
+ if (ptn->fs_opt1 != 0) {
+ snprintf(opt, sizeof opt, "-b %u ",
+ ptn->fs_opt1);
+ strcat(opts, opt);
+ }
+ if (ptn->fs_opt2 != 0) {
+ snprintf(opt, sizeof opt, "-f %u ",
+ ptn->fs_opt2);
+ strcat(opts, opt);
+ }
asprintf(&newfs,
- "/sbin/newfs -V2 -O %d",
- ptn->fs_version == 2 ? 2 : 1);
+ "/sbin/newfs -V2 -O %d %s",
+ ptn->fs_version == 2 ? 2 : 1, opts);
if (ptn->mountflags & PUIMNT_LOG)
mnt_opts = "-tffs -o log";
else
@@ -1159,7 +1177,10 @@
fsname = "ffs";
break;
case FS_BSDLFS:
- asprintf(&newfs, "/sbin/newfs_lfs");
+ if (ptn->fs_opt1 != 0 && ptn->fs_opt2 != 0)
+ snprintf(opts, sizeof opts, "-b %u",
+ ptn->fs_opt1 * ptn->fs_opt2);
+ asprintf(&newfs, "/sbin/newfs_lfs %s", opts);
mnt_opts = "-tlfs";
fsname = "lfs";
break;
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/gpt.c
--- a/usr.sbin/sysinst/gpt.c Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/gpt.c Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gpt.c,v 1.20 2020/10/12 16:14:32 martin Exp $ */
+/* $NetBSD: gpt.c,v 1.21 2020/10/13 17:26:28 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -131,7 +131,8 @@
char gp_label[GPT_LABEL_LEN]; /* user defined label */
char gp_dev_name[GPT_DEV_LEN]; /* name of wedge */
const char *last_mounted; /* last mounted if known */
- uint fs_type, fs_sub_type; /* FS_* and maybe sub type */
+ uint fs_type, fs_sub_type, /* FS_* and maybe sub type */
+ fs_opt1, fs_opt2, fs_opt3; /* transient file system options */
uint gp_flags;
#define GPEF_ON_DISK 1 /* This entry exists on-disk */
#define GPEF_MODIFIED 2 /* this entry has been changed */
@@ -518,6 +519,9 @@
info->last_mounted = p->last_mounted;
info->fs_type = p->fs_type;
info->fs_sub_type = p->fs_sub_type;
+ info->fs_opt1 = p->fs_opt1;
+ info->fs_opt2 = p->fs_opt2;
+ info->fs_opt3 = p->fs_opt3;
if (p->gp_flags & GPEF_TARGET)
info->flags |= PTI_INSTALL_TARGET;
@@ -1055,6 +1059,9 @@
}
p->fs_type = info->fs_type;
p->fs_sub_type = info->fs_sub_type;
+ p->fs_opt1 = info->fs_opt1;
+ p->fs_opt2 = info->fs_opt2;
+ p->fs_opt3 = info->fs_opt3;
return true;
}
diff -r c3b876c09db7 -r 41f19cdd1f36 usr.sbin/sysinst/label.c
--- a/usr.sbin/sysinst/label.c Tue Oct 13 13:56:34 2020 +0000
+++ b/usr.sbin/sysinst/label.c Tue Oct 13 17:26:28 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: label.c,v 1.29 2020/10/13 11:28:32 martin Exp $ */
+/* $NetBSD: label.c,v 1.30 2020/10/13 17:26:28 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.29 2020/10/13 11:28:32 martin Exp $");
+__RCSID("$NetBSD: label.c,v 1.30 2020/10/13 17:26:28 martin Exp $");
#endif
#include <sys/types.h>
@@ -50,6 +50,7 @@
#include <sys/dkio.h>
#include <sys/param.h>
#include <sys/bootblock.h>
+#include <sys/bitops.h>
#include <ufs/ffs/fs.h>
#include "defs.h"
@@ -292,6 +293,97 @@
}
static int
+set_ffs_opt_pow2(menudesc *m, void *arg)
+{
+ struct single_part_fs_edit *edit = arg;
+ size_t val = 1 << (edit->offset+m->cursel);
+
+ if (edit->mode == 1) {
+ edit->info.fs_opt1 = val;
+ edit->wanted->fs_opt1 = val;
+ } else if (edit->mode == 2) {
+ edit->info.fs_opt2 = val;
+ edit->wanted->fs_opt2 = val;
+ }
+ return 0;
+}
+
+static int
+edit_fs_ffs_opt(menudesc *m, void *arg, msg head,
+ size_t min_val, size_t max_val)
+{
+ struct single_part_fs_edit *edit = arg;
+ menu_ent opts[min(MAXPHYS/4096, 8)];
+ char names[min(MAXPHYS/4096, 8)][20];
+ size_t i, val;
+ int menu;
+
+ edit->offset = ilog2(min_val);
+ memset(opts, 0, sizeof opts);
+ for (i = 0, val = min_val; val <= max_val; i++, val <<= 1) {
+ snprintf(names[i], sizeof names[i], "%zu", val);
Home |
Main Index |
Thread Index |
Old Index