Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Oct 2015 14:52:31 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r289516 - in stable/10: sbin/mdconfig sys/dev/md sys/sys
Message-ID:  <201510181452.t9IEqVh9099329@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Sun Oct 18 14:52:31 2015
New Revision: 289516
URL: https://svnweb.freebsd.org/changeset/base/289516

Log:
  MFC r258909:
  
  Tweak mdconfig(8) manual page, in particular revise the EXAMPLES
  section.  This removes stuff that doesn't really belong there,
  and simplifies examples for the basic operations.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  stable/10/sbin/mdconfig/mdconfig.8
  stable/10/sbin/mdconfig/mdconfig.c
  stable/10/sys/dev/md/md.c
  stable/10/sys/sys/mdioctl.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/mdconfig/mdconfig.8
==============================================================================
--- stable/10/sbin/mdconfig/mdconfig.8	Sun Oct 18 14:47:19 2015	(r289515)
+++ stable/10/sbin/mdconfig/mdconfig.8	Sun Oct 18 14:52:31 2015	(r289516)
@@ -41,7 +41,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd October 26, 2013
+.Dd November 30, 2013
 .Dt MDCONFIG 8
 .Os
 .Sh NAME
@@ -122,6 +122,8 @@ Using
 backing is generally preferred instead of using
 .Cm malloc
 backing.
+.It Cm null
+Bitsink; all writes do nothing, all reads return zeroes.
 .El
 .It Fl f Ar file
 Filename to use for the vnode type memory disk.

Modified: stable/10/sbin/mdconfig/mdconfig.c
==============================================================================
--- stable/10/sbin/mdconfig/mdconfig.c	Sun Oct 18 14:47:19 2015	(r289515)
+++ stable/10/sbin/mdconfig/mdconfig.c	Sun Oct 18 14:52:31 2015	(r289516)
@@ -155,6 +155,9 @@ main(int argc, char **argv)
 			} else if (!strcmp(optarg, "swap")) {
 				mdio.md_type = MD_SWAP;
 				mdio.md_options |= MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS;
+			} else if (!strcmp(optarg, "null")) {
+				mdio.md_type = MD_NULL;
+				mdio.md_options |= MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS;
 			} else
 				errx(1, "unknown type: %s", optarg);
 			break;
@@ -287,9 +290,10 @@ main(int argc, char **argv)
 			}
 		}
 
-		if ((mdio.md_type == MD_MALLOC || mdio.md_type == MD_SWAP) &&
-		    sflag == NULL)
-			errx(1, "must specify -s for -t malloc or -t swap");
+		if ((mdio.md_type == MD_MALLOC || mdio.md_type == MD_SWAP ||
+		    mdio.md_type == MD_NULL) && sflag == NULL)
+			errx(1, "must specify -s for -t malloc, -t swap, "
+			    "or -t null");
 		if (mdio.md_type == MD_VNODE && mdio.md_file[0] == '\0')
 			errx(1, "must specify -f for -t vnode");
 	} else {

Modified: stable/10/sys/dev/md/md.c
==============================================================================
--- stable/10/sys/dev/md/md.c	Sun Oct 18 14:47:19 2015	(r289515)
+++ stable/10/sys/dev/md/md.c	Sun Oct 18 14:52:31 2015	(r289516)
@@ -911,6 +911,22 @@ mdstart_swap(struct md_s *sc, struct bio
 	return (rv != VM_PAGER_ERROR ? 0 : ENOSPC);
 }
 
+static int
+mdstart_null(struct md_s *sc, struct bio *bp)
+{
+
+	switch (bp->bio_cmd) {
+	case BIO_READ:
+		bzero(bp->bio_data, bp->bio_length);
+		cpu_flush_dcache(bp->bio_data, bp->bio_length);
+		break;
+	case BIO_WRITE:
+		break;
+	}
+	bp->bio_resid = 0;
+	return (0);
+}
+
 static void
 md_kthread(void *arg)
 {
@@ -1030,6 +1046,7 @@ mdinit(struct md_s *sc)
 		pp->flags |= G_PF_ACCEPT_UNMAPPED;
 		break;
 	case MD_PRELOAD:
+	case MD_NULL:
 		break;
 	}
 	sc->gp = gp;
@@ -1248,6 +1265,7 @@ mdresize(struct md_s *sc, struct md_ioct
 
 	switch (sc->type) {
 	case MD_VNODE:
+	case MD_NULL:
 		break;
 	case MD_SWAP:
 		if (mdio->md_mediasize <= 0 ||
@@ -1342,6 +1360,19 @@ mdcreate_swap(struct md_s *sc, struct md
 	return (error);
 }
 
+static int
+mdcreate_null(struct md_s *sc, struct md_ioctl *mdio, struct thread *td)
+{
+
+	/*
+	 * Range check.  Disallow negative sizes or any size less then the
+	 * size of a page.  Then round to a page.
+	 */
+	if (sc->mediasize <= 0 || (sc->mediasize % PAGE_SIZE) != 0)
+		return (EDOM);
+
+	return (0);
+}
 
 static int
 xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
@@ -1374,6 +1405,7 @@ xmdctlioctl(struct cdev *dev, u_long cmd
 		case MD_PRELOAD:
 		case MD_VNODE:
 		case MD_SWAP:
+		case MD_NULL:
 			break;
 		default:
 			return (EINVAL);
@@ -1419,6 +1451,10 @@ xmdctlioctl(struct cdev *dev, u_long cmd
 			sc->start = mdstart_swap;
 			error = mdcreate_swap(sc, mdio, td);
 			break;
+		case MD_NULL:
+			sc->start = mdstart_null;
+			error = mdcreate_null(sc, mdio, td);
+			break;
 		}
 		if (error != 0) {
 			mddestroy(sc, td);
@@ -1589,6 +1625,9 @@ g_md_dumpconf(struct sbuf *sb, const cha
 	case MD_SWAP:
 		type = "swap";
 		break;
+	case MD_NULL:
+		type = "null";
+		break;
 	default:
 		type = "unknown";
 		break;

Modified: stable/10/sys/sys/mdioctl.h
==============================================================================
--- stable/10/sys/sys/mdioctl.h	Sun Oct 18 14:47:19 2015	(r289515)
+++ stable/10/sys/sys/mdioctl.h	Sun Oct 18 14:52:31 2015	(r289516)
@@ -43,7 +43,7 @@
 #ifndef _SYS_MDIOCTL_H_
 #define _SYS_MDIOCTL_H_
 
-enum md_types {MD_MALLOC, MD_PRELOAD, MD_VNODE, MD_SWAP};
+enum md_types {MD_MALLOC, MD_PRELOAD, MD_VNODE, MD_SWAP, MD_NULL};
 
 /*
  * Ioctl definitions for memory disk pseudo-device.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510181452.t9IEqVh9099329>