Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2016 08:01:38 +0000 (UTC)
From:      Peter Holm <pho@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r297336 - user/pho/stress2/misc
Message-ID:  <201603280801.u2S81cGW077881@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pho
Date: Mon Mar 28 08:01:38 2016
New Revision: 297336
URL: https://svnweb.freebsd.org/changeset/base/297336

Log:
  Added two regression tests.
  
  Sponsored by:	EMC / Isilon Storage Division

Added:
  user/pho/stress2/misc/trim7.sh   (contents, props changed)
  user/pho/stress2/misc/truncate6.sh   (contents, props changed)

Added: user/pho/stress2/misc/trim7.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/trim7.sh	Mon Mar 28 08:01:38 2016	(r297336)
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2016 EMC Corp.
+# 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$
+#
+
+# "panic: Lock Per-Filesystem Softdep Lock not exclusively locked @
+#  ../../../ufs/ffs/ffs_softdep.c:1950" seen.
+# https://people.freebsd.org/~pho/stress/log/trim7.txt
+# Fixed by: r297206.
+
+# Test scenario by: Nick Evans <nevans@talkpoint.com>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+mount | grep -q /media ||
+    echo "Prerequisite: /media is a TRIM enabled file system."
+
+r=`mount | grep -w soft-updates | awk '{print $1}' | while read dev; do
+	dumpfs $dev | grep -m1 flags | grep -qw trim || continue
+	df -k $dev
+done |  sort -rn +3 | head -1 | awk '{print $4, $6}'`
+[ -z "$r" ] && exit	# No trim enabled file systems found
+set $r
+free=$(($1 / 1024 / 10 * 9))	# in Mb
+max=$((128 * 1024)) # Max is 128 GB
+[ $free -gt $max ] && free=$max
+mp=$2
+[ $mp = /media ] || exit 0
+fs=`mount | grep "on $mp " | sed 's/ .*//'`
+echo "Using $fs"
+image=`echo $mp/diskimage | sed s#//#/#` # fix "//" for case mp = "/"
+
+echo "dd if=/dev/zero of=$image bs=1m count=$free"
+dd if=/dev/zero of=$image bs=1m count=$free 2>&1 |
+    egrep -v 'records|transferred'
+rm $image
+while mount | grep -q "on $mp "; do
+	umount $mp
+done
+mount $fs $mp

Added: user/pho/stress2/misc/truncate6.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/truncate6.sh	Mon Mar 28 08:01:38 2016	(r297336)
@@ -0,0 +1,127 @@
+#!/bin/sh
+
+#
+# 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$
+#
+
+# The issue, found by Maxim, is that sometimes partial truncate could
+# create a UFS inode where the last byte is not populated.
+# Fixed by r295950.
+
+# Test scenario by Maxim Sobolev <sobomax@sippysoft.com>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+mount | grep -q "$mntpoint" && umount $mntpoint
+mdconfig -l | grep -q $mdstart &&  mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 1g -u $mdstart
+bsdlabel -w md$mdstart auto
+
+if [ $# -eq 0 ]; then
+	newfs $newfs_flags md${mdstart}$part > /dev/null
+else
+	newfs md${mdstart}$part > /dev/null
+fi
+mount /dev/md${mdstart}$part $mntpoint
+
+here=`pwd`
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > truncate6.c
+mycc -o truncate6 -Wall -Wextra -O2 truncate6.c -lutil
+rm -f truncate6.c
+
+cd $mntpoint
+
+/tmp/truncate6
+inode=`ls -ail | grep temp | sed 's/ .*//'`
+
+cd $here
+rm -f /tmp/truncate6
+
+while mount | grep -q md${mdstart}$part; do
+	umount $mntpoint || sleep 1
+done
+
+full=$(
+fsdb -r /dev/md${mdstart}$part <<QUOTE
+inode $inode
+blocks
+quit
+QUOTE
+)
+full=`echo "$full" | sed '/Last Mounted/,+6d'`
+r=`echo "$full" | tail -1`
+if [ "$r" != "0, 0, 0, 4704" ]; then
+	e=1
+	echo "FAIL Expected \"0, 0, 0, 4704\", got \"$r\"."
+	echo "$full"
+else
+	e=0
+fi
+
+mdconfig -d -u $mdstart
+exit $e
+EOF
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(void)
+{
+	off_t hole, data, pos;
+	int fd;
+	char tempname[] = "temp.XXXXXX";
+	char *fname;
+
+	pos = 1024 * 128 + 1;
+	fname = tempname;
+	if (mkstemp(tempname) == -1)
+		err(1, "mkstemp(%s)", tempname);
+	if ((fd = open(fname, O_WRONLY | O_CREAT | O_TRUNC, DEFFILEMODE)) ==
+	    -1)
+		err(1, "open(%s)", fname);
+	if (ftruncate(fd, 1024 * 128 + 1) < 0)
+		err(1, "ftruncate()");
+	hole = lseek(fd, 0, SEEK_HOLE);
+	data = lseek(fd, 0, SEEK_DATA);
+#if defined(TEST)
+	printf("--> hole = %jd, data = %jd, pos = %jd\n",
+	    (intmax_t)hole, (intmax_t)data, (intmax_t)pos);
+#endif
+	if (ftruncate(fd, data) < 0)
+		err(1, "ftruncate() 2");
+	close(fd);
+
+	return (0);
+}



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