svn commit: r187027 - in head: sbin/mdconfig sys/dev/md
Edward Tomasz Napierala
trasz at FreeBSD.org
Sat Jan 10 09:17:20 PST 2009
Author: trasz
Date: Sat Jan 10 17:17:18 2009
New Revision: 187027
URL: http://svn.freebsd.org/changeset/base/187027
Log:
Add the possibility to specify "-o force" with "mdconfig -du".
Reviewed by: scottl
Approved by: rwatson (mentor)
Sponsored by: FreeBSD Foundation
Modified:
head/sbin/mdconfig/mdconfig.8
head/sbin/mdconfig/mdconfig.c
head/sys/dev/md/md.c
Modified: head/sbin/mdconfig/mdconfig.8
==============================================================================
--- head/sbin/mdconfig/mdconfig.8 Sat Jan 10 16:57:22 2009 (r187026)
+++ head/sbin/mdconfig/mdconfig.8 Sat Jan 10 17:17:18 2009 (r187027)
@@ -62,6 +62,7 @@
.Nm
.Fl d
.Fl u Ar unit
+.Op Fl o Oo Cm no Oc Ns Ar force
.Nm
.Fl l
.Op Fl n
Modified: head/sbin/mdconfig/mdconfig.c
==============================================================================
--- head/sbin/mdconfig/mdconfig.c Sat Jan 10 16:57:22 2009 (r187026)
+++ head/sbin/mdconfig/mdconfig.c Sat Jan 10 17:17:18 2009 (r187027)
@@ -58,7 +58,7 @@ usage()
"usage: mdconfig -a -t type [-n] [-o [no]option] ... [-f file]\n"
" [-s size] [-S sectorsize] [-u unit]\n"
" [-x sectors/track] [-y heads/cyl]\n"
-" mdconfig -d -u unit\n"
+" mdconfig -d -u unit [-o [no]force]\n"
" mdconfig -l [-v] [-n] [-u unit]\n");
fprintf(stderr, "\t\ttype = {malloc, preload, vnode, swap}\n");
fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n");
@@ -160,6 +160,16 @@ main(int argc, char **argv)
close(fd);
break;
case 'o':
+ if (action == DETACH) {
+ if (!strcmp(optarg, "force"))
+ mdio.md_options |= MD_FORCE;
+ else if (!strcmp(optarg, "noforce"))
+ mdio.md_options &= ~MD_FORCE;
+ else
+ errx(1, "Unknown option: %s.", optarg);
+ break;
+ }
+
if (cmdline != 2)
usage();
if (!strcmp(optarg, "async"))
Modified: head/sys/dev/md/md.c
==============================================================================
--- head/sys/dev/md/md.c Sat Jan 10 16:57:22 2009 (r187026)
+++ head/sys/dev/md/md.c Sat Jan 10 17:17:18 2009 (r187027)
@@ -1133,13 +1133,15 @@ xmdctlioctl(struct cdev *dev, u_long cmd
mdinit(sc);
return (0);
case MDIOCDETACH:
- if (mdio->md_mediasize != 0 || mdio->md_options != 0)
+ if (mdio->md_mediasize != 0 ||
+ (mdio->md_options & ~MD_FORCE) != 0)
return (EINVAL);
sc = mdfind(mdio->md_unit);
if (sc == NULL)
return (ENOENT);
- if (sc->opencount != 0 && !(sc->flags & MD_FORCE))
+ if (sc->opencount != 0 && !(sc->flags & MD_FORCE) &&
+ !(mdio->md_options & MD_FORCE))
return (EBUSY);
return (mddestroy(sc, td));
case MDIOCQUERY:
More information about the svn-src-all
mailing list