summaryrefslogtreecommitdiffstats
path: root/sbin/vinum
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>2001-05-22 02:38:11 +0000
committergrog <grog@FreeBSD.org>2001-05-22 02:38:11 +0000
commit79d1772ca9f79a013498ec758c9ce777e9d62db9 (patch)
treee0c18813cbe50c5ec486030b67b3f18f8ac89a1e /sbin/vinum
parent32e728a5c961f3d44bf93e52a8c7b01023b8ff09 (diff)
downloadFreeBSD-src-79d1772ca9f79a013498ec758c9ce777e9d62db9.zip
FreeBSD-src-79d1772ca9f79a013498ec758c9ce777e9d62db9.tar.gz
Tidy up header files. Don't include stuff we don't need.
Remove 'vinum_perror'. Only call make_devices if we're not running devfs. Use userland expurgated versions of kernel structures, since that's what the ioctls return now. Update help list, which was lagging behind reality. checkupdates: move to list.c to simplify header file mess. vinum_stripe, vinum_mirror, vinum_raid4, vinum_raid5: change the default stripe size from 256 k to 279 k, thus hopefully spreading superblocks more evenly.
Diffstat (limited to 'sbin/vinum')
-rw-r--r--sbin/vinum/commands.c215
1 files changed, 107 insertions, 108 deletions
diff --git a/sbin/vinum/commands.c b/sbin/vinum/commands.c
index 2566af2..4c501c7 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.36 2000/12/20 05:05:39 grog Exp $
+ * $Id: commands.c,v 1.14 2000/11/14 20:01:23 grog Exp grog $
* $FreeBSD$
*/
@@ -53,8 +53,6 @@
#include <syslog.h>
#include <unistd.h>
#include <sys/ioctl.h>
-#include <dev/vinum/vinumhdr.h>
-#include <dev/vinum/request.h>
#include "vext.h"
#include <sys/types.h>
#include <sys/linker.h>
@@ -128,7 +126,7 @@ vinum_create(int argc, char *argv[], char *arg0[])
if (configline == NULL) {
if (ferror(dfd))
- vinum_perror("Can't read config file");
+ perror("Can't read config file");
break;
}
file_line++; /* count the lines */
@@ -157,8 +155,9 @@ 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)
- vinum_perror("Can't save Vinum config");
- make_devices();
+ perror("Can't save Vinum config");
+ if (no_devfs)
+ make_devices();
listconfig();
checkupdates(); /* make sure we're updating */
}
@@ -192,12 +191,13 @@ 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)
- vinum_perror("Can't save Vinum config");
+ perror("Can't save Vinum config");
} else {
error = ioctl(superdev, VINUM_RELEASECONFIG, NULL); /* save the config to disk */
if (error != 0)
- vinum_perror("Can't save Vinum config");
- make_devices();
+ perror("Can't save Vinum config");
+ if (no_devfs)
+ make_devices();
}
checkupdates(); /* make sure we're updating */
}
@@ -288,9 +288,10 @@ vinum_resetconfig(int argc, char *argv[], char *arg0[])
if (errno == EBUSY)
fprintf(stderr, "Can't reset configuration: objects are in use\n");
else
- vinum_perror("Can't find vinum config");
+ perror("Can't find vinum config");
} else {
- make_devices(); /* recreate the /dev/vinum hierarchy */
+ if (no_devfs)
+ make_devices(); /* recreate the /dev/vinum hierarchy */
printf("\b Vinum configuration obliterated\n");
start_daemon(); /* then restart the daemon */
}
@@ -533,7 +534,7 @@ vinum_start(int argc, char *argv[], char *arg0[])
tokens = 0; /* no tokens yet */
if (getdevs(&statinfo) < 0) { /* find out what devices we have */
- vinum_perror("Can't get device list");
+ perror("Can't get device list");
return;
}
namelist[0] = '\0'; /* start with empty namelist */
@@ -543,9 +544,9 @@ vinum_start(int argc, char *argv[], char *arg0[])
struct devstat *stat = &statinfo.dinfo->devices[i];
if (((stat->device_type & DEVSTAT_TYPE_MASK) == DEVSTAT_TYPE_DIRECT) /* disk device */
-&&((stat->device_type & DEVSTAT_TYPE_PASS) == 0) /* and not passthrough */
+ &&((stat->device_type & DEVSTAT_TYPE_PASS) == 0) /* and not passthrough */
&&((stat->device_name[0] != '\0'))) { /* and it has a name */
- sprintf(enamelist, "%s%s%d", _PATH_DEV, stat->device_name, stat->unit_number);
+ sprintf(enamelist, _PATH_DEV "%s%d", stat->device_name, stat->unit_number);
token[tokens] = enamelist; /* point to it */
tokens++; /* one more token */
enamelist = &enamelist[strlen(enamelist) + 1]; /* and start beyond the end */
@@ -708,7 +709,7 @@ vinum_stop(int argc, char *argv[], char *arg0[])
fileid = kldfind(VINUMMOD);
if ((fileid < 0) /* no go */
||(kldunload(fileid) < 0))
- vinum_perror("Can't unload " VINUMMOD);
+ perror("Can't unload " VINUMMOD);
else {
fprintf(stderr, VINUMMOD " unloaded\n");
exit(0);
@@ -717,7 +718,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) {
- vinum_perror("Can't reopen Vinum superdevice");
+ perror("Can't reopen Vinum superdevice");
exit(1);
}
} else { /* stop specified objects */
@@ -796,7 +797,7 @@ reset_volume_stats(int volno, int recurse)
fprintf(stderr, "Can't reset stats for volume %d: %s\n", volno, reply->msg);
longjmp(command_fail, -1);
} else if (recurse) {
- struct volume vol;
+ struct _volume vol;
int plexno;
get_volume_info(&vol, volno);
@@ -819,8 +820,8 @@ reset_plex_stats(int plexno, int recurse)
fprintf(stderr, "Can't reset stats for plex %d: %s\n", plexno, reply->msg);
longjmp(command_fail, -1);
} else if (recurse) {
- struct plex plex;
- struct sd sd;
+ struct _plex plex;
+ struct _sd sd;
int sdno;
get_plex_info(&plex, plexno);
@@ -874,7 +875,7 @@ vinum_resetstats(int argc, char *argv[], char *argv0[])
enum objecttype type;
if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) {
- vinum_perror("Can't get vinum config");
+ perror("Can't get vinum config");
return;
}
if (argc == 0) {
@@ -936,7 +937,7 @@ vinum_attach(int argc, char *argv[], char *argv0[])
return;
}
if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) {
- vinum_perror("Can't get vinum config");
+ perror("Can't get vinum config");
return;
}
msg.index = find_object(objname, &msg.type); /* find the object to attach */
@@ -1003,8 +1004,8 @@ vinum_attach(int argc, char *argv[], char *argv0[])
}
if (rename) {
struct sd;
- struct plex;
- struct volume;
+ struct _plex;
+ struct _volume;
/* we've overwritten msg with the
* ioctl reply, start again */
@@ -1058,7 +1059,7 @@ vinum_detach(int argc, char *argv[], char *argv0[])
return;
}
if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) {
- vinum_perror("Can't get vinum config");
+ perror("Can't get vinum config");
return;
}
msg.index = find_object(argv[0], &msg.type); /* find the object to detach */
@@ -1198,7 +1199,7 @@ vinum_rename(int argc, char *argv[], char *argv0[])
return;
}
if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) {
- vinum_perror("Can't get vinum config");
+ perror("Can't get vinum config");
return;
}
vinum_rename_2(argv[0], argv[1]);
@@ -1228,7 +1229,7 @@ vinum_mv(int argc, char *argv[], char *argv0[])
}
/* Get current config */
if (ioctl(superdev, VINUM_GETCONFIG, &vinum_conf) < 0) {
- vinum_perror("Cannot get vinum config\n");
+ perror("Cannot get vinum config\n");
return;
}
/* Get our destination */
@@ -1330,68 +1331,80 @@ vinum_help(int argc, char *argv[], char *argv0[])
char commands[] =
{
"COMMANDS\n"
- "create [-f description-file]\n"
- " Create a volume as described in description-file\n"
"attach plex volume [rename]\n"
"attach subdisk plex [offset] [rename]\n"
- " Attach a plex to a volume, or a subdisk to a plex.\n"
- "debug\n"
- " Cause the volume manager to enter the kernel debugger.\n"
+ " Attach a plex to a volume, or a subdisk to a plex.\n"
+ "checkparity plex [-f] [-v]\n"
+ " Check the parity blocks of a RAID-4 or RAID-5 plex.\n"
+ "concat [-f] [-n name] [-v] drives\n"
+ " Create a concatenated volume from the specified drives.\n"
+ "create [-f] description-file\n"
+ " Create a volume as described in description-file.\n"
+ "debug Cause the volume manager to enter the kernel debugger.\n"
"debug flags\n"
- " Set debugging flags.\n"
- "detach [plex | subdisk]\n"
- " Detach a plex or subdisk from the volume or plex to which it is\n"
- " attached.\n"
- "info [-v]\n"
- " List information about volume manager state.\n"
- "init [-v] [-w] plex\n"
- " Initialize a plex by writing zeroes to all its subdisks.\n"
+ " Set debugging flags.\n"
+ "detach [-f] [plex | subdisk]\n"
+ " Detach a plex or subdisk from the volume or plex to which it is\n"
+ " attached.\n"
+ "dumpconfig [drive ...]\n"
+ " List the configuration information stored on the specified\n"
+ " drives, or all drives in the system if no drive names are speci-\n"
+ " fied.\n"
+ "info [-v] [-V]\n"
+ " List information about volume manager state.\n"
+ "init [-S size] [-w] plex | subdisk\n"
+ " Initialize the contents of a subdisk or all the subdisks of a\n"
+ " plex to all zeros.\n"
"label volume\n"
- " Create a volume label\n"
- "list [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
- " List information about specified objects\n"
- "l [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
- " List information about specified objects (alternative to\n"
- " list command)\n"
+ " Create a volume label.\n"
+ "l | list [-r] [-s] [-v] [-V] [volume | plex | subdisk]\n"
+ " List information about specified objects.\n"
"ld [-r] [-s] [-v] [-V] [volume]\n"
- " List information about drives\n"
+ " List information about drives.\n"
"ls [-r] [-s] [-v] [-V] [subdisk]\n"
- " List information about subdisks\n"
+ " List information about subdisks.\n"
"lp [-r] [-s] [-v] [-V] [plex]\n"
- " List information about plexes\n"
+ " List information about plexes.\n"
"lv [-r] [-s] [-v] [-V] [volume]\n"
- " List information about volumes\n"
- "printconfig [file]\n"
- " Write a copy of the current configuration to file.\n"
+ " List information about volumes.\n"
"makedev\n"
- " Remake the device nodes in " _PATH_DEV "vinum.\n"
- "move drive [subdisk | plex | drive]\n"
- " Move the subdisks of the specified object(s) to drive.\n"
- "quit\n"
- " Exit the vinum program when running in interactive mode. Nor-\n"
- " mally this would be done by entering the EOF character.\n"
- "read disk [disk...]\n"
- " Read the vinum configuration from the specified disks.\n"
+ " Remake the device nodes in /dev/vinum.\n"
+ "mirror [-f] [-n name] [-s] [-v] drives\n"
+ " Create a mirrored volume from the specified drives.\n"
+ "move | mv -f drive object ...\n"
+ " Move the object(s) to the specified drive.\n"
+ "printconfig [file]\n"
+ " Write a copy of the current configuration to file.\n"
+ "quit Exit the vinum program when running in interactive mode. Nor-\n"
+ " mally this would be done by entering the EOF character.\n"
+ "read disk ...\n"
+ " Read the vinum configuration from the specified disks.\n"
"rename [-r] [drive | subdisk | plex | volume] newname\n"
- " Change the name of the specified object.\n"
+ " Change the name of the specified object.\n"
+ "rebuildparity plex [-f] [-v] [-V]\n"
+ " Rebuild the parity blocks of a RAID-4 or RAID-5 plex.\n"
"resetconfig\n"
- " Reset the complete vinum configuration.\n"
+ " Reset the complete vinum configuration.\n"
"resetstats [-r] [volume | plex | subdisk]\n"
- " Reset statistisc counters for the specified objects, or for all\n"
- " objects if none are specified.\n"
+ " Reset statistisc counters for the specified objects, or for all\n"
+ " objects if none are specified.\n"
"rm [-f] [-r] volume | plex | subdisk\n"
- " Remove an object\n"
+ " Remove an object.\n"
"saveconfig\n"
- " Save vinum configuration to disk.\n"
+ " Save vinum configuration to disk after configuration failures.\n"
"setdaemon [value]\n"
- " Set daemon configuration.\n"
- "start\n"
- " Read configuration from all vinum drives.\n"
- "start [volume | plex | subdisk]\n"
- " Allow the system to access the objects\n"
+ " Set daemon configuration.\n"
+ "setstate state [volume | plex | subdisk | drive]\n"
+ " Set state without influencing other objects, for diagnostic pur-\n"
+ " poses only.\n"
+ "start Read configuration from all vinum drives.\n"
+ "start [-i interval] [-S size] [-w] volume | plex | subdisk\n"
+ " Allow the system to access the objects.\n"
"stop [-f] [volume | plex | subdisk]\n"
- " Terminate access to the objects, or stop vinum if no parameters\n"
- " are specified.\n"
+ " Terminate access to the objects, or stop vinum if no parameters\n"
+ " are specified.\n"
+ "stripe [-f] [-n name] [-v] drives\n"
+ " Create a striped volume from the specified drives.\n"
};
puts(commands);
}
@@ -1424,20 +1437,6 @@ vinum_setdaemon(int argc, char *argv[], char *argv0[])
checkupdates(); /* make sure we're updating */
}
-int
-checkupdates()
-{
- int options;
-
- if (ioctl(superdev, VINUM_GETDAEMON, &options) < 0)
- fprintf(stderr, "Can't get daemon options: %s (%d)\n", strerror(errno), errno);
- if (options & daemon_noupdate) {
- fprintf(stderr, "*** Warning: configuration updates are disabled. ***\n");
- return 1;
- } else
- return 0;
-}
-
/* Save config info */
void
vinum_saveconfig(int argc, char *argv[], char *argv0[])
@@ -1480,7 +1479,7 @@ genvolname()
* vinumdrive#, where # is a small positive
* number. Return the name of the drive.
*/
-struct drive *
+struct _drive *
create_drive(char *devicename)
{
int d; /* volume number */
@@ -1539,7 +1538,7 @@ vinum_concat(int argc, char *argv[], char *argv0[])
{
int o; /* object number */
char buffer[BUFSIZE];
- struct drive *drive; /* drive we're currently looking at */
+ struct _drive *drive; /* drive we're currently looking at */
struct _ioctl_reply *reply;
int ioctltype;
int error;
@@ -1617,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)
- vinum_perror("Can't save Vinum config");
+ 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) {
@@ -1638,7 +1637,7 @@ vinum_stripe(int argc, char *argv[], char *argv0[])
{
int o; /* object number */
char buffer[BUFSIZE];
- struct drive *drive; /* drive we're currently looking at */
+ struct _drive *drive; /* drive we're currently looking at */
struct _ioctl_reply *reply;
int ioctltype;
int error;
@@ -1707,9 +1706,9 @@ vinum_stripe(int argc, char *argv[], char *argv0[])
reply->error);
longjmp(command_fail, -1); /* give up */
}
- sprintf(buffer, "plex name %s.p0 org striped 256k", objectname);
+ sprintf(buffer, "plex name %s.p0 org striped 279k", objectname);
if (vflag)
- printf(" plex name %s.p0 org striped 256k\n", objectname);
+ printf(" plex name %s.p0 org striped 279k\n", objectname);
ioctl(superdev, VINUM_CREATE, buffer);
if (reply->error != 0) { /* error in config */
if (reply->msg[0])
@@ -1762,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)
- vinum_perror("Can't save Vinum config");
+ 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) {
@@ -1782,7 +1781,7 @@ vinum_raid4(int argc, char *argv[], char *argv0[])
{
int o; /* object number */
char buffer[BUFSIZE];
- struct drive *drive; /* drive we're currently looking at */
+ struct _drive *drive; /* drive we're currently looking at */
struct _ioctl_reply *reply;
int ioctltype;
int error;
@@ -1851,9 +1850,9 @@ vinum_raid4(int argc, char *argv[], char *argv0[])
reply->error);
longjmp(command_fail, -1); /* give up */
}
- sprintf(buffer, "plex name %s.p0 org raid4 256k", objectname);
+ sprintf(buffer, "plex name %s.p0 org raid4 279k", objectname);
if (vflag)
- printf(" plex name %s.p0 org raid4 256k\n", objectname);
+ printf(" plex name %s.p0 org raid4 279k\n", objectname);
ioctl(superdev, VINUM_CREATE, buffer);
if (reply->error != 0) { /* error in config */
if (reply->msg[0])
@@ -1906,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)
- vinum_perror("Can't save Vinum config");
+ 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) {
@@ -1926,7 +1925,7 @@ vinum_raid5(int argc, char *argv[], char *argv0[])
{
int o; /* object number */
char buffer[BUFSIZE];
- struct drive *drive; /* drive we're currently looking at */
+ struct _drive *drive; /* drive we're currently looking at */
struct _ioctl_reply *reply;
int ioctltype;
int error;
@@ -1995,9 +1994,9 @@ vinum_raid5(int argc, char *argv[], char *argv0[])
reply->error);
longjmp(command_fail, -1); /* give up */
}
- sprintf(buffer, "plex name %s.p0 org raid5 256k", objectname);
+ sprintf(buffer, "plex name %s.p0 org raid5 279k", objectname);
if (vflag)
- printf(" plex name %s.p0 org raid5 256k\n", objectname);
+ printf(" plex name %s.p0 org raid5 279k\n", objectname);
ioctl(superdev, VINUM_CREATE, buffer);
if (reply->error != 0) { /* error in config */
if (reply->msg[0])
@@ -2050,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)
- vinum_perror("Can't save Vinum config");
+ 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) {
@@ -2076,7 +2075,7 @@ vinum_mirror(int argc, char *argv[], char *argv0[])
int o; /* object number */
int p; /* plex number */
char buffer[BUFSIZE];
- struct drive *drive; /* drive we're currently looking at */
+ struct _drive *drive; /* drive we're currently looking at */
struct _ioctl_reply *reply;
int ioctltype;
int error;
@@ -2157,9 +2156,9 @@ vinum_mirror(int argc, char *argv[], char *argv0[])
}
for (p = 0; p < 2; p++) { /* create each plex */
if (sflag) {
- sprintf(buffer, "plex name %s.p%d org striped 256k", objectname, p);
+ sprintf(buffer, "plex name %s.p%d org striped 279k", objectname, p);
if (vflag)
- printf(" plex name %s.p%d org striped 256k\n", objectname, p);
+ printf(" plex name %s.p%d org striped 279k\n", objectname, p);
} else { /* concat */
sprintf(buffer, "plex name %s.p%d org concat", objectname, p);
if (vflag)
@@ -2225,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)
- vinum_perror("Can't save Vinum config");
+ 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) {
@@ -2243,8 +2242,8 @@ vinum_readpol(int argc, char *argv[], char *argv0[])
struct _ioctl_reply reply;
struct vinum_ioctl_msg *message = (struct vinum_ioctl_msg *) &reply;
enum objecttype type;
- struct plex plex;
- struct volume vol;
+ struct _plex plex;
+ struct _volume vol;
int plexno;
if (argc == 0) { /* start everything */
@@ -2386,7 +2385,7 @@ void
parityops(int argc, char *argv[], enum parityop op)
{
int object;
- struct plex plex;
+ struct _plex plex;
struct _ioctl_reply reply;
struct vinum_ioctl_msg *message = (struct vinum_ioctl_msg *) &reply;
int index;
OpenPOWER on IntegriCloud