From 557b41f4e9ce086047aaffd2325d860ef65cd318 Mon Sep 17 00:00:00 2001 From: alfred Date: Tue, 20 Feb 2001 22:07:36 +0000 Subject: Fix vinum for both devfs and non-devfs systems. userland tool: Use the vfs.devfs.generation sysctl to test for devfs presense (thanks phk!) when devfs is active it will not try to create the device nodes in /dev and therefore will not complain about the failure to do so. Revert the change in the #define for VINUM_DIR in the kernel header so that vinum can find its device nodes. Replace perror() with vinum_perror() to print file/line when DEVBUG is defined (not defined by default). kernel: Don't use the #define names for the "superdev" creation since they will be prepended by "/dev/" (based on VINUM_DIR), instead use string constants. Create both debug and non-debug "superdev" nodes in the devfs. Problem noticed and fix tested by: Martin Blapp --- sbin/vinum/Makefile | 4 ++++ sbin/vinum/commands.c | 38 +++++++++++++++++----------------- sbin/vinum/list.c | 26 +++++++++++------------ sbin/vinum/v.c | 54 +++++++++++++++++++++++++++++++----------------- sbin/vinum/vext.h | 13 +++++++++++- sbin/vinum/vinum.8 | 2 +- sys/dev/vinum/vinum.c | 13 +++++++++--- sys/dev/vinum/vinumvar.h | 2 +- 8 files changed, 95 insertions(+), 57 deletions(-) diff --git a/sbin/vinum/Makefile b/sbin/vinum/Makefile index e817e3a..c5c650a 100644 --- a/sbin/vinum/Makefile +++ b/sbin/vinum/Makefile @@ -5,6 +5,10 @@ SRCS= v.c list.c vinumparser.c vinumutil.c vext.h commands.c MAN8= vinum.8 CFLAGS+= -I${.CURDIR}/../../sys -Wall -DVINUMDEBUG + +# Print __FILE__ and __LINE__ when doing perror() +#CFLAGS+= -DDEVBUG + DPADD= ${LIBREADLINE} ${LIBTERMCAP} ${LIBDEVSTAT} LDADD= -lreadline -ltermcap -ldevstat diff --git a/sbin/vinum/commands.c b/sbin/vinum/commands.c index f5e9c2d..44a170a 100644 --- a/sbin/vinum/commands.c +++ b/sbin/vinum/commands.c @@ -36,7 +36,7 @@ * otherwise) arising in any way out of the use of this software, even if * advised of the possibility of such damage. * - * $Id: commands.c,v 1.12 2000/03/01 03:03:53 grog Exp grog $ + * $Id: commands.c,v 1.36 2000/12/20 05:05:39 grog Exp $ * $FreeBSD$ */ @@ -127,7 +127,7 @@ vinum_create(int argc, char *argv[], char *arg0[]) if (configline == NULL) { if (ferror(dfd)) - perror("Can't read config file"); + vinum_perror("Can't read config file"); break; } file_line++; /* count the lines */ @@ -156,7 +156,7 @@ vinum_create(int argc, char *argv[], char *arg0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); make_devices(); listconfig(); checkupdates(); /* make sure we're updating */ @@ -191,11 +191,11 @@ vinum_read(int argc, char *argv[], char *arg0[]) fprintf(stdout, "** %s: %s\n", reply->msg, strerror(reply->error)); error = ioctl(superdev, VINUM_RELEASECONFIG, NULL); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); } else { error = ioctl(superdev, VINUM_RELEASECONFIG, NULL); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); make_devices(); } checkupdates(); /* make sure we're updating */ @@ -287,7 +287,7 @@ vinum_resetconfig(int argc, char *argv[], char *arg0[]) if (errno == EBUSY) fprintf(stderr, "Can't reset configuration: objects are in use\n"); else - perror("Can't find vinum config"); + vinum_perror("Can't find vinum config"); } else { make_devices(); /* recreate the /dev/vinum hierarchy */ printf("\b Vinum configuration obliterated\n"); @@ -532,7 +532,7 @@ vinum_start(int argc, char *argv[], char *arg0[]) tokens = 0; /* no tokens yet */ if (getdevs(&statinfo) < 0) { /* find out what devices we have */ - perror("Can't get device list"); + vinum_perror("Can't get device list"); return; } namelist[0] = '\0'; /* start with empty namelist */ @@ -707,7 +707,7 @@ vinum_stop(int argc, char *argv[], char *arg0[]) fileid = kldfind(VINUMMOD); if ((fileid < 0) /* no go */ ||(kldunload(fileid) < 0)) - perror("Can't unload " VINUMMOD); + vinum_perror("Can't unload " VINUMMOD); else { fprintf(stderr, VINUMMOD " unloaded\n"); exit(0); @@ -716,7 +716,7 @@ vinum_stop(int argc, char *argv[], char *arg0[]) /* If we got here, the stop failed. Reopen the superdevice. */ superdev = open(VINUM_SUPERDEV_NAME, O_RDWR); /* reopen vinum superdevice */ if (superdev < 0) { - perror("Can't reopen Vinum superdevice"); + vinum_perror("Can't reopen Vinum superdevice"); exit(1); } } else { /* stop specified objects */ @@ -873,7 +873,7 @@ vinum_resetstats(int argc, char *argv[], char *argv0[]) enum objecttype type; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } if (argc == 0) { @@ -935,7 +935,7 @@ vinum_attach(int argc, char *argv[], char *argv0[]) return; } if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } msg.index = find_object(objname, &msg.type); /* find the object to attach */ @@ -1057,7 +1057,7 @@ vinum_detach(int argc, char *argv[], char *argv0[]) return; } if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } msg.index = find_object(argv[0], &msg.type); /* find the object to detach */ @@ -1197,7 +1197,7 @@ vinum_rename(int argc, char *argv[], char *argv0[]) return; } if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } vinum_rename_2(argv[0], argv[1]); @@ -1227,7 +1227,7 @@ vinum_mv(int argc, char *argv[], char *argv0[]) } /* Get current config */ if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Cannot get vinum config\n"); + vinum_perror("Cannot get vinum config\n"); return; } /* Get our destination */ @@ -1616,7 +1616,7 @@ vinum_concat(int argc, char *argv[], char *argv0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); find_object(objectname, &type); /* find the index of the volume */ make_vol_dev(vol.volno, 1); /* and create the devices */ if (vflag) { @@ -1761,7 +1761,7 @@ vinum_stripe(int argc, char *argv[], char *argv0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); find_object(objectname, &type); /* find the index of the volume */ make_vol_dev(vol.volno, 1); /* and create the devices */ if (vflag) { @@ -1905,7 +1905,7 @@ vinum_raid4(int argc, char *argv[], char *argv0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); find_object(objectname, &type); /* find the index of the volume */ make_vol_dev(vol.volno, 1); /* and create the devices */ if (vflag) { @@ -2049,7 +2049,7 @@ vinum_raid5(int argc, char *argv[], char *argv0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); find_object(objectname, &type); /* find the index of the volume */ make_vol_dev(vol.volno, 1); /* and create the devices */ if (vflag) { @@ -2224,7 +2224,7 @@ vinum_mirror(int argc, char *argv[], char *argv0[]) ioctltype = 0; /* saveconfig after update */ error = ioctl(superdev, VINUM_SAVECONFIG, &ioctltype); /* save the config to disk */ if (error != 0) - perror("Can't save Vinum config"); + vinum_perror("Can't save Vinum config"); find_object(objectname, &type); /* find the index of the volume */ make_vol_dev(vol.volno, 1); /* and create the devices */ if (vflag) { diff --git a/sbin/vinum/list.c b/sbin/vinum/list.c index 041ec38..81acc93 100644 --- a/sbin/vinum/list.c +++ b/sbin/vinum/list.c @@ -39,7 +39,7 @@ * otherwise) arising in any way out of the use of this software, even if * advised of the possibility of such damage. * - * $Id: list.c,v 1.25 2000/12/20 03:38:43 grog Exp grog $ + * $Id: list.c,v 1.30 2001/01/14 11:42:19 grog Exp $ * $FreeBSD$ */ @@ -273,7 +273,7 @@ vinum_ld(int argc, char *argv[], char *argv0[]) enum objecttype type; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } if (argc == 0) { @@ -398,7 +398,7 @@ vinum_lv(int argc, char *argv[], char *argv0[]) enum objecttype type; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } if (argc == 0) @@ -565,7 +565,7 @@ vinum_lp(int argc, char *argv[], char *argv0[]) enum objecttype type; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } if (argc == 0) { @@ -768,7 +768,7 @@ vinum_ls(int argc, char *argv[], char *argv0[]) enum objecttype type; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } if (argc == 0) { @@ -793,7 +793,7 @@ void listconfig() { if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } printf("%d drives:\n", vinum_conf.drives_used); @@ -841,12 +841,12 @@ vinum_info(int argc, char *argv[], char *argv0[]) #endif if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } printf("Flags: 0x%x\n", vinum_conf.flags); if (ioctl(superdev, VINUM_MEMINFO, &meminfo) < 0) { - perror("Can't get information"); + vinum_perror("Can't get information"); return; } printf("Total of %d blocks malloced, total memory: %d\nMaximum allocs: %8d, malloc table at 0x%08x\n", @@ -862,7 +862,7 @@ vinum_info(int argc, char *argv[], char *argv0[]) for (i = 0; i < meminfo.mallocs; i++) { malloced.seq = i; if (ioctl(superdev, VINUM_MALLOCINFO, &malloced) < 0) { - perror("Can't get information"); + vinum_perror("Can't get information"); return; } if (!(i & 63)) @@ -881,7 +881,7 @@ vinum_info(int argc, char *argv[], char *argv0[]) for (i = RQINFO_SIZE - 1; i >= 0; i--) { /* go through the request list in order */ *((int *) &rq) = i; if (ioctl(superdev, VINUM_RQINFO, &rq) < 0) { - perror("Can't get information"); + vinum_perror("Can't get information"); return; } /* Compress devminor into something printable. */ @@ -1067,7 +1067,7 @@ printconfig(FILE * of, char *comment) struct drive drive; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } uname(&uname_s); /* get our system name */ @@ -1158,7 +1158,7 @@ list_defective_objects() int heading_needed = 1; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } for (o = 0; o < vinum_conf.drives_allocated; o++) { @@ -1237,7 +1237,7 @@ vinum_dumpconfig(int argc, char *argv[], char *argv0[]) tokens = 0; /* no tokens yet */ if (getdevs(&statinfo) < 0) { /* find out what devices we have */ - perror("Can't get device list"); + vinum_perror("Can't get device list"); return; } namelist[0] = '\0'; /* start with empty namelist */ diff --git a/sbin/vinum/v.c b/sbin/vinum/v.c index 14e9483..0cda377 100644 --- a/sbin/vinum/v.c +++ b/sbin/vinum/v.c @@ -36,7 +36,7 @@ * otherwise) arising in any way out of the use of this software, even if * advised of the possibility of such damage. * - * $Id: v.c,v 1.30 2000/05/07 04:20:53 grog Exp grog $ + * $Id: v.c,v 1.30 2000/09/03 01:29:29 grog Exp $ * $FreeBSD$ */ @@ -62,6 +62,7 @@ #include #include #include +#include FILE *cf; /* config file handle */ FILE *history; /* history file */ @@ -116,7 +117,7 @@ main(int argc, char *argv[], char *envp[]) if (modfind(VINUMMOD) < 0) { /* need to load the vinum module */ if (kldload(VINUMMOD) < 0 || modfind(VINUMMOD) < 0) { - perror(VINUMMOD ": Kernel module not available"); + vinum_perror(VINUMMOD ": Kernel module not available"); return 1; } } @@ -179,7 +180,7 @@ main(int argc, char *argv[], char *envp[]) } else if (errno == ENOENT) /* we don't have our node, */ make_devices(); /* create them first */ if (superdev < 0) { - perror("Can't open " VINUM_SUPERDEV_NAME); + vinum_perror("Can't open " VINUM_SUPERDEV_NAME); return 1; } } @@ -500,7 +501,7 @@ find_drive_by_devname(char *name) int driveno; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return NULL; } for (driveno = 0; driveno < vinum_conf.drives_allocated; driveno++) { @@ -512,6 +513,8 @@ find_drive_by_devname(char *name) return NULL; /* no drive of that name */ } +static int devfs_is_active = 0; + /* Create the device nodes for vinum objects */ void make_devices(void) @@ -521,11 +524,16 @@ make_devices(void) int sdno; int driveno; - if (access("/dev", W_OK) < 0) { /* can't access /dev to write? */ + if (sysctlbyname("vfs.devfs.generation", NULL, NULL, NULL, 0) == 0) + devfs_is_active = 1; + else + devfs_is_active = 0; + + if (!devfs_is_active && access("/dev", W_OK) < 0) { /* can't access /dev to write? */ if (errno == EROFS) /* because it's read-only, */ fprintf(stderr, VINUMMOD ": /dev is mounted read-only, not rebuilding " VINUM_DIR "\n"); else - perror(VINUMMOD ": Can't write to /dev"); + vinum_perror(VINUMMOD ": Can't write to /dev"); return; } if (history) { @@ -535,31 +543,37 @@ make_devices(void) if (superdev >= 0) /* super device open */ close(superdev); - system("rm -rf " VINUM_DIR); /* remove the old directories */ - system("mkdir -p " VINUM_DIR "/drive " /* and make them again */ + if (!devfs_is_active) { + system("rm -rf " VINUM_DIR); /* remove the old directories */ + system("mkdir -p " VINUM_DIR "/drive " /* and make them again */ VINUM_DIR "/plex " VINUM_DIR "/sd " VINUM_DIR "/vol"); + } - if (mknod(VINUM_SUPERDEV_NAME, + if (!devfs_is_active && mknod(VINUM_SUPERDEV_NAME, S_IRUSR | S_IWUSR | S_IFCHR, /* user only */ makedev(VINUM_CDEV_MAJOR, VINUM_SUPERDEV)) < 0) fprintf(stderr, "Can't create %s: %s\n", VINUM_SUPERDEV_NAME, strerror(errno)); - if (mknod(VINUM_WRONGSUPERDEV_NAME, + if (!devfs_is_active && mknod(VINUM_WRONGSUPERDEV_NAME, S_IRUSR | S_IWUSR | S_IFCHR, /* user only */ makedev(VINUM_CDEV_MAJOR, VINUM_WRONGSUPERDEV)) < 0) fprintf(stderr, "Can't create %s: %s\n", VINUM_WRONGSUPERDEV_NAME, strerror(errno)); superdev = open(VINUM_SUPERDEV_NAME, O_RDWR); /* open the super device */ + if (superdev < 0) { + perror(VINUM_SUPERDEV_NAME); + return; + } - if (mknod(VINUM_DAEMON_DEV_NAME, /* daemon super device */ + if (!devfs_is_active && mknod(VINUM_DAEMON_DEV_NAME, /* daemon super device */ S_IRUSR | S_IWUSR | S_IFCHR, /* user only */ makedev(VINUM_CDEV_MAJOR, VINUM_DAEMON_DEV)) < 0) fprintf(stderr, "Can't create %s: %s\n", VINUM_DAEMON_DEV_NAME, strerror(errno)); if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); return; } for (volno = 0; volno < vinum_conf.volumes_allocated; volno++) @@ -576,7 +590,7 @@ make_devices(void) char filename[PATH_MAX]; /* for forming file names */ get_drive_info(&drive, driveno); - if (drive.state > drive_referenced) { + if (!devfs_is_active && drive.state > drive_referenced) { sprintf(filename, "ln -s %s " VINUM_DIR "/drive/%s", drive.devicename, drive.label.name); system(filename); } @@ -595,6 +609,7 @@ make_vol_dev(int volno, int recurse) if (vol.state != volume_unallocated) { /* we could have holes in our lists */ voldev = VINUMDEV(volno, 0, 0, VINUM_VOLUME_TYPE); /* create a device number */ + if (!devfs_is_active) { /* Create /dev/vinum/ */ sprintf(filename, VINUM_DIR "/%s", vol.name); if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, voldev) < 0) @@ -611,6 +626,7 @@ make_vol_dev(int volno, int recurse) if (mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); } + } if (recurse) for (plexno = 0; plexno < vol.plexes; plexno++) make_plex_dev(plex.plexno, recurse); @@ -634,7 +650,7 @@ make_plex_dev(int plexno, int recurse) /* /dev/vinum/plex/ */ sprintf(filename, VINUM_DIR "/plex/%s", plex.name); - if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0) + if (!devfs_is_active && mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); if (plex.volno >= 0) { @@ -643,12 +659,12 @@ make_plex_dev(int plexno, int recurse) /* Create device /dev/vinum/vol/.plex/ */ sprintf(filename, VINUM_DIR "/vol/%s.plex/%s", vol.name, plex.name); - if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0) + if (!devfs_is_active && mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); /* Create directory /dev/vinum/vol/.plex/.sd */ sprintf(filename, VINUM_DIR "/vol/%s.plex/%s.sd", vol.name, plex.name); - if (mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0) + if (!devfs_is_active && mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); } if (recurse) { @@ -673,7 +689,7 @@ make_sd_dev(int sdno) /* /dev/vinum/sd/ */ sprintf(filename, VINUM_DIR "/sd/%s", sd.name); - if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, sddev) < 0) + if (!devfs_is_active && mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, sddev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); } } @@ -697,7 +713,7 @@ find_object(const char *name, enum objecttype *type) int object; if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { - perror("Can't get vinum config"); + vinum_perror("Can't get vinum config"); *type = invalid_object; return -1; } @@ -824,7 +840,7 @@ start_daemon(void) close(superdev); /* this is the wrong device */ superdev = open(VINUM_DAEMON_DEV_NAME, O_RDWR); /* open deamon superdevice */ if (superdev < 0) { - perror("Can't open " VINUM_DAEMON_DEV_NAME); + vinum_perror("Can't open " VINUM_DAEMON_DEV_NAME); exit(1); } error = daemon(0, 0); /* this will fork again, but who's counting? */ diff --git a/sbin/vinum/vext.h b/sbin/vinum/vext.h index fa57832..d136b0f 100644 --- a/sbin/vinum/vext.h +++ b/sbin/vinum/vext.h @@ -35,7 +35,7 @@ */ /* - * $Id: vext.h,v 1.17 2000/05/07 04:17:12 grog Exp grog $ + * $Id: vext.h,v 1.18 2000/06/02 03:55:01 grog Exp $ * $FreeBSD$ */ @@ -176,3 +176,14 @@ extern int file_line; /* and line in input file (yes, this is tacky) */ extern char buffer[]; /* buffer to read in to */ #define min(a, b) a < b? a: b + +#ifdef DEVBUG +#define vinum_perror(str) \ + do { \ + fprintf(stderr, "%s:%d> ", __FILE__, __LINE__); \ + perror(str); \ + } while (0) +#else +#define vinum_perror(str) perror(str) +#endif + diff --git a/sbin/vinum/vinum.8 b/sbin/vinum/vinum.8 index 9c67d5d..d0ca15f 100644 --- a/sbin/vinum/vinum.8 +++ b/sbin/vinum/vinum.8 @@ -34,7 +34,7 @@ .\" otherwise) arising in any way out of the use of this software, even if .\" advised of the possibility of such damage. .\" -.\" $Id: vinum.8,v 1.13 2000/01/03 03:12:56 grog Exp grog $ +.\" $Id: vinum.8,v 1.48 2001/01/15 22:15:05 grog Exp $ .\" $FreeBSD$ .\" .Dd December 20, 2000 diff --git a/sys/dev/vinum/vinum.c b/sys/dev/vinum/vinum.c index ea4f7d2..1c639f6 100644 --- a/sys/dev/vinum/vinum.c +++ b/sys/dev/vinum/vinum.c @@ -70,6 +70,7 @@ struct _vinum_conf vinum_conf; /* configuration information */ dev_t vinum_daemon_dev; dev_t vinum_super_dev; +dev_t vinum_debug_super_dev; /* * Called by main() during pseudo-device attachment. All we need @@ -91,10 +92,15 @@ vinumattach(void *dummy) dqend = NULL; cdevsw_add(&vinum_cdevsw); /* add the cdevsw entry */ + vinum_daemon_dev = make_dev(&vinum_cdevsw, VINUM_DAEMON_DEV, - UID_ROOT, GID_WHEEL, S_IRUSR|S_IWUSR, VINUM_DAEMON_DEV_NAME); /* daemon device */ - vinum_super_dev = make_dev(&vinum_cdevsw, VINUM_SUPERDEV, - UID_ROOT, GID_WHEEL, S_IRUSR|S_IWUSR, VINUM_SUPERDEV_NAME); /* daemon device */ + UID_ROOT, GID_WHEEL, S_IRUSR|S_IWUSR, "vinum/controld"); + vinum_debug_super_dev = make_dev(&vinum_cdevsw, + VINUMMINOR (1, 0, 0, VINUM_SUPERDEV_TYPE), + UID_ROOT, GID_WHEEL, S_IRUSR|S_IWUSR, "vinum/Control"); + vinum_super_dev = make_dev(&vinum_cdevsw, + VINUMMINOR (2, 0, 0, VINUM_SUPERDEV_TYPE), + UID_ROOT, GID_WHEEL, S_IRUSR|S_IWUSR, "vinum/control"); /* allocate space: drives... */ DRIVE = (struct drive *) Malloc(sizeof(struct drive) * INITIAL_DRIVES); @@ -257,6 +263,7 @@ vinum_modevent(module_t mod, modeventtype_t type, void *unused) #endif destroy_dev(vinum_daemon_dev); /* daemon device */ destroy_dev(vinum_super_dev); + destroy_dev(vinum_debug_super_dev); cdevsw_remove(&vinum_cdevsw); log(LOG_INFO, "vinum: unloaded\n"); /* tell the world */ return 0; diff --git a/sys/dev/vinum/vinumvar.h b/sys/dev/vinum/vinumvar.h index 9e61128..44a9c8b 100644 --- a/sys/dev/vinum/vinumvar.h +++ b/sys/dev/vinum/vinumvar.h @@ -216,7 +216,7 @@ struct devcode { unsigned signbit:1; /* to make 32 bits */ }; -#define VINUM_DIR "vinum" +#define VINUM_DIR "/dev/vinum" /* * These definitions help catch -- cgit v1.1