Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src/usr.sbin/sysinst Pull up following revision(s) (requested...
details: https://anonhg.NetBSD.org/src/rev/6e76f48fd2d7
branches: netbsd-9
changeset: 372880:6e76f48fd2d7
user: martin <martin%NetBSD.org@localhost>
date: Mon Jan 02 10:13:30 2023 +0000
description:
Pull up following revision(s) (requested by tsutsui in ticket #1559):
usr.sbin/sysinst/arch/x68k/md.c: revision 1.13
usr.sbin/sysinst/disklabel.c: revision 1.49
usr.sbin/sysinst/defs.h: revision 1.85
usr.sbin/sysinst/arch/amiga/md.c: revision 1.8
usr.sbin/sysinst/arch/amiga/md.c: revision 1.9
Check on-disk disklabel properly even on ports without raw BSD disklabel.
Fixes PR install/56890.
Fix typo
diffstat:
usr.sbin/sysinst/arch/amiga/md.c | 21 ++++++++++++++++++++-
usr.sbin/sysinst/arch/x68k/md.c | 21 ++++++++++++++++++++-
usr.sbin/sysinst/defs.h | 3 ++-
usr.sbin/sysinst/disklabel.c | 40 ++++++++++++++++++++++++++--------------
4 files changed, 68 insertions(+), 17 deletions(-)
diffs (155 lines):
diff -r a23e118af83f -r 6e76f48fd2d7 usr.sbin/sysinst/arch/amiga/md.c
--- a/usr.sbin/sysinst/arch/amiga/md.c Sat Dec 31 05:03:52 2022 +0000
+++ b/usr.sbin/sysinst/arch/amiga/md.c Mon Jan 02 10:13:30 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.5.2.3 2022/12/14 15:39:45 snj Exp $ */
+/* $NetBSD: md.c,v 1.5.2.4 2023/01/02 10:13:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -101,6 +101,25 @@
return true;
}
+#ifdef DISKLABEL_NO_ONDISK_VERIFY
+/*
+ * hook to check if disklabel returned by readdisklabel(9) via DIOCGDINFO
+ * seems the default one, on ports that have no BSD disklabel on disks.
+ */
+bool
+md_disklabel_is_default(const struct disklabel *lp)
+{
+ bool maybe_default =
+ lp->d_npartitions == RAW_PART + 1 &&
+ lp->d_partitions[RAW_PART].p_size == 0x1fffffff &&
+ lp->d_partitions[0].p_size == lp->d_partitions[RAW_PART].p_size &&
+ lp->d_partitions[0].p_offset == 0 &&
+ lp->d_partitions[0].p_fstype == FS_BSDFFS;
+
+ return maybe_default;
+}
+#endif
+
/*
* hook called after upgrade() or install() has finished setting
* up the target disk but immediately before the user is given the
diff -r a23e118af83f -r 6e76f48fd2d7 usr.sbin/sysinst/arch/x68k/md.c
--- a/usr.sbin/sysinst/arch/x68k/md.c Sat Dec 31 05:03:52 2022 +0000
+++ b/usr.sbin/sysinst/arch/x68k/md.c Mon Jan 02 10:13:30 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: md.c,v 1.8.2.4 2022/02/02 04:25:36 msaitoh Exp $ */
+/* $NetBSD: md.c,v 1.8.2.5 2023/01/02 10:13:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -264,6 +264,25 @@
return true;
}
+#ifdef DISKLABEL_NO_ONDISK_VERIFY
+/*
+ * hook to check if disklabel returned by readdisklabel(9) via DIOCGDINFO
+ * seems the default one, on ports that have no BSD disklabel on disks.
+ */
+bool
+md_disklabel_is_default(const struct disklabel *lp)
+{
+ bool maybe_default =
+ lp->d_npartitions == RAW_PART + 1 &&
+ lp->d_partitions[0].p_size == lp->d_partitions[RAW_PART].p_size &&
+ lp->d_partitions[0].p_fstype == FS_UNUSED &&
+ lp->d_bbsize == 0 &&
+ lp->d_sbsize == 0;
+
+ return maybe_default;
+}
+#endif
+
/*
* hook called after upgrade() or install() has finished setting
* up the target disk but immediately before the user is given the
diff -r a23e118af83f -r 6e76f48fd2d7 usr.sbin/sysinst/defs.h
--- a/usr.sbin/sysinst/defs.h Sat Dec 31 05:03:52 2022 +0000
+++ b/usr.sbin/sysinst/defs.h Mon Jan 02 10:13:30 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.42.2.11 2022/02/14 06:45:34 msaitoh Exp $ */
+/* $NetBSD: defs.h,v 1.42.2.12 2023/01/02 10:13:30 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -643,6 +643,7 @@
*/
bool md_pre_disklabel(struct install_partition_desc*, struct disk_partitions*);
bool md_post_disklabel(struct install_partition_desc*, struct disk_partitions*);
+bool md_disklabel_is_default(const struct disklabel *);
int md_pre_mount(struct install_partition_desc*, size_t);
int md_post_newfs(struct install_partition_desc*);
int md_post_extract(struct install_partition_desc*, bool upgrade);
diff -r a23e118af83f -r 6e76f48fd2d7 usr.sbin/sysinst/disklabel.c
--- a/usr.sbin/sysinst/disklabel.c Sat Dec 31 05:03:52 2022 +0000
+++ b/usr.sbin/sysinst/disklabel.c Mon Jan 02 10:13:30 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disklabel.c,v 1.10.2.11 2022/12/31 05:03:14 snj Exp $ */
+/* $NetBSD: disklabel.c,v 1.10.2.12 2023/01/02 10:13:30 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -198,16 +198,7 @@
int fd;
char diskpath[MAXPATHLEN];
uint flags;
-#ifndef DISKLABEL_NO_ONDISK_VERIFY
- bool have_raw_label = false;
-
- /*
- * Verify we really have a disklabel.
- */
- if (run_program(RUN_SILENT | RUN_ERROR_OK,
- "disklabel -r %s", disk) == 0)
- have_raw_label = true;
-#endif
+ bool have_own_label = false;
/* read partitions */
@@ -304,8 +295,30 @@
}
close(fd);
-#ifndef DISKLABEL_NO_ONDISK_VERIFY
- if (!have_raw_label) {
+ /*
+ * Verify we really have a disklabel on the target disk.
+ */
+ if (run_program(RUN_SILENT | RUN_ERROR_OK,
+ "disklabel -r %s", disk) == 0) {
+ have_own_label = true;
+ }
+#ifdef DISKLABEL_NO_ONDISK_VERIFY
+ else {
+ /*
+ * disklabel(8) with -r checks a native disklabel at
+ * LABELOFFSET sector, but several ports don't have
+ * a native label and use emulated one translated from
+ * port specific MD disk partition information.
+ * Unfortunately, there is no MI way to check whether
+ * the disk has a native BSD disklabel by readdisklabel(9)
+ * via DIOCGDINFO. So check if returned label looks
+ * defaults set by readdisklabel(9) per MD way.
+ */
+ have_own_label = !md_disklabel_is_default(&parts->l);
+ }
+#endif
+
+ if (!have_own_label) {
bool found_real_part = false;
if (parts->l.d_npartitions <= RAW_PART ||
@@ -338,7 +351,6 @@
return NULL;
}
}
-#endif
return &parts->dp;
}
Home |
Main Index |
Thread Index |
Old Index