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-head mailing list