svn commit: r225871 - projects/stress2/misc
Peter Holm
pho at FreeBSD.org
Thu Sep 29 10:36:43 UTC 2011
Author: pho
Date: Thu Sep 29 10:36:42 2011
New Revision: 225871
URL: http://svn.freebsd.org/changeset/base/225871
Log:
Added two regression tests, based on PRs.
Added:
projects/stress2/misc/suj23.sh (contents, props changed)
projects/stress2/misc/suj24.sh (contents, props changed)
Added: projects/stress2/misc/suj23.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/stress2/misc/suj23.sh Thu Sep 29 10:36:42 2011 (r225871)
@@ -0,0 +1,429 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho at FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Scenario from kern/159971
+# bstg0003.c by Kirk Russell <kirk ba23 org>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > suj23.c
+cc -o suj23 -Wall -Wextra -O2 suj23.c
+rm -f suj23.c
+
+mount | grep "${mntpoint}" | grep -q md${mdstart} && umount ${mntpoint}
+mdconfig -l | grep -q md${mdstart} && mdconfig -d -u ${mdstart}
+
+mdconfig -a -t swap -s 1g -u ${mdstart}
+bsdlabel -w md${mdstart} auto
+newfs -j md${mdstart}${part} > /dev/null
+mount /dev/md${mdstart}$part $mntpoint
+chmod 777 $mntpoint
+
+su $testuser -c '/tmp/suj23'
+
+while mount | grep -q ${mntpoint}; do
+ umount ${mntpoint} || sleep 1
+done
+mdconfig -d -u ${mdstart}
+rm -f /tmp/suj23
+exit 0
+EOF
+/*
+ * Copyright 2011 Kirk J. Russell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <unistd.h>
+#include <assert.h>
+#include <err.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/uio.h>
+#include <sys/wait.h>
+
+static char *bstg_pathstore[] = {
+ "/mnt/111/z",
+ "/mnt/111/aaaa",
+ "/mnt/111/bbbbb",
+ "/mnt/111/ccccc",
+ "/mnt/111/d",
+ "/mnt/111/e",
+ "/mnt/111/ffffff.fff.f",
+ "/mnt/111/gggggggggggg",
+ "/mnt/111/hhhh",
+ "/mnt/111/iiiii.ii",
+ "/mnt/111/jjjj.jj.jjjjjjjj",
+ "/mnt/111/kkkk.kkkkkkkk",
+ "/mnt/111/lllll",
+ "/mnt/222/z",
+ "/mnt/222/aaaa",
+ "/mnt/222/bbbbb",
+ "/mnt/222/ccccc",
+ "/mnt/222/d",
+ "/mnt/222/e",
+ "/mnt/222/ffffff.fff.f",
+ "/mnt/222/gggggggggggg",
+ "/mnt/222/hhhh",
+ "/mnt/222/iiiii.ii",
+ "/mnt/222/jjjj.jj.jjjjjjjj",
+ "/mnt/222/kkkk.kkkkkkkk",
+ "/mnt/222/lllll",
+ "/mnt/333/z",
+ "/mnt/333/aaaa",
+ "/mnt/333/bbbbb",
+ "/mnt/333/ccccc",
+ "/mnt/333/d",
+ "/mnt/333/e",
+ "/mnt/333/ffffff.fff.f",
+ "/mnt/333/gggggggggggg",
+ "/mnt/333/hhhh",
+ "/mnt/333/iiiii.ii",
+ "/mnt/333/jjjj.jj.jjjjjjjj",
+ "/mnt/333/kkkk.kkkkkkkk",
+ "/mnt/333/lllll",
+ "/mnt/444/z",
+ "/mnt/444/aaaa",
+ "/mnt/444/bbbbb",
+ "/mnt/444/ccccc",
+ "/mnt/444/d",
+ "/mnt/444/e",
+ "/mnt/444/ffffff.fff.f",
+ "/mnt/444/gggggggggggg",
+ "/mnt/444/hhhh",
+ "/mnt/444/iiiii.ii",
+ "/mnt/444/jjjj.jj.jjjjjjjj",
+ "/mnt/444/kkkk.kkkkkkkk",
+ "/mnt/444/lllll",
+ "/mnt/555/z",
+ "/mnt/555/aaaa",
+ "/mnt/555/bbbbb",
+ "/mnt/555/ccccc",
+ "/mnt/555/d",
+ "/mnt/555/e",
+ "/mnt/555/ffffff.fff.f",
+ "/mnt/555/gggggggggggg",
+ "/mnt/555/hhhh",
+ "/mnt/555/iiiii.ii",
+ "/mnt/555/jjjj.jj.jjjjjjjj",
+ "/mnt/555/kkkk.kkkkkkkk",
+ "/mnt/555/lllll",
+ "/mnt/666/z",
+ "/mnt/666/aaaa",
+ "/mnt/666/bbbbb",
+ "/mnt/666/ccccc",
+ "/mnt/666/d",
+ "/mnt/666/e",
+ "/mnt/666/ffffff.fff.f",
+ "/mnt/666/gggggggggggg",
+ "/mnt/666/hhhh",
+ "/mnt/666/iiiii.ii",
+ "/mnt/666/jjjj.jj.jjjjjjjj",
+ "/mnt/666/kkkk.kkkkkkkk",
+ "/mnt/666/lllll",
+ "/mnt/777/z",
+ "/mnt/777/aaaa",
+ "/mnt/777/bbbbb",
+ "/mnt/777/ccccc",
+ "/mnt/777/d",
+ "/mnt/777/e",
+ "/mnt/777/ffffff.fff.f",
+ "/mnt/777/gggggggggggg",
+ "/mnt/777/hhhh",
+ "/mnt/777/iiiii.ii",
+ "/mnt/777/jjjj.jj.jjjjjjjj",
+ "/mnt/777/kkkk.kkkkkkkk",
+ "/mnt/777/lllll",
+ "/mnt/888/z",
+ "/mnt/888/aaaa",
+ "/mnt/888/bbbbb",
+ "/mnt/888/ccccc",
+ "/mnt/888/d",
+ "/mnt/888/e",
+ "/mnt/888/ffffff.fff.f",
+ "/mnt/888/gggggggggggg",
+ "/mnt/888/hhhh",
+ "/mnt/888/iiiii.ii",
+ "/mnt/888/jjjj.jj.jjjjjjjj",
+ "/mnt/888/kkkk.kkkkkkkk",
+ "/mnt/888/lllll",
+ "/mnt/999/z",
+ "/mnt/999/aaaa",
+ "/mnt/999/bbbbb",
+ "/mnt/999/ccccc",
+ "/mnt/999/d",
+ "/mnt/999/e",
+ "/mnt/999/ffffff.fff.f",
+ "/mnt/999/gggggggggggg",
+ "/mnt/999/hhhh",
+ "/mnt/999/iiiii.ii",
+ "/mnt/999/jjjj.jj.jjjjjjjj",
+ "/mnt/999/kkkk.kkkkkkkk",
+ "/mnt/999/lllll",
+ "/mnt/aaa/z",
+ "/mnt/aaa/aaaa",
+ "/mnt/aaa/bbbbb",
+ "/mnt/aaa/ccccc",
+ "/mnt/aaa/d",
+ "/mnt/aaa/e",
+ "/mnt/aaa/ffffff.fff.f",
+ "/mnt/aaa/gggggggggggg",
+ "/mnt/aaa/hhhh",
+ "/mnt/aaa/iiiii.ii",
+ "/mnt/aaa/jjjj.jj.jjjjjjjj",
+ "/mnt/aaa/kkkk.kkkkkkkk",
+ "/mnt/aaa/lllll",
+ "/mnt/bbb/z",
+ "/mnt/bbb/aaaa",
+ "/mnt/bbb/bbbbb",
+ "/mnt/bbb/ccccc",
+ "/mnt/bbb/d",
+ "/mnt/bbb/e",
+ "/mnt/bbb/ffffff.fff.f",
+ "/mnt/bbb/gggggggggggg",
+ "/mnt/bbb/hhhh",
+ "/mnt/bbb/iiiii.ii",
+ "/mnt/bbb/jjjj.jj.jjjjjjjj",
+ "/mnt/bbb/kkkk.kkkkkkkk",
+ "/mnt/bbb/lllll",
+ "/mnt/ccc/z",
+ "/mnt/ccc/aaaa",
+ "/mnt/ccc/bbbbb",
+ "/mnt/ccc/ccccc",
+ "/mnt/ccc/d",
+ "/mnt/ccc/e",
+ "/mnt/ccc/ffffff.fff.f",
+ "/mnt/ccc/gggggggggggg",
+ "/mnt/ccc/hhhh",
+ "/mnt/ccc/iiiii.ii",
+ "/mnt/ccc/jjjj.jj.jjjjjjjj",
+ "/mnt/ccc/kkkk.kkkkkkkk",
+ "/mnt/ccc/lllll",
+ "/mnt/ddd/z",
+ "/mnt/ddd/aaaa",
+ "/mnt/ddd/bbbbb",
+ "/mnt/ddd/ccccc",
+ "/mnt/ddd/d",
+ "/mnt/ddd/e",
+ "/mnt/ddd/ffffff.fff.f",
+ "/mnt/ddd/gggggggggggg",
+ "/mnt/ddd/hhhh",
+ "/mnt/ddd/iiiii.ii",
+ "/mnt/ddd/jjjj.jj.jjjjjjjj",
+ "/mnt/ddd/kkkk.kkkkkkkk",
+ "/mnt/ddd/lllll",
+ "/mnt/eee/z",
+ "/mnt/eee/aaaa",
+ "/mnt/eee/bbbbb",
+ "/mnt/eee/ccccc",
+ "/mnt/eee/d",
+ "/mnt/eee/e",
+ "/mnt/eee/ffffff.fff.f",
+ "/mnt/eee/gggggggggggg",
+ "/mnt/eee/hhhh",
+ "/mnt/eee/iiiii.ii",
+ "/mnt/eee/jjjj.jj.jjjjjjjj",
+ "/mnt/eee/kkkk.kkkkkkkk",
+ "/mnt/eee/lllll",
+ "/mnt/fff/z",
+ "/mnt/fff/aaaa",
+ "/mnt/fff/bbbbb",
+ "/mnt/fff/ccccc",
+ "/mnt/fff/d",
+ "/mnt/fff/e",
+ "/mnt/fff/ffffff.fff.f",
+ "/mnt/fff/gggggggggggg",
+ "/mnt/fff/hhhh",
+ "/mnt/fff/iiiii.ii",
+ "/mnt/fff/jjjj.jj.jjjjjjjj",
+ "/mnt/fff/kkkk.kkkkkkkk",
+ "/mnt/fff/lllll"
+};
+
+char *
+bstg_pathstore_get()
+{
+ return bstg_pathstore[rand() %
+ ((sizeof(bstg_pathstore) / sizeof(bstg_pathstore[0])))];
+}
+
+void
+dogcore()
+{
+ pid_t sleepchild, gcorechild;
+ extern char **environ;
+
+ /* create a child for the gcore target */
+ if ((sleepchild = fork()) == 0) {
+ sleep(30);
+ _exit(1);
+ } else if (sleepchild > 0) {
+ char *token[] = {NULL, NULL, NULL, NULL, NULL};
+ char buf[64];
+ int status;
+
+ /* use the first process as the target */
+ snprintf(buf, sizeof(buf), "%d", sleepchild);
+ token[0] = "gcore";
+ token[1] = "-c";
+ token[2] = bstg_pathstore_get();
+ token[3] = buf;
+ assert(token[4] == NULL);
+
+ if ((gcorechild = fork()) > 0) {
+ waitpid(gcorechild, &status, 0);
+ } else if (gcorechild == 0) {
+ execve("/usr/bin/gcore", token, environ);
+ _exit(1);
+ }
+ kill(sleepchild, SIGKILL);
+ waitpid(sleepchild, &status, 0);
+ }
+}
+
+void
+dowrite()
+{
+ struct iovec data[] = {
+ {"12", 2},
+ {NULL, 0},
+ {"12345678", 8},
+ };
+ static int fd = -1;
+
+ if (fd == -1) {
+ /* keep existing file open during life of this process */
+ fd = open(bstg_pathstore_get(), O_RDWR | O_NONBLOCK | O_NOCTTY);
+ }
+ data[1].iov_base = bstg_pathstore_get();
+ data[1].iov_len = strlen((char *)data[1].iov_base);
+ ftruncate(fd, 0);
+ pwritev(fd, data, 3, 0);
+}
+
+void
+dounlink()
+{
+ unlink(bstg_pathstore_get());
+}
+
+void
+dolink()
+{
+ link(bstg_pathstore_get(), bstg_pathstore_get());
+}
+
+void
+domkdir()
+{
+ char **pdir;
+ static char *bstg_dirs[] = {
+ "/mnt/111", "/mnt/222", "/mnt/333", "/mnt/444",
+ "/mnt/555", "/mnt/666", "/mnt/777", "/mnt/888",
+ "/mnt/999", "/mnt/aaa", "/mnt/bbb", "/mnt/ccc",
+ "/mnt/ddd", "/mnt/eee", "/mnt/fff", NULL
+ };
+
+ for (pdir = bstg_dirs; *pdir; pdir++) {
+ if (mkdir(*pdir, 0777) == -1)
+ err(1, "mkdir(%s)", *pdir);
+ }
+}
+
+void
+dosync()
+{
+ sync();
+}
+
+int
+main()
+{
+ unsigned x;
+ int i, status;
+ void (*funcs[]) () = {
+ dogcore,
+ dowrite,
+ dounlink,
+ dolink,
+ dowrite,
+ dounlink,
+ dolink,
+ dowrite,
+ dosync,
+ dowrite,
+ dounlink,
+ dolink,
+ dowrite,
+ dounlink,
+ dolink,
+ dowrite,
+ };
+
+ /* we only can domkdir() once at startup */
+ domkdir();
+
+ /* create 128 children that loop forever running 4 operations */
+ dosync();
+ for (x = 0; x < 128; x++) {
+ if (fork() == 0) {
+ /* give child a new seed for the pathname selection */
+ srand(x);
+
+ for (i = 0; i < 1000; i++) {
+ /* each child will start looping at different
+ * function */
+ (*funcs[x++ % 16]) ();
+ }
+ /* we never expect this code to run */
+ _exit(1);
+ }
+ }
+
+ /* block forever for all our children */
+ while (wait(&status) > 0);
+ return 0;
+}
Added: projects/stress2/misc/suj24.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/stress2/misc/suj24.sh Thu Sep 29 10:36:42 2011 (r225871)
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2011 Peter Holm <pho at FreeBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# Scenario from kern/160662
+# Scenario by Hans Ottevanger <hans beastielabs net>
+# Fixed in r225806
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+here=`pwd`
+
+mount | grep "${mntpoint}" | grep -q md${mdstart} && umount ${mntpoint}
+mdconfig -l | grep -q md${mdstart} && mdconfig -d -u ${mdstart}
+
+mdconfig -a -t swap -s 1g -u ${mdstart}
+bsdlabel -w md${mdstart} auto
+newfs -j md${mdstart}${part} > /dev/null
+mount /dev/md${mdstart}$part $mntpoint
+
+(cd $mntpoint; mksnap_ffs $mntpoint/.snap/snapshot)
+
+while mount | grep -q ${mntpoint}; do
+ umount ${mntpoint} || sleep 1
+done
+mdconfig -d -u ${mdstart}
More information about the svn-src-projects
mailing list