Somewhere around the 473rd time I mistyped "mdconfig file" instead of
"mdconfig -f file", I decided that it would be easier to make mdconfig DWIM than to teach my fingers to type the correct command line. MFC after: 3 weeks
This commit is contained in:
parent
85ee63c923
commit
6c49c6cff2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=221232
@ -68,6 +68,8 @@
|
|||||||
.Op Fl n
|
.Op Fl n
|
||||||
.Op Fl v
|
.Op Fl v
|
||||||
.Op Fl u Ar unit
|
.Op Fl u Ar unit
|
||||||
|
.Nm
|
||||||
|
.Ar file
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
@ -185,6 +187,15 @@ Request a specific unit number for the
|
|||||||
.Xr md 4
|
.Xr md 4
|
||||||
device instead of automatic allocation.
|
device instead of automatic allocation.
|
||||||
.El
|
.El
|
||||||
|
.Pp
|
||||||
|
The last form,
|
||||||
|
.Nm
|
||||||
|
.Ar file ,
|
||||||
|
is provided for convenience as an abbreviation of
|
||||||
|
.Nm
|
||||||
|
.Fl a
|
||||||
|
.Fl t Ar vnode
|
||||||
|
.Fl f Ar file .
|
||||||
.Sh EXAMPLES
|
.Sh EXAMPLES
|
||||||
To create a 4 megabyte
|
To create a 4 megabyte
|
||||||
.Xr malloc 9
|
.Xr malloc 9
|
||||||
|
@ -38,6 +38,7 @@ static enum {UNSET, ATTACH, DETACH, LIST} action = UNSET;
|
|||||||
static int nflag;
|
static int nflag;
|
||||||
|
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
static void md_set_file(const char *);
|
||||||
static int md_find(char *, const char *);
|
static int md_find(char *, const char *);
|
||||||
static int md_query(char *name);
|
static int md_query(char *name);
|
||||||
static int md_list(char *units, int opt);
|
static int md_list(char *units, int opt);
|
||||||
@ -59,7 +60,8 @@ usage(void)
|
|||||||
" [-s size] [-S sectorsize] [-u unit]\n"
|
" [-s size] [-S sectorsize] [-u unit]\n"
|
||||||
" [-x sectors/track] [-y heads/cylinder]\n"
|
" [-x sectors/track] [-y heads/cylinder]\n"
|
||||||
" mdconfig -d -u unit [-o [no]force]\n"
|
" mdconfig -d -u unit [-o [no]force]\n"
|
||||||
" mdconfig -l [-v] [-n] [-u unit]\n");
|
" mdconfig -l [-v] [-n] [-u unit]\n"
|
||||||
|
" mdconfig file\n");
|
||||||
fprintf(stderr, "\t\ttype = {malloc, preload, vnode, swap}\n");
|
fprintf(stderr, "\t\ttype = {malloc, preload, vnode, swap}\n");
|
||||||
fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n");
|
fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n");
|
||||||
fprintf(stderr, "\t\tsize = %%d (512 byte blocks), %%db (B),\n");
|
fprintf(stderr, "\t\tsize = %%d (512 byte blocks), %%db (B),\n");
|
||||||
@ -82,10 +84,7 @@ main(int argc, char **argv)
|
|||||||
err(1, "could not allocate memory");
|
err(1, "could not allocate memory");
|
||||||
vflag = 0;
|
vflag = 0;
|
||||||
bzero(mdio.md_file, PATH_MAX);
|
bzero(mdio.md_file, PATH_MAX);
|
||||||
for (;;) {
|
while ((ch = getopt(argc, argv, "ab:df:lno:s:S:t:u:vx:y:")) != -1) {
|
||||||
ch = getopt(argc, argv, "ab:df:lno:s:S:t:u:vx:y:");
|
|
||||||
if (ch == -1)
|
|
||||||
break;
|
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'a':
|
case 'a':
|
||||||
if (cmdline != 0)
|
if (cmdline != 0)
|
||||||
@ -143,21 +142,7 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
if (cmdline != 2)
|
if (cmdline != 2)
|
||||||
usage();
|
usage();
|
||||||
if (realpath(optarg, mdio.md_file) == NULL) {
|
md_set_file(optarg);
|
||||||
err(1, "could not find full path for %s",
|
|
||||||
optarg);
|
|
||||||
}
|
|
||||||
fd = open(mdio.md_file, O_RDONLY);
|
|
||||||
if (fd < 0)
|
|
||||||
err(1, "could not open %s", optarg);
|
|
||||||
else if (mdio.md_mediasize == 0) {
|
|
||||||
struct stat sb;
|
|
||||||
|
|
||||||
if (fstat(fd, &sb) == -1)
|
|
||||||
err(1, "could not stat %s", optarg);
|
|
||||||
mdio.md_mediasize = sb.st_size;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
if (action == DETACH) {
|
if (action == DETACH) {
|
||||||
@ -267,6 +252,19 @@ main(int argc, char **argv)
|
|||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
if (action == UNSET) {
|
||||||
|
if (argc != 1)
|
||||||
|
usage();
|
||||||
|
action = ATTACH;
|
||||||
|
mdio.md_type = MD_VNODE;
|
||||||
|
mdio.md_options = MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS;
|
||||||
|
cmdline = 2;
|
||||||
|
md_set_file(*argv);
|
||||||
|
}
|
||||||
|
|
||||||
mdio.md_version = MDIOVERSION;
|
mdio.md_version = MDIOVERSION;
|
||||||
|
|
||||||
if (!kld_isloaded("g_md") && kld_load("geom_md") == -1)
|
if (!kld_isloaded("g_md") && kld_load("geom_md") == -1)
|
||||||
@ -322,6 +320,26 @@ main(int argc, char **argv)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
md_set_file(const char *fn)
|
||||||
|
{
|
||||||
|
struct stat sb;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (realpath(fn, mdio.md_file) == NULL)
|
||||||
|
err(1, "could not find full path for %s", fn);
|
||||||
|
fd = open(mdio.md_file, O_RDONLY);
|
||||||
|
if (fd < 0)
|
||||||
|
err(1, "could not open %s", fn);
|
||||||
|
if (fstat(fd, &sb) == -1)
|
||||||
|
err(1, "could not stat %s", fn);
|
||||||
|
if (!S_ISREG(sb.st_mode))
|
||||||
|
errx(1, "%s is not a regular file", fn);
|
||||||
|
if (mdio.md_mediasize == 0)
|
||||||
|
mdio.md_mediasize = sb.st_size;
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lists md(4) disks. Is used also as a query routine, since it handles XML
|
* Lists md(4) disks. Is used also as a query routine, since it handles XML
|
||||||
* interface. 'units' can be NULL for listing memory disks. It might be
|
* interface. 'units' can be NULL for listing memory disks. It might be
|
||||||
|
Loading…
Reference in New Issue
Block a user