The death of `options NODUMP'. Now the dump area can be dynamically

configured (and unconfigured) on the fly.  A sysctl(3) MIB variable is
provided to inspect and modify the dump device setting.
This commit is contained in:
wollman 1995-05-12 19:17:31 +00:00
parent a0ad6a34d3
commit 448bf32842
8 changed files with 81 additions and 27 deletions

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91
* $Id: autoconf.c,v 1.28 1995/05/11 02:50:11 wpaul Exp $ * $Id: autoconf.c,v 1.29 1995/05/11 19:26:07 rgrimes Exp $
*/ */
/* /*
@ -237,13 +237,36 @@ swapconf()
} }
swp->sw_nblks = ctod(dtoc(swp->sw_nblks)); swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
} }
if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize) if (dumpdev != NODEV) {
dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) - if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
Maxmem*NBPG/512; dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
if (dumplo < 0) Maxmem*NBPG/512;
dumplo = 0; if (dumplo < 0)
dumplo = 0;
}
} }
int
setdumpdev(dev_t dev)
{
long newdumplo, psize;
if (dev != NODEV && bdevsw[major(dev)].d_psize) {
psize = bdevsw[major(dev)].d_psize(dev);
newdumplo = bdevsw[major(dev)].d_psize(dev) - Maxmem*NBPG/512;
if (newdumplo >= 0) {
dumpdev = dev;
dumplo = newdumplo;
return 0;
}
return ENOSPC;
} else {
dumpdev = dev;
dumplo = 0;
return 0;
}
/*NOTREACHED*/
}
#define DOSWAP /* change swdevt and dumpdev */ #define DOSWAP /* change swdevt and dumpdev */
u_long bootdev = 0; /* should be dev_t, but not until 32 bits */ u_long bootdev = 0; /* should be dev_t, but not until 32 bits */

View File

@ -35,7 +35,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
* $Id: machdep.c,v 1.124 1995/05/11 00:16:36 wollman Exp $ * $Id: machdep.c,v 1.125 1995/05/11 19:26:08 rgrimes Exp $
*/ */
#include "npx.h" #include "npx.h"
@ -905,11 +905,8 @@ boot(arghowto)
unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */ unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */
int dumpsize = 0; /* also for savecore */ int dumpsize = 0; /* also for savecore */
#ifdef DODUMP
int dodump = 1; int dodump = 1;
#else
int dodump = 0;
#endif
/* /*
* Doadump comes here after turning off memory management and * Doadump comes here after turning off memory management and
* getting on the dump stack, either when called above, or by * getting on the dump stack, either when called above, or by

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91
* $Id: autoconf.c,v 1.28 1995/05/11 02:50:11 wpaul Exp $ * $Id: autoconf.c,v 1.29 1995/05/11 19:26:07 rgrimes Exp $
*/ */
/* /*
@ -237,13 +237,36 @@ swapconf()
} }
swp->sw_nblks = ctod(dtoc(swp->sw_nblks)); swp->sw_nblks = ctod(dtoc(swp->sw_nblks));
} }
if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize) if (dumpdev != NODEV) {
dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) - if (dumplo == 0 && bdevsw[major(dumpdev)].d_psize)
Maxmem*NBPG/512; dumplo = (*bdevsw[major(dumpdev)].d_psize)(dumpdev) -
if (dumplo < 0) Maxmem*NBPG/512;
dumplo = 0; if (dumplo < 0)
dumplo = 0;
}
} }
int
setdumpdev(dev_t dev)
{
long newdumplo, psize;
if (dev != NODEV && bdevsw[major(dev)].d_psize) {
psize = bdevsw[major(dev)].d_psize(dev);
newdumplo = bdevsw[major(dev)].d_psize(dev) - Maxmem*NBPG/512;
if (newdumplo >= 0) {
dumpdev = dev;
dumplo = newdumplo;
return 0;
}
return ENOSPC;
} else {
dumpdev = dev;
dumplo = 0;
return 0;
}
/*NOTREACHED*/
}
#define DOSWAP /* change swdevt and dumpdev */ #define DOSWAP /* change swdevt and dumpdev */
u_long bootdev = 0; /* should be dev_t, but not until 32 bits */ u_long bootdev = 0; /* should be dev_t, but not until 32 bits */

View File

@ -35,7 +35,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
* $Id: machdep.c,v 1.124 1995/05/11 00:16:36 wollman Exp $ * $Id: machdep.c,v 1.125 1995/05/11 19:26:08 rgrimes Exp $
*/ */
#include "npx.h" #include "npx.h"
@ -905,11 +905,8 @@ boot(arghowto)
unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */ unsigned long dumpmag = 0x8fca0101UL; /* magic number for savecore */
int dumpsize = 0; /* also for savecore */ int dumpsize = 0; /* also for savecore */
#ifdef DODUMP
int dodump = 1; int dodump = 1;
#else
int dodump = 0;
#endif
/* /*
* Doadump comes here after turning off memory management and * Doadump comes here after turning off memory management and
* getting on the dump stack, either when called above, or by * getting on the dump stack, either when called above, or by

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94 * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
* $Id: kern_sysctl.c,v 1.22 1995/02/20 19:42:35 guido Exp $ * $Id: kern_sysctl.c,v 1.23 1995/03/16 18:12:37 bde Exp $
*/ */
/* /*
@ -52,6 +52,7 @@
#include <sys/buf.h> #include <sys/buf.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/tty.h> #include <sys/tty.h>
#include <sys/conf.h>
#include <vm/vm.h> #include <vm/vm.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
@ -192,6 +193,7 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
struct proc *p; struct proc *p;
{ {
int error, level, inthostid; int error, level, inthostid;
dev_t ndumpdev;
/* all sysctl names at this level are terminal */ /* all sysctl names at this level are terminal */
if (namelen != 1 && !(name[0] == KERN_PROC || name[0] == KERN_PROF if (namelen != 1 && !(name[0] == KERN_PROC || name[0] == KERN_PROF
@ -293,6 +295,14 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
case KERN_NTP_PLL: case KERN_NTP_PLL:
return (ntp_sysctl(name + 1, namelen - 1, oldp, oldlenp, return (ntp_sysctl(name + 1, namelen - 1, oldp, oldlenp,
newp, newlen, p)); newp, newlen, p));
case KERN_DUMPDEV:
ndumpdev = dumpdev;
error = sysctl_struct(oldp, oldlenp, newp, newlen, &ndumpdev,
sizeof ndumpdev);
if (!error && ndumpdev != dumpdev) {
error = setdumpdev(ndumpdev);
}
return error;
default: default:
return (EOPNOTSUPP); return (EOPNOTSUPP);
} }

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)conf.h 8.3 (Berkeley) 1/21/94 * @(#)conf.h 8.3 (Berkeley) 1/21/94
* $Id: conf.h,v 1.11 1995/03/21 11:24:05 dufault Exp $ * $Id: conf.h,v 1.12 1995/04/23 09:36:59 bde Exp $
*/ */
#ifndef _SYS_CONF_H_ #ifndef _SYS_CONF_H_
@ -139,6 +139,7 @@ struct swdevt {
#ifdef KERNEL #ifdef KERNEL
extern struct swdevt swdevt[]; extern struct swdevt swdevt[];
extern int setdumpdev __P((dev_t));
dev_t chrtoblk __P((dev_t dev)); dev_t chrtoblk __P((dev_t dev));
int isdisk __P((dev_t dev, int type)); int isdisk __P((dev_t dev, int type));

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)conf.h 8.3 (Berkeley) 1/21/94 * @(#)conf.h 8.3 (Berkeley) 1/21/94
* $Id: conf.h,v 1.11 1995/03/21 11:24:05 dufault Exp $ * $Id: conf.h,v 1.12 1995/04/23 09:36:59 bde Exp $
*/ */
#ifndef _SYS_CONF_H_ #ifndef _SYS_CONF_H_
@ -139,6 +139,7 @@ struct swdevt {
#ifdef KERNEL #ifdef KERNEL
extern struct swdevt swdevt[]; extern struct swdevt swdevt[];
extern int setdumpdev __P((dev_t));
dev_t chrtoblk __P((dev_t dev)); dev_t chrtoblk __P((dev_t dev));
int isdisk __P((dev_t dev, int type)); int isdisk __P((dev_t dev, int type));

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)sysctl.h 8.1 (Berkeley) 6/2/93 * @(#)sysctl.h 8.1 (Berkeley) 6/2/93
* $Id: sysctl.h,v 1.20 1995/02/20 19:42:40 guido Exp $ * $Id: sysctl.h,v 1.21 1995/03/16 18:16:26 bde Exp $
*/ */
#ifndef _SYS_SYSCTL_H_ #ifndef _SYS_SYSCTL_H_
@ -135,7 +135,8 @@ struct ctlname {
#define KERN_BOOTFILE 26 /* string: name of booted kernel */ #define KERN_BOOTFILE 26 /* string: name of booted kernel */
#define KERN_MAXFILESPERPROC 27 /* int: max open files per proc */ #define KERN_MAXFILESPERPROC 27 /* int: max open files per proc */
#define KERN_MAXPROCPERUID 28 /* int: max processes per uid */ #define KERN_MAXPROCPERUID 28 /* int: max processes per uid */
#define KERN_MAXID 29 /* number of valid kern ids */ #define KERN_DUMPDEV 29 /* dev_t: device to dump on */
#define KERN_MAXID 30 /* number of valid kern ids */
#define CTL_KERN_NAMES { \ #define CTL_KERN_NAMES { \
{ 0, 0 }, \ { 0, 0 }, \
@ -167,6 +168,7 @@ struct ctlname {
{ "bootfile", CTLTYPE_STRING }, \ { "bootfile", CTLTYPE_STRING }, \
{ "maxfilesperproc", CTLTYPE_INT }, \ { "maxfilesperproc", CTLTYPE_INT }, \
{ "maxprocperuid", CTLTYPE_INT }, \ { "maxprocperuid", CTLTYPE_INT }, \
{ "dumpdev", CTLTYPE_STRUCT }, /* we lie; don't print as int */ \
} }
/* /*