Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/sysinst Add a new utility function "update_wedges()...



details:   https://anonhg.NetBSD.org/src/rev/f5f46e08919b
branches:  trunk
changeset: 338033:f5f46e08919b
user:      martin <martin%NetBSD.org@localhost>
date:      Sat May 09 12:06:31 2015 +0000

description:
Add a new utility function "update_wedges()", which triggers a scan
for wedges on the given disk. Call this after writing a disklabel.
This makes all auto-discovered wedges go away after we changed the
partitioning (and are not using GPT) and fixes PR 49665.

diffstat:

 usr.sbin/sysinst/defs.h    |   9 ++++++++-
 usr.sbin/sysinst/disks.c   |  32 ++++++++++++--------------------
 usr.sbin/sysinst/partman.c |  40 ++++++++++++++++++++++++++++++++--------
 3 files changed, 52 insertions(+), 29 deletions(-)

diffs (173 lines):

diff -r b0f038673c51 -r f5f46e08919b usr.sbin/sysinst/defs.h
--- a/usr.sbin/sysinst/defs.h   Sat May 09 12:03:34 2015 +0000
+++ b/usr.sbin/sysinst/defs.h   Sat May 09 12:06:31 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: defs.h,v 1.6 2015/01/02 19:43:13 abs Exp $     */
+/*     $NetBSD: defs.h,v 1.7 2015/05/09 12:06:31 martin Exp $  */
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -598,6 +598,13 @@
 int pm_gpt_convert(pm_devs_t *);
 void pm_wedges_fill(pm_devs_t *);
 void pm_make_bsd_partitions(pm_devs_t *);
+void update_wedges(const char *);
+
+/* flags whether to offer the respective options (depending on helper
+   programs available on install media */
+int have_raid, have_vnd, have_cgd, have_lvm, have_gpt, have_dk;
+/* initialize above variables */
+void check_available_binaries(void);
 
 /* from bsddisklabel.c */
 int    make_bsd_partitions(void);
diff -r b0f038673c51 -r f5f46e08919b usr.sbin/sysinst/disks.c
--- a/usr.sbin/sysinst/disks.c  Sat May 09 12:03:34 2015 +0000
+++ b/usr.sbin/sysinst/disks.c  Sat May 09 12:06:31 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: disks.c,v 1.7 2015/01/02 19:43:13 abs Exp $ */
+/*     $NetBSD: disks.c,v 1.8 2015/05/09 12:06:31 martin Exp $ */
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -108,7 +108,6 @@
 static void fixsb(const char *, const char *, char);
 static bool is_gpt(const char *);
 static int incoregpt(pm_devs_t *, partinfo *);
-static bool have_gpt_binary(void);
 
 #ifndef DISK_NAMES
 #define DISK_NAMES "wd", "sd", "ld", "raid"
@@ -577,26 +576,15 @@
        return numdisks;
 }
 
-static bool
-have_gpt_binary(void)
-{
-       static bool did_test = false;
-       static bool have_gpt;
-
-       if (!did_test) {
-               have_gpt = binary_available("gpt");
-               did_test = true;
-       }
-
-       return have_gpt;
-}
 
 void
 label_read(void)
 {
+       check_available_binaries();
+
        /* Get existing/default label */
        memset(&pm->oldlabel, 0, sizeof pm->oldlabel);
-       if (!have_gpt_binary() || !pm->gpt)
+       if (!have_gpt || !pm->gpt)
                incorelabel(pm->diskdev, pm->oldlabel);
        else
                incoregpt(pm, pm->oldlabel);
@@ -666,14 +654,16 @@
 int
 write_disklabel (void)
 {
+       int rv = 0;
 
 #ifdef DISKLABEL_CMD
        /* disklabel the disk */
-       return run_program(RUN_DISPLAY, "%s -f /tmp/disktab %s '%s'",
+       rv = run_program(RUN_DISPLAY, "%s -f /tmp/disktab %s '%s'",
            DISKLABEL_CMD, pm->diskdev, pm->bsddiskname);
-#else
-       return 0;
+       if (rv == 0)
+               update_wedges(pm->diskdev);
 #endif
+       return rv;
 }
 
 
@@ -1481,7 +1471,9 @@
 static bool
 is_gpt(const char *dev)
 {
-       if (!have_gpt_binary())
+       check_available_binaries();
+
+       if (!have_gpt)
                return false;
 
        return !run_program(RUN_SILENT | RUN_ERROR_OK,
diff -r b0f038673c51 -r f5f46e08919b usr.sbin/sysinst/partman.c
--- a/usr.sbin/sysinst/partman.c        Sat May 09 12:03:34 2015 +0000
+++ b/usr.sbin/sysinst/partman.c        Sat May 09 12:06:31 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: partman.c,v 1.8 2015/01/02 19:43:13 abs Exp $ */
+/*     $NetBSD: partman.c,v 1.9 2015/05/09 12:06:31 martin Exp $ */
 
 /*
  * Copyright 2012 Eugene Lozovoy
@@ -46,7 +46,7 @@
 
 /* flags whether to offer the respective options (depending on helper
    programs available on install media */
-static int have_raid, have_vnd, have_cgd, have_lvm, have_gpt, have_dk;
+int have_raid, have_vnd, have_cgd, have_lvm, have_gpt, have_dk;
 
 /* XXX: replace all MAX_* defines with vars that depend on kernel settings */
 #define MAX_ENTRIES 96
@@ -2692,6 +2692,23 @@
        cursel = m->cursel;
 }
 
+/* initialize have_* variables */
+void
+check_available_binaries()
+{
+       static int did_test = false;
+
+       if (did_test) return;
+       did_test = 1;
+
+       have_raid = binary_available("raidctl");
+       have_vnd = binary_available("vnconfig");
+       have_cgd = binary_available("cgdconfig");
+       have_lvm = binary_available("lvm");
+       have_gpt = binary_available("gpt");
+       have_dk = binary_available("dkctl");
+}
+
 /* Main partman function */
 int
 partman(void)
@@ -2702,12 +2719,7 @@
        part_entry_t args[MAX_ENTRIES];
 
        if (firstrun) {
-               have_raid = binary_available("raidctl");
-               have_vnd = binary_available("vnconfig");
-               have_cgd = binary_available("cgdconfig");
-               have_lvm = binary_available("lvm");
-               have_gpt = binary_available("gpt");
-               have_dk = binary_available("dkctl");
+               check_available_binaries();
 
                if (!have_raid)
                        remove_raid_options();
@@ -2801,3 +2813,15 @@
        /* retvalue <0 - error, retvalue ==0 - user quits, retvalue >0 - all ok */
        return (args[0].retvalue >= 0)?0:-1;
 }
+
+void
+update_wedges(const char *disk)
+{
+       check_available_binaries();
+
+       if (!have_dk)
+               return;
+
+       run_program(RUN_SILENT | RUN_ERROR_OK,
+           "dkctl %s makewedges", disk);
+}



Home | Main Index | Thread Index | Old Index