svn commit: r289516 - in stable/10: sbin/mdconfig sys/dev/md sys/sys
John-Mark Gurney
jmg at funkthat.com
Sun Oct 18 18:37:53 UTC 2015
Edward Tomasz Napierala wrote this message on Sun, Oct 18, 2015 at 14:52 +0000:
> Author: trasz
> Date: Sun Oct 18 14:52:31 2015
> New Revision: 289516
> URL: https://svnweb.freebsd.org/changeset/base/289516
>
> Log:
> MFC r258909:
The following description doesn't match what r258909 says:
https://svnweb.freebsd.org/base?view=revision&revision=r258909
wrong commit or wrong message?
> 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.
--
John-Mark Gurney Voice: +1 415 225 5579
"All that I will do, has been done, All that I have, has not."
More information about the svn-src-all
mailing list