Changes to config(8) to support dump configuration in the wake of the
new swap system. The dump specification syntax is now more flexible, and supports constructs like the following: config netbsd root on ? type ? dumps on ? - wildcarded root, fstype, and dump device config netbsd root on ? type ffs dumps on sd0b - wildcarded root, ffs root fs, always dump on sd0b config netbsd root on de0 type nfs dumps on wd0b - mount an nfs root using de0, and write kernel crash dumps to wd0b Also, garbage-collect some now unused code, now that swap configuration is no longer handled by config(8).
This commit is contained in:
parent
70eb4a4223
commit
9fec93804a
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: mkswap.c,v 1.7 1997/06/12 15:03:11 mrg Exp $ */
|
||||
/* $NetBSD: mkswap.c,v 1.8 1997/06/14 04:25:55 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -88,7 +88,7 @@ mkoneswap(cf)
|
||||
register struct nvlist *nv;
|
||||
register FILE *fp;
|
||||
char fname[200];
|
||||
char rootinfo[200];
|
||||
char specinfo[200];
|
||||
|
||||
(void)sprintf(fname, "swap%s.c", cf->cf_name);
|
||||
if ((fp = fopen(fname, "w")) == NULL) {
|
||||
@ -106,12 +106,12 @@ mkoneswap(cf)
|
||||
*/
|
||||
nv = cf->cf_root;
|
||||
if (cf->cf_root->nv_str == s_qmark)
|
||||
strcpy(rootinfo, "NULL");
|
||||
strcpy(specinfo, "NULL");
|
||||
else
|
||||
sprintf(rootinfo, "\"%s\"", cf->cf_root->nv_str);
|
||||
if (fprintf(fp, "const char *rootspec = %s;\n", rootinfo) < 0)
|
||||
sprintf(specinfo, "\"%s\"", cf->cf_root->nv_str);
|
||||
if (fprintf(fp, "const char *rootspec = %s;\n", specinfo) < 0)
|
||||
goto wrerror;
|
||||
if (fprintf(fp, "dev_t\trootdev = %s;\t/* %s */\n",
|
||||
if (fprintf(fp, "dev_t\trootdev = %s;\t/* %s */\n\n",
|
||||
mkdevstr(nv->nv_int),
|
||||
nv->nv_str == s_qmark ? "wildcarded" : nv->nv_str) < 0)
|
||||
goto wrerror;
|
||||
@ -120,22 +120,28 @@ mkoneswap(cf)
|
||||
* Emit the dump device.
|
||||
*/
|
||||
nv = cf->cf_dump;
|
||||
if (fprintf(fp, "dev_t\tdumpdev = %s;\t/* %s */\n",
|
||||
if (cf->cf_dump == NULL)
|
||||
strcpy(specinfo, "NULL");
|
||||
else
|
||||
sprintf(specinfo, "\"%s\"", cf->cf_dump->nv_str);
|
||||
if (fprintf(fp, "const char *dumpspec = %s;\n", specinfo) < 0)
|
||||
goto wrerror;
|
||||
if (fprintf(fp, "dev_t\tdumpdev = %s;\t/* %s */\n\n",
|
||||
nv ? mkdevstr(nv->nv_int) : "NODEV",
|
||||
nv ? (nv->nv_str ? nv->nv_str : "none") : "unspecified") < 0)
|
||||
nv ? nv->nv_str : "unspecified") < 0)
|
||||
goto wrerror;
|
||||
|
||||
/*
|
||||
* Emit the root file system.
|
||||
*/
|
||||
if (cf->cf_fstype == NULL)
|
||||
strcpy(rootinfo, "NULL");
|
||||
strcpy(specinfo, "NULL");
|
||||
else {
|
||||
sprintf(rootinfo, "%s_mountroot", cf->cf_fstype);
|
||||
if (fprintf(fp, "extern int %s __P((void));\n", rootinfo) < 0)
|
||||
sprintf(specinfo, "%s_mountroot", cf->cf_fstype);
|
||||
if (fprintf(fp, "extern int %s __P((void));\n", specinfo) < 0)
|
||||
goto wrerror;
|
||||
}
|
||||
if (fprintf(fp, "int (*mountroot) __P((void)) = %s;\n", rootinfo) < 0)
|
||||
if (fprintf(fp, "int (*mountroot) __P((void)) = %s;\n", specinfo) < 0)
|
||||
goto wrerror;
|
||||
|
||||
if (fclose(fp)) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sem.c,v 1.16 1997/06/12 15:03:13 mrg Exp $ */
|
||||
/* $NetBSD: sem.c,v 1.17 1997/06/14 04:25:56 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -59,8 +59,8 @@
|
||||
#define NAMESIZE 100 /* local name buffers */
|
||||
|
||||
const char *s_ifnet; /* magic attribute */
|
||||
const char *s_nfs;
|
||||
const char *s_qmark;
|
||||
const char *s_none;
|
||||
|
||||
static struct hashtab *cfhashtab; /* for config lookup */
|
||||
static struct hashtab *devitab; /* etc */
|
||||
@ -79,8 +79,6 @@ static struct nvlist *addtoattr __P((struct nvlist *, struct devbase *));
|
||||
static int exclude __P((struct nvlist *, const char *, const char *));
|
||||
static int resolve __P((struct nvlist **, const char *, const char *,
|
||||
struct nvlist *, int));
|
||||
static int lresolve __P((struct nvlist **, const char *, const char *,
|
||||
struct nvlist *, int));
|
||||
static struct devi *newdevi __P((const char *, int, struct devbase *d));
|
||||
static struct devi *getdevi __P((const char *));
|
||||
static const char *concat __P((const char *, int));
|
||||
@ -116,8 +114,8 @@ initsem()
|
||||
nextpseudo = &allpseudo;
|
||||
|
||||
s_ifnet = intern("ifnet");
|
||||
s_nfs = intern("nfs");
|
||||
s_qmark = intern("?");
|
||||
s_none = intern("none");
|
||||
}
|
||||
|
||||
/* Name of include file just ended (set in scan.l) */
|
||||
@ -673,21 +671,6 @@ resolve(nvp, name, what, dflt, part)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
lresolve(nvp, name, what, dflt, part)
|
||||
register struct nvlist **nvp;
|
||||
const char *name, *what;
|
||||
struct nvlist *dflt;
|
||||
int part;
|
||||
{
|
||||
int err;
|
||||
|
||||
while ((err = resolve(nvp, name, what, dflt, part)) == 0 &&
|
||||
(*nvp)->nv_next != NULL)
|
||||
nvp = &(*nvp)->nv_next;
|
||||
return (err);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add a completed configuration to the list.
|
||||
*/
|
||||
@ -709,23 +692,33 @@ addconf(cf0)
|
||||
*cf = *cf0;
|
||||
|
||||
/*
|
||||
* Check for wildcarded root device.
|
||||
* Resolve the root device.
|
||||
*/
|
||||
if (cf->cf_root->nv_str == s_qmark) {
|
||||
/*
|
||||
* Make sure no dump device specified.
|
||||
* Note single | here (check all).
|
||||
*/
|
||||
if (exclude(cf->cf_dump, name, "dump device"))
|
||||
goto bad;
|
||||
} else {
|
||||
if (cf->cf_root->nv_str != s_qmark) {
|
||||
nv = cf->cf_root;
|
||||
if (nv == NULL) {
|
||||
error("%s: no root device specified", name);
|
||||
goto bad;
|
||||
}
|
||||
if (resolve(&cf->cf_root, name, "root", nv, 'a') |
|
||||
resolve(&cf->cf_dump, name, "dumps", nv, 'b'))
|
||||
if (resolve(&cf->cf_root, name, "root", nv, 'a'))
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/*
|
||||
* Resolve the dump device.
|
||||
*/
|
||||
if (cf->cf_dump == NULL || cf->cf_dump->nv_str == s_qmark) {
|
||||
/*
|
||||
* Wildcarded dump device is equivalent to unspecified.
|
||||
*/
|
||||
cf->cf_dump = NULL;
|
||||
} else if (cf->cf_dump->nv_str == s_none) {
|
||||
/*
|
||||
* Operator has requested that no dump device should be
|
||||
* configured; do nothing.
|
||||
*/
|
||||
} else {
|
||||
if (resolve(&cf->cf_dump, name, "dumps", cf->cf_dump, 'b'))
|
||||
goto bad;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: sem.h,v 1.8 1997/05/25 18:42:57 thorpej Exp $ */
|
||||
/* $NetBSD: sem.h,v 1.9 1997/06/14 04:25:57 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -68,5 +68,5 @@ const char *wildref __P((const char *name));
|
||||
int has_attr __P((struct nvlist *, const char *));
|
||||
|
||||
extern const char *s_qmark;
|
||||
extern const char *s_nfs;
|
||||
extern const char *s_none;
|
||||
extern const char *s_ifnet;
|
||||
|
Loading…
Reference in New Issue
Block a user