From a2e7e1d3dd76ebf20914b6425424ed9b58bd826a Mon Sep 17 00:00:00 2001 From: grog Date: Thu, 1 May 2003 01:39:42 +0000 Subject: Move most #includes to vext.h. Change name of history file to History to avoid name conflicts. Rewrite minor number decoding. Now we have only three types of object: subdisks, plexes and volumes. The encoding for plexes and subdisks no longer reflects the object to which they belong. The super devices are high-order volume numbers. This gives vastly more potential volumes (4 million instead of 256). Don't try to chown directories if they haven't been created. --- sbin/vinum/v.c | 83 +++++++++++++++++++++++----------------------------------- 1 file changed, 33 insertions(+), 50 deletions(-) (limited to 'sbin') diff --git a/sbin/vinum/v.c b/sbin/vinum/v.c index c6661b2..6f4a823 100644 --- a/sbin/vinum/v.c +++ b/sbin/vinum/v.c @@ -36,37 +36,14 @@ * 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.31 2000/09/03 01:29:26 grog Exp grog $ + * $Id: v.c,v 1.35 2003/04/26 02:02:49 grog Exp $ * $FreeBSD$ */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "vext.h" -#include -#include -#include -#include -#include -#include -#include -#include FILE *cf; /* config file handle */ -FILE *history; /* history file */ +FILE *History; /* history file */ char *historyfile; /* and its name */ char *dateformat; /* format in which to store date */ @@ -150,11 +127,11 @@ main(int argc, char *argv[], char *envp[]) errno); exit(1); } - history = fopen(historyfile, "a+"); - if (history != NULL) { + History = fopen(historyfile, "a+"); + if (History != NULL) { timestamp(); - fprintf(history, "*** " VINUMMOD " started ***\n"); - fflush(history); /* before we start the daemon */ + fprintf(History, "*** " VINUMMOD " started ***\n"); + fflush(History); /* before we start the daemon */ } if (sysctlbyname("vfs.devfs.generation", NULL, NULL, NULL, 0) == 0) no_devfs = 0; @@ -246,8 +223,8 @@ main(int argc, char *argv[], char *envp[]) if (tokens) parseline(tokens, token); /* and do what he says */ } - if (history) - fflush(history); + if (History) + fflush(History); } } return 0; /* normal completion */ @@ -336,11 +313,11 @@ parseline(int args, char *argv[]) int j; enum keyword command; /* command to execute */ - if (history != NULL) { /* save the command to history file */ + if (History != NULL) { /* save the command to history file */ timestamp(); for (i = 0; i < args; i++) /* all args */ - fprintf(history, "%s ", argv[i]); - fputs("\n", history); + fprintf(History, "%s ", argv[i]); + fputs("\n", History); } if ((args == 0) /* empty line */ ||(*argv[0] == '#')) /* or a comment, */ @@ -544,9 +521,9 @@ make_devices(void) perror(VINUMMOD ": Can't write to " _PATH_DEV); return; } - if (history) { + if (History) { timestamp(); - fprintf(history, "*** Created devices ***\n"); + fprintf(History, "*** Created devices ***\n"); } if (superdev >= 0) /* super device open */ close(superdev); @@ -559,10 +536,9 @@ make_devices(void) if (mknod(VINUM_SUPERDEV_NAME, S_IRUSR | S_IWUSR | S_IFCHR, /* user only */ - makedev(VINUM_CDEV_MAJOR, VINUM_SUPERDEV)) < 0) + makedev(VINUM_CDEV_MAJOR, VINUM_SUPERDEV_VOL)) < 0) fprintf(stderr, "Can't create %s: %s\n", VINUM_SUPERDEV_NAME, strerror(errno)); - superdev = open(VINUM_SUPERDEV_NAME, O_RDWR); /* open the super device */ if (superdev < 0) { perror(VINUM_SUPERDEV_NAME); @@ -570,7 +546,7 @@ make_devices(void) } if (mknod(VINUM_DAEMON_DEV_NAME, /* daemon super device */ S_IRUSR | S_IWUSR | S_IFCHR, /* user only */ - makedev(VINUM_CDEV_MAJOR, VINUM_DAEMON_DEV)) < 0) + makedev(VINUM_CDEV_MAJOR, VINUM_DAEMON_VOL)) < 0) fprintf(stderr, "Can't create %s: %s\n", VINUM_DAEMON_DEV_NAME, strerror(errno)); if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) { @@ -608,26 +584,29 @@ make_vol_dev(int volno, int recurse) get_volume_info(&vol, volno); if (vol.state != volume_unallocated) { /* we could have holes in our lists */ - voldev = VINUMDEV(volno, 0, 0, VINUM_VOLUME_TYPE); /* create a device number */ + voldev = VINUMDEV(volno, VINUM_VOLUME_TYPE); /* create a device number */ /* Create /dev/vinum/ */ sprintf(filename, VINUM_DIR "/%s", vol.name); if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, voldev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); /* Create /dev/vinum/vol/ */ sprintf(filename, VINUM_DIR "/vol/%s", vol.name); if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, voldev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); if (vol.plexes > 0) { /* Create /dev/vinum/vol/.plex/ */ sprintf(filename, VINUM_DIR "/vol/%s.plex", vol.name); if (mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); } if (recurse) for (plexno = 0; plexno < vol.plexes; plexno++) @@ -654,23 +633,26 @@ make_plex_dev(int plexno, int recurse) sprintf(filename, VINUM_DIR "/plex/%s", plex.name); if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); if (plex.volno >= 0) { get_volume_info(&vol, plex.volno); - plexdev = VINUMDEV(plex.volno, plexno, 0, VINUM_PLEX_TYPE); + plexdev = VINUMDEV(plex.volno, VINUM_PLEX_TYPE); /* 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) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); /* 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) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); } if (recurse) { for (sdno = 0; sdno < plex.subdisks; sdno++) { @@ -696,7 +678,8 @@ make_sd_dev(int sdno) sprintf(filename, VINUM_DIR "/sd/%s", sd.name); if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, sddev) < 0) fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno)); - (void)chown(filename, UID_ROOT, gid_operator); + else + chown(filename, UID_ROOT, gid_operator); } } @@ -877,7 +860,7 @@ timestamp() char datetext[MAXDATETEXT]; time_t sec; - if (history != NULL) { + if (History != NULL) { if (gettimeofday(&now, NULL) != 0) { fprintf(stderr, "Can't get time: %s\n", strerror(errno)); return; @@ -885,7 +868,7 @@ timestamp() sec = now.tv_sec; date = localtime(&sec); strftime(datetext, MAXDATETEXT, dateformat, date), - fprintf(history, + fprintf(History, "%s.%06ld ", datetext, now.tv_usec); -- cgit v1.1