[Pkg-zfsonlinux-devel] [SCM] zfs branch, master, updated. upstream/0.6.5.5-693-gd3acc7f

Petter Reinholdtsen pere at hungry.com
Thu May 12 10:19:17 UTC 2016


The following commit has been merged in the master branch:
commit d3acc7fbc5ba39faaa4f08288a32776db6140dd2
Author: Petter Reinholdtsen <pere at hungry.com>
Date:   Thu May 12 10:18:57 2016 +0000

    Bring some files back to the upstream tarball content to get gbp buildpackage working.

diff --git a/TEST b/TEST
deleted file mode 100644
index eba35a3..0000000
--- a/TEST
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-
-### prepare
-#TEST_PREPARE_WATCHDOG="no"
-
-### SPLAT
-#TEST_SPLAT_SKIP="yes"
-#TEST_SPLAT_OPTIONS="-acvx"
-
-### ztest
-#TEST_ZTEST_SKIP="yes"
-#TEST_ZTEST_TIMEOUT=1800
-#TEST_ZTEST_DIR="/var/tmp/"
-#TEST_ZTEST_OPTIONS="-V"
-
-### ziltest
-#TEST_ZILTEST_SKIP="yes"
-#TEST_ZILTEST_OPTIONS=""
-
-### zconfig
-#TEST_ZCONFIG_SKIP="yes"
-TEST_ZCONFIG_OPTIONS="-c -s10"
-
-### zimport
-#TEST_ZIMPORT_SKIP="yes"
-#TEST_ZIMPORT_DIR="/var/tmp/zimport"
-#TEST_ZIMPORT_VERSIONS="master installed"
-#TEST_ZIMPORT_POOLS="zol-0.6.1 zol-0.6.2 master installed"
-#TEST_ZIMPORT_OPTIONS="-c"
-
-### xfstests
-#TEST_XFSTESTS_SKIP="yes"
-#TEST_XFSTESTS_URL="https://github.com/behlendorf/xfstests/archive/"
-#TEST_XFSTESTS_VER="zfs.tar.gz"
-#TEST_XFSTESTS_POOL="tank"
-#TEST_XFSTESTS_FS="xfstests"
-#TEST_XFSTESTS_VDEV="/var/tmp/vdev"
-#TEST_XFSTESTS_OPTIONS=""
-
-### filebench
-#TEST_FILEBENCH_SKIP="yes"
-#TEST_FILEBENCH_URL="http://build.zfsonlinux.org/"
-#TEST_FILEBENCH_VER="filebench-1.4.9.1.tar.gz"
-#TEST_FILEBENCH_RUNTIME=10
-#TEST_FILEBENCH_POOL="tank"
-#TEST_FILEBENCH_FS="filebench"
-#TEST_FILEBENCH_VDEV="/var/tmp/vdev"
-#TEST_FILEBENCH_DIR="/$TEST_FILEBENCH_POOL/$TEST_FILEBENCH_FS"
-#TEST_FILEBENCH_OPTIONS=""
-
-### zfsstress
-#TEST_ZFSSTRESS_SKIP="yes"
-#TEST_ZFSSTRESS_URL="https://github.com/nedbass/zfsstress/archive/"
-#TEST_ZFSSTRESS_VER="master.tar.gz"
-#TEST_ZFSSTRESS_RUNTIME=300
-#TEST_ZFSSTRESS_POOL="tank"
-#TEST_ZFSSTRESS_FS="fish"
-#TEST_ZFSSTRESS_VDEV="/var/tmp/vdev"
-#TEST_ZFSSTRESS_DIR="/$TEST_ZFSSTRESS_POOL/$TEST_ZFSSTRESS_FS"
-#TEST_ZFSSTRESS_OPTIONS=""
-
-### per-builder customization
-#
-# BB_NAME=builder-name <distribution-version-architecture-type>
-# - distribution=Amazon,Debian,Fedora,RHEL,SUSE,Ubuntu
-# - version=x.y
-# - architecture=x86_64,i686,arm,aarch64
-# - type=build,test
-#
-case "$BB_NAME" in
-Amazon*)
-    ;;
-CentOS*)
-    # Sporadic segmentation faults
-    TEST_ZTEST_SKIP="yes"
-    # Sporadic VERIFY(!zilog_is_dirty(zilog)) failed
-    TEST_ZILTEST_SKIP="yes"
-    ;;
-Debian*)
-    ;;
-Fedora*)
-    ;;
-RHEL*)
-    ;;
-SUSE*)
-    ;;
-Ubuntu*)
-    ;;
-*)
-    ;;
-esac
diff --git a/cmd/zed/zed.d/checksum-notify.sh b/cmd/zed/zed.d/checksum-notify.sh
deleted file mode 120000
index 9008738..0000000
--- a/cmd/zed/zed.d/checksum-notify.sh
+++ /dev/null
@@ -1 +0,0 @@
-io-notify.sh
\ No newline at end of file
diff --git a/cmd/zed/zed.d/checksum-notify.sh b/cmd/zed/zed.d/checksum-notify.sh
new file mode 100755
index 0000000..3ce918a
--- /dev/null
+++ b/cmd/zed/zed.d/checksum-notify.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Send notification in response to a CHECKSUM, DATA, or IO error.
+#
+# Only one notification per ZED_NOTIFY_INTERVAL_SECS will be sent for a given
+# class/pool/[vdev] combination.  This protects against spamming the recipient
+# should multiple events occur together in time for the same pool/[vdev].
+#
+# Exit codes:
+#   0: notification sent
+#   1: notification failed
+#   2: notification not configured
+#   3: notification suppressed
+#   9: internal error
+
+[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc"
+. "${ZED_ZEDLET_DIR}/zed-functions.sh"
+
+[ -n "${ZEVENT_POOL}" ] || exit 9
+[ -n "${ZEVENT_SUBCLASS}" ] || exit 9
+
+if [ "${ZEVENT_SUBCLASS}" != "checksum" ] \
+        && [ "${ZEVENT_SUBCLASS}" != "data" ] \
+        && [ "${ZEVENT_SUBCLASS}" != "io" ]; then
+    zed_log_err "unsupported event class \"${ZEVENT_SUBCLASS}\""
+    exit 9
+fi
+
+rate_limit_tag="${ZEVENT_POOL};${ZEVENT_VDEV_GUID:-0};${ZEVENT_SUBCLASS};notify"
+zed_rate_limit "${rate_limit_tag}" || exit 3
+
+umask 077
+note_subject="ZFS ${ZEVENT_SUBCLASS} error for ${ZEVENT_POOL} on $(hostname)"
+note_pathname="${TMPDIR:="/tmp"}/$(basename -- "$0").${ZEVENT_EID}.$$"
+{
+    [ "${ZEVENT_SUBCLASS}" = "io" ] && article="an" || article="a"
+
+    echo "ZFS has detected ${article} ${ZEVENT_SUBCLASS} error:"
+    echo
+    echo "   eid: ${ZEVENT_EID}"
+    echo " class: ${ZEVENT_SUBCLASS}"
+    echo "  host: $(hostname)"
+    echo "  time: ${ZEVENT_TIME_STRING}"
+
+    [ -n "${ZEVENT_VDEV_TYPE}" ] && echo " vtype: ${ZEVENT_VDEV_TYPE}"
+    [ -n "${ZEVENT_VDEV_PATH}" ] && echo " vpath: ${ZEVENT_VDEV_PATH}"
+    [ -n "${ZEVENT_VDEV_GUID}" ] && echo " vguid: ${ZEVENT_VDEV_GUID}"
+
+    [ -n "${ZEVENT_VDEV_CKSUM_ERRORS}" ] \
+        && echo " cksum: ${ZEVENT_VDEV_CKSUM_ERRORS}"
+
+    [ -n "${ZEVENT_VDEV_READ_ERRORS}" ] \
+        && echo "  read: ${ZEVENT_VDEV_READ_ERRORS}"
+
+    [ -n "${ZEVENT_VDEV_WRITE_ERRORS}" ] \
+        && echo " write: ${ZEVENT_VDEV_WRITE_ERRORS}"
+
+    echo "  pool: ${ZEVENT_POOL}"
+
+} > "${note_pathname}"
+
+zed_notify "${note_subject}" "${note_pathname}"; rv=$?
+rm -f "${note_pathname}"
+exit "${rv}"
diff --git a/cmd/zed/zed.d/checksum-spare.sh b/cmd/zed/zed.d/checksum-spare.sh
deleted file mode 120000
index f564f93..0000000
--- a/cmd/zed/zed.d/checksum-spare.sh
+++ /dev/null
@@ -1 +0,0 @@
-io-spare.sh
\ No newline at end of file
diff --git a/cmd/zed/zed.d/checksum-spare.sh b/cmd/zed/zed.d/checksum-spare.sh
new file mode 100755
index 0000000..1835cb4
--- /dev/null
+++ b/cmd/zed/zed.d/checksum-spare.sh
@@ -0,0 +1,239 @@
+#!/bin/sh
+#
+# Replace a device with a hot spare in response to IO or CHECKSUM errors.
+# The following actions will be performed automatically when the number
+# of errors exceed the limit set by ZED_SPARE_ON_IO_ERRORS or
+# ZED_SPARE_ON_CHECKSUM_ERRORS.
+#
+# 1) FAULT the device on IO errors, no futher IO will be attempted.
+#    DEGRADE the device on checksum errors, the device is still
+#    functional and can be used to service IO requests.
+# 2) Set the SES fault beacon for the device.
+# 3) Replace the device with a hot spare if any are available.
+#
+# Once the hot sparing operation is complete either the failed device or
+# the hot spare must be manually retired using the 'zpool detach' command.
+# The 'autoreplace' functionality which would normally take care of this
+# under Illumos has not yet been implemented.
+#
+# Full support for autoreplace is planned, but it requires that the full
+# ZFS Diagnosis Engine be ported.  In the meanwhile this script provides
+# the majority of the expected hot spare functionality.
+#
+# Exit codes:
+#   0: hot spare replacement successful
+#   1: hot spare device not available
+#   2: hot sparing disabled or threshold not reached
+#   3: device already faulted or degraded
+#   9: internal error
+
+[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc"
+. "${ZED_ZEDLET_DIR}/zed-functions.sh"
+
+# Disabled by default.  Enable in the zed.rc file.
+: "${ZED_SPARE_ON_CHECKSUM_ERRORS:=0}"
+: "${ZED_SPARE_ON_IO_ERRORS:=0}"
+
+
+# query_vdev_status (pool, vdev)
+#
+# Given a [pool] and [vdev], return the matching vdev path & status on stdout.
+#
+# Warning: This function does not handle the case of [pool] or [vdev]
+# containing whitespace.  Beware of ShellCheck SC2046.  Caveat emptor.
+#
+# Arguments
+#   pool: pool name
+#   vdev: virtual device name
+#
+# StdOut
+#   arg1: vdev pathname
+#   arg2: vdev status
+#
+query_vdev_status()
+{
+    local pool="$1"
+    local vdev="$2"
+    local t
+
+    vdev="$(basename -- "${vdev}")"
+    ([ -n "${pool}" ] && [ -n "${vdev}" ]) || return
+    t="$(printf '\t')"
+
+    "${ZPOOL}" status "${pool}" 2>/dev/null | sed -n -e \
+        "s,^[ $t]*\(.*${vdev}\(-part[0-9]\+\)\?\)[ $t]*\([A-Z]\+\).*,\1 \3,p" \
+        | tail -1
+}
+
+
+# notify (old_vdev, new_vdev, num_errors)
+#
+# Send a notification regarding the hot spare replacement.
+#
+# Arguments
+#   old_vdev: path of old vdev that has failed
+#   new_vdev: path of new vdev used as the hot spare replacement
+#   num_errors: number of errors that triggered this replacement
+#
+notify()
+{
+    local old_vdev="$1"
+    local new_vdev="$2"
+    local num_errors="$3"
+    local note_subject
+    local note_pathname
+    local s
+    local rv
+
+    umask 077
+    note_subject="ZFS hot spare replacement for ${ZEVENT_POOL} on $(hostname)"
+    note_pathname="${TMPDIR:="/tmp"}/$(basename -- "$0").${ZEVENT_EID}.$$"
+    {
+        [ "${num_errors}" -ne 1 ] 2>/dev/null && s="s"
+
+        echo "ZFS has replaced a failing device with a hot spare after" \
+            "${num_errors} ${ZEVENT_SUBCLASS} error${s}:"
+        echo
+        echo "   eid: ${ZEVENT_EID}"
+        echo " class: ${ZEVENT_SUBCLASS}"
+        echo "  host: $(hostname)"
+        echo "  time: ${ZEVENT_TIME_STRING}"
+        echo "   old: ${old_vdev}"
+        echo "   new: ${new_vdev}"
+
+        "${ZPOOL}" status "${ZEVENT_POOL}"
+
+    } > "${note_pathname}"
+
+    zed_notify "${note_subject}" "${note_pathname}"; rv=$?
+    rm -f "${note_pathname}"
+    return "${rv}"
+}
+
+
+# main
+#
+# Arguments
+#   none
+#
+# Return
+#   see above
+#
+main()
+{
+    local num_errors
+    local action
+    local lockfile
+    local vdev_path
+    local vdev_status
+    local spare
+    local spare_path
+    local spare_status
+    local zpool_err
+    local zpool_rv
+    local rv
+
+    # Avoid hot-sparing a hot-spare.
+    #
+    # Note: ZEVENT_VDEV_PATH is not defined for ZEVENT_VDEV_TYPE=spare.
+    #
+    [ "${ZEVENT_VDEV_TYPE}" = "spare" ] && exit 2
+
+    [ -n "${ZEVENT_POOL}" ] || exit 9
+    [ -n "${ZEVENT_VDEV_GUID}" ] || exit 9
+    [ -n "${ZEVENT_VDEV_PATH}" ] || exit 9
+
+    zed_check_cmd "${ZPOOL}" "${ZINJECT}" || exit 9
+
+    # Fault the device after a given number of I/O errors.
+    #
+    if [ "${ZEVENT_SUBCLASS}" = "io" ]; then
+        if [ "${ZED_SPARE_ON_IO_ERRORS}" -gt 0 ]; then
+            num_errors=$((ZEVENT_VDEV_READ_ERRORS + ZEVENT_VDEV_WRITE_ERRORS))
+            [ "${num_errors}" -ge "${ZED_SPARE_ON_IO_ERRORS}" ] \
+                && action="fault"
+        fi 2>/dev/null
+
+    # Degrade the device after a given number of checksum errors.
+    #
+    elif [ "${ZEVENT_SUBCLASS}" = "checksum" ]; then
+        if [ "${ZED_SPARE_ON_CHECKSUM_ERRORS}" -gt 0 ]; then
+            num_errors="${ZEVENT_VDEV_CKSUM_ERRORS}"
+            [ "${num_errors}" -ge "${ZED_SPARE_ON_CHECKSUM_ERRORS}" ] \
+                && action="degrade"
+        fi 2>/dev/null
+
+    else
+        zed_log_err "unsupported event class \"${ZEVENT_SUBCLASS}\""
+        exit 9
+    fi
+
+    # Error threshold not reached.
+    #
+    if [ -z "${action}" ]; then
+        exit 2
+    fi
+
+    lockfile="zed.spare.lock"
+    zed_lock "${lockfile}"
+
+    # shellcheck disable=SC2046
+    set -- $(query_vdev_status "${ZEVENT_POOL}" "${ZEVENT_VDEV_PATH}")
+    vdev_path="$1"
+    vdev_status="$2"
+
+    # Device is already FAULTED or DEGRADED.
+    #
+    if [ "${vdev_status}" = "FAULTED" ] \
+            || [ "${vdev_status}" = "DEGRADED" ]; then
+        rv=3
+
+    else
+        rv=1
+
+        # 1) FAULT or DEGRADE the device.
+        #
+        "${ZINJECT}" -d "${ZEVENT_VDEV_GUID}" -A "${action}" "${ZEVENT_POOL}"
+
+        # 2) Set the SES fault beacon.
+        #
+        # TODO: Set the 'fault' or 'ident' beacon for the device.  This can
+        # be done through the sg_ses utility.  The only hard part is to map
+        # the sd device to its corresponding enclosure and slot.  We may
+        # be able to leverage the existing vdev_id scripts for this.
+        #
+        # $ sg_ses --dev-slot-num=0 --set=ident /dev/sg3
+        # $ sg_ses --dev-slot-num=0 --clear=ident /dev/sg3
+
+        # 3) Replace the device with a hot spare.
+        #
+        # Round-robin through the spares trying those that are available.
+        #
+        for spare in ${ZEVENT_VDEV_SPARE_PATHS}; do
+
+            # shellcheck disable=SC2046
+            set -- $(query_vdev_status "${ZEVENT_POOL}" "${spare}")
+            spare_path="$1"
+            spare_status="$2"
+
+            [ "${spare_status}" = "AVAIL" ] || continue
+
+            zpool_err="$("${ZPOOL}" replace "${ZEVENT_POOL}" \
+                "${ZEVENT_VDEV_GUID}" "${spare_path}" 2>&1)"; zpool_rv=$?
+
+            if [ "${zpool_rv}" -ne 0 ]; then
+                [ -n "${zpool_err}" ] && zed_log_err "zpool ${zpool_err}"
+            else
+                notify "${vdev_path}" "${spare_path}" "${num_errors}"
+                rv=0
+                break
+            fi
+        done
+    fi
+
+    zed_unlock "${lockfile}"
+    exit "${rv}"
+}
+
+
+main "$@"
diff --git a/cmd/zed/zed.d/data-notify.sh b/cmd/zed/zed.d/data-notify.sh
deleted file mode 120000
index 9008738..0000000
--- a/cmd/zed/zed.d/data-notify.sh
+++ /dev/null
@@ -1 +0,0 @@
-io-notify.sh
\ No newline at end of file
diff --git a/cmd/zed/zed.d/data-notify.sh b/cmd/zed/zed.d/data-notify.sh
new file mode 100755
index 0000000..3ce918a
--- /dev/null
+++ b/cmd/zed/zed.d/data-notify.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Send notification in response to a CHECKSUM, DATA, or IO error.
+#
+# Only one notification per ZED_NOTIFY_INTERVAL_SECS will be sent for a given
+# class/pool/[vdev] combination.  This protects against spamming the recipient
+# should multiple events occur together in time for the same pool/[vdev].
+#
+# Exit codes:
+#   0: notification sent
+#   1: notification failed
+#   2: notification not configured
+#   3: notification suppressed
+#   9: internal error
+
+[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc"
+. "${ZED_ZEDLET_DIR}/zed-functions.sh"
+
+[ -n "${ZEVENT_POOL}" ] || exit 9
+[ -n "${ZEVENT_SUBCLASS}" ] || exit 9
+
+if [ "${ZEVENT_SUBCLASS}" != "checksum" ] \
+        && [ "${ZEVENT_SUBCLASS}" != "data" ] \
+        && [ "${ZEVENT_SUBCLASS}" != "io" ]; then
+    zed_log_err "unsupported event class \"${ZEVENT_SUBCLASS}\""
+    exit 9
+fi
+
+rate_limit_tag="${ZEVENT_POOL};${ZEVENT_VDEV_GUID:-0};${ZEVENT_SUBCLASS};notify"
+zed_rate_limit "${rate_limit_tag}" || exit 3
+
+umask 077
+note_subject="ZFS ${ZEVENT_SUBCLASS} error for ${ZEVENT_POOL} on $(hostname)"
+note_pathname="${TMPDIR:="/tmp"}/$(basename -- "$0").${ZEVENT_EID}.$$"
+{
+    [ "${ZEVENT_SUBCLASS}" = "io" ] && article="an" || article="a"
+
+    echo "ZFS has detected ${article} ${ZEVENT_SUBCLASS} error:"
+    echo
+    echo "   eid: ${ZEVENT_EID}"
+    echo " class: ${ZEVENT_SUBCLASS}"
+    echo "  host: $(hostname)"
+    echo "  time: ${ZEVENT_TIME_STRING}"
+
+    [ -n "${ZEVENT_VDEV_TYPE}" ] && echo " vtype: ${ZEVENT_VDEV_TYPE}"
+    [ -n "${ZEVENT_VDEV_PATH}" ] && echo " vpath: ${ZEVENT_VDEV_PATH}"
+    [ -n "${ZEVENT_VDEV_GUID}" ] && echo " vguid: ${ZEVENT_VDEV_GUID}"
+
+    [ -n "${ZEVENT_VDEV_CKSUM_ERRORS}" ] \
+        && echo " cksum: ${ZEVENT_VDEV_CKSUM_ERRORS}"
+
+    [ -n "${ZEVENT_VDEV_READ_ERRORS}" ] \
+        && echo "  read: ${ZEVENT_VDEV_READ_ERRORS}"
+
+    [ -n "${ZEVENT_VDEV_WRITE_ERRORS}" ] \
+        && echo " write: ${ZEVENT_VDEV_WRITE_ERRORS}"
+
+    echo "  pool: ${ZEVENT_POOL}"
+
+} > "${note_pathname}"
+
+zed_notify "${note_subject}" "${note_pathname}"; rv=$?
+rm -f "${note_pathname}"
+exit "${rv}"
diff --git a/cmd/zed/zed.d/resilver.finish-notify.sh b/cmd/zed/zed.d/resilver.finish-notify.sh
deleted file mode 120000
index 2635dcc..0000000
--- a/cmd/zed/zed.d/resilver.finish-notify.sh
+++ /dev/null
@@ -1 +0,0 @@
-scrub.finish-notify.sh
\ No newline at end of file
diff --git a/cmd/zed/zed.d/resilver.finish-notify.sh b/cmd/zed/zed.d/resilver.finish-notify.sh
new file mode 100755
index 0000000..b4dd1dd
--- /dev/null
+++ b/cmd/zed/zed.d/resilver.finish-notify.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# Send notification in response to a RESILVER.FINISH or SCRUB.FINISH.
+#
+# By default, "zpool status" output will only be included for a scrub.finish
+# zevent if the pool is not healthy; to always include its output, set
+# ZED_NOTIFY_VERBOSE=1.
+#
+# Exit codes:
+#   0: notification sent
+#   1: notification failed
+#   2: notification not configured
+#   3: notification suppressed
+#   9: internal error
+
+[ -f "${ZED_ZEDLET_DIR}/zed.rc" ] && . "${ZED_ZEDLET_DIR}/zed.rc"
+. "${ZED_ZEDLET_DIR}/zed-functions.sh"
+
+[ -n "${ZEVENT_POOL}" ] || exit 9
+[ -n "${ZEVENT_SUBCLASS}" ] || exit 9
+
+if   [ "${ZEVENT_SUBCLASS}" = "resilver.finish" ]; then
+    action="resilver"
+elif [ "${ZEVENT_SUBCLASS}" = "scrub.finish" ]; then
+    action="scrub"
+else
+    zed_log_err "unsupported event class \"${ZEVENT_SUBCLASS}\""
+    exit 9
+fi
+
+zed_check_cmd "${ZPOOL}" || exit 9
+
+# For scrub, suppress notification if the pool is healthy
+# and verbosity is not enabled.
+#
+if [ "${ZEVENT_SUBCLASS}" = "scrub.finish" ]; then
+    healthy="$("${ZPOOL}" status -x "${ZEVENT_POOL}" \
+        | grep "'${ZEVENT_POOL}' is healthy")"
+    [ -n "${healthy}" ] && [ "${ZED_NOTIFY_VERBOSE}" -eq 0 ] && exit 3
+fi
+
+umask 077
+note_subject="ZFS ${ZEVENT_SUBCLASS} event for ${ZEVENT_POOL} on $(hostname)"
+note_pathname="${TMPDIR:="/tmp"}/$(basename -- "$0").${ZEVENT_EID}.$$"
+{
+    echo "ZFS has finished a ${action}:"
+    echo
+    echo "   eid: ${ZEVENT_EID}"
+    echo " class: ${ZEVENT_SUBCLASS}"
+    echo "  host: $(hostname)"
+    echo "  time: ${ZEVENT_TIME_STRING}"
+
+    "${ZPOOL}" status "${ZEVENT_POOL}"
+
+} > "${note_pathname}"
+
+zed_notify "${note_subject}" "${note_pathname}"; rv=$?
+rm -f "${note_pathname}"
+exit "${rv}"
diff --git a/config/suppressed-warnings.txt b/config/suppressed-warnings.txt
deleted file mode 100644
index 621e3cd..0000000
--- a/config/suppressed-warnings.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Expected warnings which should be suppressed by buildbot
-#
-None : ^libtool: install: warning: relinking `.*'$
-None : ^libtool: install: warning: remember to run `libtool --finish .*'$
-None : ^libtool: install: warning: `.*' has not been installed in `.*'$
-None : ^warning: File listed twice:.*
diff --git a/etc/init.d/README.md b/etc/init.d/README.md
deleted file mode 100644
index 89edb1d..0000000
--- a/etc/init.d/README.md
+++ /dev/null
@@ -1,72 +0,0 @@
-DESCRIPTION
-  These script were written with the primary intention of being portable and
-  usable on as many systems as possible.
-
-  This is, in practice, usually not possible. But the intention is there.
-  And it is a good one.
-
-  They have been tested successfully on:
-
-    * Debian GNU/Linux Wheezy
-    * Debian GNU/Linux Jessie
-    * Ubuntu Trusty
-    * CentOS 6.0
-    * CentOS 6.6
-    * Gentoo
-
-SUPPORT
-  If you find that they don't work for your platform, please report this
-  at the ZFS On Linux issue tracker at https://github.com/zfsonlinux/zfs/issues.
-
-  Please include:
-
-    * Distribution name
-    * Distribution version
-    * Where to find an install CD image
-    * Architecture
-
-  If you have code to share that fixes the problem, that is much better.
-  But please remember to try your best keep portability in mind. If you
-  suspect that what you're writing/modifying won't work on anything else
-  than your distribution, please make sure to put that code in appropriate
-  if/else/fi code.
-
-  It currently MUST be bash (or fully compatible) for this to work.
-
-  If you're making your own distribution and you want the scripts to
-  work on that, the biggest problem you'll (probably) have is the part
-  at the beginning of the "zfs-functions.in" file which sets up the
-  logging output.
-
-INSTALLING INIT SCRIPT LINKS
-  To setup the init script links in /etc/rc?.d manually on a Debian GNU/Linux
-  (or derived) system, run the following commands (the order is important!):
-
-    update-rc.d zfs-import start 07 S .       stop 07 0 1 6 .
-    update-rc.d zfs-mount  start 02 2 3 4 5 . stop 06 0 1 6 .
-    update-rc.d zfs-zed    start 07 2 3 4 5 . stop 08 0 1 6 .
-    update-rc.d zfs-share  start 27 2 3 4 5 . stop 05 0 1 6 .
-
-  To do the same on RedHat, Fedora and/or CentOS:
-
-    chkconfig zfs-import
-    chkconfig zfs-mount
-    chkconfig zfs-zed
-    chkconfig zfs-share
-
-  On Gentoo:
-
-    rc-update add zfs-import boot
-    rc-update add zfs-mount boot
-    rc-update add zfs-zed default
-    rc-update add zfs-share default
-
-  The idea here is to make sure all of the ZFS filesystems, including possibly
-  separate datasets like /var, are mounted before anything else is started.
-
-  Then, ZED, which depends on /var, can be started.  It will consume and act
-  on events that occurred before it started.  ZED may also play a role in
-  sharing filesystems in the future, so it is important to start before the
-  'share' service.
-
-  Finally, we share filesystems configured with the share\* property.
diff --git a/rpm/redhat/zfs-dkms.spec.in b/rpm/redhat/zfs-dkms.spec.in
deleted file mode 120000
index ffa051b..0000000
--- a/rpm/redhat/zfs-dkms.spec.in
+++ /dev/null
@@ -1 +0,0 @@
-../generic/zfs-dkms.spec.in
\ No newline at end of file
diff --git a/rpm/redhat/zfs-dkms.spec.in b/rpm/redhat/zfs-dkms.spec.in
new file mode 100644
index 0000000..a379f7d
--- /dev/null
+++ b/rpm/redhat/zfs-dkms.spec.in
@@ -0,0 +1,71 @@
+%{?!packager: %define packager Brian Behlendorf <behlendorf1 at llnl.gov>}
+
+%define module  @PACKAGE@
+%define mkconf  scripts/dkms.mkconf
+
+Name:           %{module}-dkms
+
+Version:        @VERSION@
+Release:        @RELEASE@%{?dist}
+Summary:        Kernel module(s) (dkms)
+
+Group:          System Environment/Kernel
+License:        @ZFS_META_LICENSE@
+URL:            http://zfsonlinux.org/
+Source0:        %{module}-%{version}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+BuildArch:      noarch
+
+Requires:       dkms >= 2.2.0.3-20
+Requires:       spl-dkms = %{version}
+Requires:       gcc, make, perl
+Requires:       kernel-devel
+Provides:       %{module}-kmod = %{version}
+
+%description
+This package contains the dkms ZFS kernel modules.
+
+%prep
+%setup -q -n %{module}-%{version}
+
+%build
+%{mkconf} -n %{module} -v %{version} -f dkms.conf
+
+%install
+if [ "$RPM_BUILD_ROOT" != "/" ]; then
+    rm -rf $RPM_BUILD_ROOT
+fi
+mkdir -p $RPM_BUILD_ROOT/usr/src/
+cp -rf ${RPM_BUILD_DIR}/%{module}-%{version} $RPM_BUILD_ROOT/usr/src/
+
+%clean
+if [ "$RPM_BUILD_ROOT" != "/" ]; then
+    rm -rf $RPM_BUILD_ROOT
+fi
+
+%files
+%defattr(-,root,root)
+/usr/src/%{module}-%{version}
+
+%post
+for POSTINST in /usr/lib/dkms/common.postinst; do
+    if [ -f $POSTINST ]; then
+        $POSTINST %{module} %{version}
+        exit $?
+    fi
+    echo "WARNING: $POSTINST does not exist."
+done
+echo -e "ERROR: DKMS version is too old and %{module} was not"
+echo -e "built with legacy DKMS support."
+echo -e "You must either rebuild %{module} with legacy postinst"
+echo -e "support or upgrade DKMS to a more current version."
+exit 1
+
+%preun
+echo -e "Uninstall of %{module} module (version %{version}) beginning:"
+dkms remove -m %{module} -v %{version} --all --rpm_safe_upgrade
+exit 0
+
+%changelog
+* %(date "+%a %b %d %Y") %packager %{version}-%{release}
+- Automatic build by DKMS
diff --git a/rpm/redhat/zfs.spec.in b/rpm/redhat/zfs.spec.in
deleted file mode 120000
index 4c80791..0000000
--- a/rpm/redhat/zfs.spec.in
+++ /dev/null
@@ -1 +0,0 @@
-../generic/zfs.spec.in
\ No newline at end of file
diff --git a/rpm/redhat/zfs.spec.in b/rpm/redhat/zfs.spec.in
new file mode 100644
index 0000000..55289df
--- /dev/null
+++ b/rpm/redhat/zfs.spec.in
@@ -0,0 +1,391 @@
+%global _sbindir    /sbin
+%global _libdir     /%{_lib}
+
+# Set the default udev directory based on distribution.
+%if %{undefined _udevdir}
+%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
+%global _udevdir    %{_prefix}/lib/udev
+%else
+%global _udevdir    /lib/udev
+%endif
+%endif
+
+# Set the default udevrule directory based on distribution.
+%if %{undefined _udevruledir}
+%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
+%global _udevruledir    %{_prefix}/lib/udev/rules.d
+%else
+%global _udevruledir    /lib/udev/rules.d
+%endif
+%endif
+
+# Set the default dracut directory based on distribution.
+%if %{undefined _dracutdir}
+%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
+%global _dracutdir  %{_prefix}/lib/dracut
+%else
+%global _dracutdir  %{_prefix}/share/dracut
+%endif
+%endif
+
+# Set the default _initconfdir when undefined.
+%if %{undefined _initconfdir}
+%global _initconfdir /etc/sysconfig
+%endif
+
+%bcond_with    debug
+%bcond_with    blkid
+%bcond_with    systemd
+
+# Generic enable switch for systemd
+%if %{with systemd}
+%define _systemd 1
+%endif
+
+# RHEL >= 7 comes with systemd
+%if 0%{?rhel} >= 7
+%define _systemd 1
+%endif
+
+# Fedora >= 15 comes with systemd, but only >= 18 has
+# the proper macros
+%if 0%{?fedora} >= 18
+%define _systemd 1
+%endif
+
+# opensuse >= 12.1 comes with systemd, but only >= 13.1
+# has the proper macros
+%if 0%{?suse_version} >= 1310
+%define _systemd 1
+%endif
+
+Name:           @PACKAGE@
+Version:        @VERSION@
+Release:        @RELEASE@%{?dist}
+Summary:        Commands to control the kernel modules and libraries
+
+Group:          System Environment/Kernel
+License:        @ZFS_META_LICENSE@
+URL:            http://zfsonlinux.org/
+Source0:        %{name}-%{version}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Requires:       spl = %{version}
+Requires:       libzpool2 = %{version}
+Requires:       libnvpair1 = %{version}
+Requires:       libuutil1 = %{version}
+Requires:       libzfs2 = %{version}
+Requires:       %{name}-kmod = %{version}
+Provides:       %{name}-kmod-common = %{version}
+
+# zfs-fuse provides the same commands and man pages that ZoL does. Renaming
+# those on either side would conflict with all available documentation.
+Conflicts:      zfs-fuse
+
+%if 0%{?rhel}%{?fedora}%{?suse_version}
+BuildRequires:  zlib-devel
+BuildRequires:  libuuid-devel
+%if %{with blkid}
+BuildRequires:  libblkid-devel
+%endif
+%endif
+%if 0%{?_systemd}
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+BuildRequires: systemd
+%endif
+
+%description
+This package contains the ZFS command line utilities.
+
+%package -n libzpool2
+Summary:        Native ZFS pool library for Linux
+Group:          System Environment/Kernel
+
+%description -n libzpool2
+This package contains the zpool library, which provides support
+for managing zpools
+
+%post -n libzpool2 -p /sbin/ldconfig
+%postun -n libzpool2 -p /sbin/ldconfig
+
+%package -n libnvpair1
+Summary:        Solaris name-value library for Linux
+Group:          System Environment/Kernel
+
+%description -n libnvpair1
+This package contains routines for packing and unpacking name-value
+pairs.  This functionality is used to portably transport data across
+process boundaries, between kernel and user space, and can be used
+to write self describing data structures on disk.
+
+%post -n libnvpair1 -p /sbin/ldconfig
+%postun -n libnvpair1 -p /sbin/ldconfig
+
+%package -n libuutil1
+Summary:        Solaris userland utility library for Linux
+Group:          System Environment/Kernel
+
+%description -n libuutil1
+This library provides a variety of compatibility functions for ZFS on Linux:
+ * libspl: The Solaris Porting Layer userland library, which provides APIs
+   that make it possible to run Solaris user code in a Linux environment
+   with relatively minimal modification.
+ * libavl: The Adelson-Velskii Landis balanced binary tree manipulation
+   library.
+ * libefi: The Extensible Firmware Interface library for GUID disk
+   partitioning.
+ * libshare: NFS, SMB, and iSCSI service integration for ZFS.
+
+%post -n libuutil1 -p /sbin/ldconfig
+%postun -n libuutil1 -p /sbin/ldconfig
+
+%package -n libzfs2
+Summary:        Native ZFS filesystem library for Linux
+Group:          System Environment/Kernel
+
+%description -n libzfs2
+This package provides support for managing ZFS filesystems
+
+%post -n libzfs2 -p /sbin/ldconfig
+%postun -n libzfs2 -p /sbin/ldconfig
+
+%package -n libzfs2-devel
+Summary:        Development headers
+Group:          System Environment/Kernel
+Requires:       libzfs2 = %{version}
+Requires:       libzpool2 = %{version}
+Requires:       libnvpair1 = %{version}
+Requires:       libuutil1 = %{version}
+Provides:       libzpool2-devel
+Provides:       libnvpair1-devel
+Provides:       libuutil1-devel
+Obsoletes:      zfs-devel
+
+%description -n libzfs2-devel
+This package contains the header files needed for building additional
+applications against the ZFS libraries.
+
+%package test
+Summary:        Test infrastructure
+Group:          System Environment/Kernel
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+Requires:       parted
+Requires:       lsscsi
+Requires:       mdadm
+Requires:       bc
+
+%description test
+This package contains test infrastructure and support scripts for
+validating the file system.
+
+%package dracut
+Summary:        Dracut module
+Group:          System Environment/Kernel
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+Requires:       dracut
+
+%description dracut
+This package contains a dracut module used to construct an initramfs
+image which is ZFS aware.
+
+%if 0%{?_initramfs}
+%package initramfs
+Summary:        Initramfs module
+Group:          System Environment/Kernel
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+Requires:       %{name} = %{version}-%{release}
+Requires:       initramfs-tools
+
+%description initramfs
+This package contains a initramfs module used to construct an initramfs
+image which is ZFS aware.
+%endif
+
+%prep
+%if %{with debug}
+    %define debug --enable-debug
+%else
+    %define debug --disable-debug
+%endif
+%if %{with blkid}
+    %define blkid --with-blkid
+%else
+    %define blkid --without-blkid
+%endif
+%if 0%{?_systemd}
+    %define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --disable-sysvinit
+%else
+    %define systemd --enable-sysvinit --disable-systemd
+%endif
+
+%setup -q
+
+%build
+%configure \
+    --with-config=user \
+    --with-udevdir=%{_udevdir} \
+    --with-udevruledir=%{_udevruledir} \
+    --with-dracutdir=%{_dracutdir} \
+    --disable-static \
+    %{debug} \
+    %{blkid} \
+    %{systemd}
+make %{?_smp_mflags}
+
+%install
+%{__rm} -rf $RPM_BUILD_ROOT
+make install DESTDIR=%{?buildroot}
+find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
+
+%post
+%if 0%{?_systemd}
+%systemd_post zfs.target
+%else
+if [ -x /sbin/chkconfig ]; then
+    /sbin/chkconfig --add zfs-import
+    /sbin/chkconfig --add zfs-mount
+    /sbin/chkconfig --add zfs-share
+    /sbin/chkconfig --add zfs-zed
+fi
+%endif
+exit 0
+
+%preun
+%if 0%{?_systemd}
+%systemd_preun zfs.target
+%else
+if [ $1 -eq 0 ] && [ -x /sbin/chkconfig ]; then
+    /sbin/chkconfig --del zfs-import
+    /sbin/chkconfig --del zfs-mount
+    /sbin/chkconfig --del zfs-share
+    /sbin/chkconfig --del zfs-zed
+fi
+%endif
+exit 0
+
+%postun
+%if 0%{?_systemd}
+%systemd_postun zfs.target
+%endif
+
+%files
+%{_sbindir}/*
+%{_bindir}/*
+%{_libexecdir}/%{name}
+%{_mandir}/man1/*
+%{_mandir}/man5/*
+%{_mandir}/man8/*
+%{_udevdir}/vdev_id
+%{_udevdir}/zvol_id
+%{_udevdir}/rules.d/*
+%if 0%{?_systemd}
+/usr/lib/modules-load.d/*
+%{_unitdir}/*
+%{_presetdir}/*
+%else
+%config(noreplace) %{_sysconfdir}/init.d/*
+%config(noreplace) %{_initconfdir}/zfs
+%endif
+%config(noreplace) %{_sysconfdir}/%{name}
+
+%files -n libzpool2
+%{_libdir}/libzpool.so.*
+
+%files -n libnvpair1
+%{_libdir}/libnvpair.so.*
+
+%files -n libuutil1
+%{_libdir}/libuutil.so.*
+
+%files -n libzfs2
+%{_libdir}/libzfs*.so.*
+
+%files -n libzfs2-devel
+%{_datadir}/pkgconfig/libzfs.pc
+%{_datadir}/pkgconfig/libzfs_core.pc
+%{_libdir}/*.so
+%{_includedir}/*
+%doc AUTHORS COPYRIGHT DISCLAIMER
+%doc OPENSOLARIS.LICENSE README.markdown
+
+%files test
+%{_datadir}/%{name}
+
+%files dracut
+%doc contrib/dracut/README.dracut.markdown
+%{_dracutdir}/modules.d/*
+
+%if 0%{?_initramfs}
+%files initramfs
+%doc contrib/initramfs/README.initramfs.markdown
+/usr/share/initramfs-tools/*
+%else
+# Since we're not building the initramfs package,
+# ignore those files.
+%exclude /usr/share/initramfs-tools
+%endif
+
+%changelog
+* Tue Mar 22 2016 Ned Bass <bass6 at llnl.gov> - 0.6.5.6-1
+- Remove artificial architecture restrictions in packaging
+- Add support for s390[x] zfsonlinux/zfs#4425
+- Handle negative dentries in case insensitive filesystem zfsonlinux/zfs#4243
+- Fix casesensitivity=insensitive deadlock zfsonlinux/zfs#4136
+- Correctly parse zdb -R flag arguments zfsonlinux/zfs#4304
+- Fix lock order inversion with zvol_open() zfsonlinux/zfs#3681
+- Add support for asynchronous zvol minor operations zfsonlinux/zfs#2217
+- Make zvol minor functionality more robust zfsonlinux/zfs#4344
+- Prevent zpool_find_vdev() from truncating vdev path zfsonlinux/zfs#4312
+- Add -gLP to zpool subcommands for alt vdev names zfsonlinux/zfs#4341
+- Fix zpool list -v output for spares and log devices zfsonlinux/zfs#4313
+* Wed Mar 9 2016 Ned Bass <bass6 at llnl.gov> - 0.6.5.5-1
+- Linux 4.5 compatibility zfsonlinux/zfs#4228
+- Create working debuginfo packages on Red Hat zfsonlinux/zfs#4224
+- Make arc_summary.py and dbufstat.py compatible with python3
+- musl libc compatibility for option parsing zfsonlinux/zfs#4222
+- Prevent arc_c collapse and possible panic zfsonlinux/zfs#3904
+- Prevent duplicated xattr between SA and dir zfsonlinux/zfs#4153
+- Fix zsb->z_hold_mtx deadlock zfsonlinux/zfs#4106
+- Prevent SA header corruption zfsonlinux/zfs#4150
+* Fri Jan  8 2016 Ned Bass <bass6 at llnl.gov> - 0.6.5.4-1
+- Linux 4.4 compat
+- Assorted stability fixes
+- Fixes for NFS-exported snapshots
+- Fix kernel warning in unlock_new_inode() and deadlock
+- Fix overflow in P2ROUNDUP_TYPED macro
+- Fix write performance issue due to bad zfs_dirty_data_max calculation
+- Fix builtin kernel builds
+- Fix deadlock during direct memory reclaim
+* Tue Oct 13 2015 Ned Bass <bass6 at llnl.gov> - 0.6.5.3-1
+- Don't import all visible pools in zfs-import init script zfsonlinux/zfs#3777
+- Fix use-after-free in vdev_disk_physio_completion zfsonlinux/zfs#3920
+- Fix avl_is_empty(&dn->dn_dbufs) assertion zfsonlinux/zfs#3865
+* Wed Sep 30 2015 Ned Bass <bass6 at llnl.gov> - 0.6.5.2-1
+- Init script fixes zfsonlinux/zfs#3816
+- Fix uioskip crash when skip to end zfsonlinux/zfs#3806 zfsonlinux/zfs#3850
+- Userspace can trigger an assertion zfsonlinux/zfs#3792
+- Fix quota userused underflow bug zfsonlinux/zfs#3789
+- Fix performance regression from unwanted synchronous I/O zfsonlinux/zfs#3780
+- Fix deadlock during ARC reclaim zfsonlinux/zfs#3808 zfsonlinux/zfs#3834
+- Fix deadlock with zfs receive and clamscan zfsonlinux/zfs#3719
+- Allow NFS activity to defer snapshot unmounts zfsonlinux/zfs#3794
+- Linux 4.3 compatibility zfsonlinux/zfs#3799
+- Zed reload fixes zfsonlinux/zfs#3773
+- Fix PAX Patch/Grsec SLAB_USERCOPY panic zfsonlinux/zfs#3796
+- Always remove during dkms uninstall/update zfsonlinux/spl#476
+* Sat Sep 19 2015 Ned Bass <bass6 at llnl.gov> - 0.6.5.1-1
+- Fix zvol corruption with TRIM/discard zfsonlinux/zfs#3798
+- Fix NULL as mount(2) syscall data parameter zfsonlinux/zfs#3804
+- Fix xattr=sa dataset property not honored zfsonlinux/zfs#3787
+* Fri Sep 11 2015 Brian Behlendorf <behlendorf1 at llnl.gov> - 0.6.5-1
+- Released 0.6.5-1, detailed release notes are available at:
+- https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.6.5
+* Wed Apr  8 2015 Brian Behlendorf <behlendorf1 at llnl.gov> - 0.6.4-1
+- Released 0.6.4-1
+* Thu Jun 12 2014 Brian Behlendorf <behlendorf1 at llnl.gov> - 0.6.3-1
+- Released 0.6.3-1
+* Wed Aug 21 2013 Brian Behlendorf <behlendorf1 at llnl.gov> - 0.6.2-1
+- Released 0.6.2-1
+* Fri Mar 22 2013 Brian Behlendorf <behlendorf1 at llnl.gov> - 0.6.1-1
+- First official stable release.
diff --git a/scripts/zpios-test/large-thread-survey.sh b/scripts/zpios-test/large-thread-survey.sh
deleted file mode 120000
index 90b6e3c..0000000
--- a/scripts/zpios-test/large-thread-survey.sh
+++ /dev/null
@@ -1 +0,0 @@
-1x256th-65536rc-4rs-1cs-4off.sh
\ No newline at end of file
diff --git a/scripts/zpios-test/large-thread-survey.sh b/scripts/zpios-test/large-thread-survey.sh
new file mode 100755
index 0000000..743e97b
--- /dev/null
+++ b/scripts/zpios-test/large-thread-survey.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# Usage: zpios
+#        --threadcount       -t    =values
+#        --threadcount_low   -l    =value
+#        --threadcount_high  -h    =value
+#        --threadcount_incr  -e    =value
+#        --regioncount       -n    =values
+#        --regioncount_low   -i    =value
+#        --regioncount_high  -j    =value
+#        --regioncount_incr  -k    =value
+#        --offset            -o    =values
+#        --offset_low        -m    =value
+#        --offset_high       -q    =value
+#        --offset_incr       -r    =value
+#        --chunksize         -c    =values
+#        --chunksize_low     -a    =value
+#        --chunksize_high    -b    =value
+#        --chunksize_incr    -g    =value
+#        --regionsize        -s    =values
+#        --regionsize_low    -A    =value
+#        --regionsize_high   -B    =value
+#        --regionsize_incr   -C    =value
+#        --load              -L    =dmuio|ssf|fpp
+#        --pool              -p    =pool name
+#        --name              -M    =test name
+#        --cleanup           -x
+#        --prerun            -P    =pre-command
+#        --postrun           -R    =post-command
+#        --log               -G    =log directory
+#        --regionnoise       -I    =shift
+#        --chunknoise        -N    =bytes
+#        --threaddelay       -T    =jiffies
+#        --verify            -V
+#        --zerocopy          -z
+#        --nowait            -O
+#        --human-readable    -H
+#        --verbose           -v    =increase verbosity
+#        --help              -?    =this help
+
+ZPIOS_CMD="${ZPIOS}                                              \
+	--load=dmuio                                             \
+	--pool=${ZPOOL_NAME}                                     \
+	--name=${ZPOOL_CONFIG}                                   \
+	--threadcount=1,2,4,8,16,32,64,128,256                   \
+	--regioncount=65536                                      \
+	--regionsize=4M                                          \
+	--chunksize=1M                                           \
+	--offset=4M                                              \
+        --cleanup                                                \
+	--human-readable                                         \
+	${ZPIOS_OPTIONS}"
+
+zpios_start() {
+	if [ ${VERBOSE} ]; then
+		ZPIOS_CMD="${ZPIOS_CMD} --verbose"
+		echo ${ZPIOS_CMD}
+	fi
+
+	${ZPIOS_CMD} || exit 1
+}
+
+zpios_stop() {
+	[ ${VERBOSE} ] && echo
+}
diff --git a/scripts/zpios-test/large.sh b/scripts/zpios-test/large.sh
deleted file mode 120000
index b8e22bf..0000000
--- a/scripts/zpios-test/large.sh
+++ /dev/null
@@ -1 +0,0 @@
-256th-65536rc-4rs-1cs-4off.sh
\ No newline at end of file
diff --git a/scripts/zpios-test/large.sh b/scripts/zpios-test/large.sh
new file mode 100755
index 0000000..92a3b77
--- /dev/null
+++ b/scripts/zpios-test/large.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# Usage: zpios
+#        --threadcount       -t    =values
+#        --threadcount_low   -l    =value
+#        --threadcount_high  -h    =value
+#        --threadcount_incr  -e    =value
+#        --regioncount       -n    =values
+#        --regioncount_low   -i    =value
+#        --regioncount_high  -j    =value
+#        --regioncount_incr  -k    =value
+#        --offset            -o    =values
+#        --offset_low        -m    =value
+#        --offset_high       -q    =value
+#        --offset_incr       -r    =value
+#        --chunksize         -c    =values
+#        --chunksize_low     -a    =value
+#        --chunksize_high    -b    =value
+#        --chunksize_incr    -g    =value
+#        --regionsize        -s    =values
+#        --regionsize_low    -A    =value
+#        --regionsize_high   -B    =value
+#        --regionsize_incr   -C    =value
+#        --load              -L    =dmuio|ssf|fpp
+#        --pool              -p    =pool name
+#        --name              -M    =test name
+#        --cleanup           -x
+#        --prerun            -P    =pre-command
+#        --postrun           -R    =post-command
+#        --log               -G    =log directory
+#        --regionnoise       -I    =shift
+#        --chunknoise        -N    =bytes
+#        --threaddelay       -T    =jiffies
+#        --verify            -V
+#        --zerocopy          -z
+#        --nowait            -O
+#        --human-readable    -H
+#        --verbose           -v    =increase verbosity
+#        --help              -?    =this help
+
+ZPIOS_CMD="${ZPIOS}                                              \
+	--load=dmuio                                             \
+	--pool=${ZPOOL_NAME}                                     \
+	--name=${ZPOOL_CONFIG}                                   \
+	--threadcount=256                                        \
+	--regioncount=65536                                      \
+	--regionsize=4M                                          \
+	--chunksize=1M                                           \
+	--offset=4M                                              \
+        --cleanup                                                \
+	--human-readable                                         \
+	${ZPIOS_OPTIONS}"
+
+zpios_start() {
+	if [ ${VERBOSE} ]; then
+		ZPIOS_CMD="${ZPIOS_CMD} --verbose"
+		echo ${ZPIOS_CMD}
+	fi
+
+	${ZPIOS_CMD} || exit 1
+}
+
+zpios_stop() {
+	[ ${VERBOSE} ] && echo
+}
diff --git a/scripts/zpios-test/medium.sh b/scripts/zpios-test/medium.sh
deleted file mode 120000
index d81027b..0000000
--- a/scripts/zpios-test/medium.sh
+++ /dev/null
@@ -1 +0,0 @@
-16th-8192rc-4rs-1cs-4off.sh
\ No newline at end of file
diff --git a/scripts/zpios-test/medium.sh b/scripts/zpios-test/medium.sh
new file mode 100755
index 0000000..cbd9c69
--- /dev/null
+++ b/scripts/zpios-test/medium.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# Usage: zpios
+#        --threadcount       -t    =values
+#        --threadcount_low   -l    =value
+#        --threadcount_high  -h    =value
+#        --threadcount_incr  -e    =value
+#        --regioncount       -n    =values
+#        --regioncount_low   -i    =value
+#        --regioncount_high  -j    =value
+#        --regioncount_incr  -k    =value
+#        --offset            -o    =values
+#        --offset_low        -m    =value
+#        --offset_high       -q    =value
+#        --offset_incr       -r    =value
+#        --chunksize         -c    =values
+#        --chunksize_low     -a    =value
+#        --chunksize_high    -b    =value
+#        --chunksize_incr    -g    =value
+#        --regionsize        -s    =values
+#        --regionsize_low    -A    =value
+#        --regionsize_high   -B    =value
+#        --regionsize_incr   -C    =value
+#        --load              -L    =dmuio|ssf|fpp
+#        --pool              -p    =pool name
+#        --name              -M    =test name
+#        --cleanup           -x
+#        --prerun            -P    =pre-command
+#        --postrun           -R    =post-command
+#        --log               -G    =log directory
+#        --regionnoise       -I    =shift
+#        --chunknoise        -N    =bytes
+#        --threaddelay       -T    =jiffies
+#        --verify            -V
+#        --zerocopy          -z
+#        --nowait            -O
+#        --human-readable    -H
+#        --verbose           -v    =increase verbosity
+#        --help              -?    =this help
+
+ZPIOS_CMD="${ZPIOS}                                              \
+	--load=dmuio                                             \
+	--pool=${ZPOOL_NAME}                                     \
+	--name=${ZPOOL_CONFIG}                                   \
+	--threadcount=16                                         \
+	--regioncount=8192                                       \
+	--regionsize=4M                                          \
+	--chunksize=1M                                           \
+	--offset=4M                                              \
+	--cleanup                                                \
+	--human-readable                                         \
+	${ZPIOS_OPTIONS}"
+
+zpios_start() {
+	if [ ${VERBOSE} ]; then
+		ZPIOS_CMD="${ZPIOS_CMD} --verbose"
+		echo ${ZPIOS_CMD}
+	fi
+
+	${ZPIOS_CMD} || exit 1
+}
+
+zpios_stop() {
+	[ ${VERBOSE} ] && echo
+}
diff --git a/scripts/zpios-test/small.sh b/scripts/zpios-test/small.sh
deleted file mode 120000
index cbf03b5..0000000
--- a/scripts/zpios-test/small.sh
+++ /dev/null
@@ -1 +0,0 @@
-4th-1024rc-4rs-1cs-4off.sh
\ No newline at end of file
diff --git a/scripts/zpios-test/small.sh b/scripts/zpios-test/small.sh
new file mode 100755
index 0000000..0db952c
--- /dev/null
+++ b/scripts/zpios-test/small.sh
@@ -0,0 +1,65 @@
+#!/bin/bash
+#
+# Usage: zpios
+#        --threadcount       -t    =values
+#        --threadcount_low   -l    =value
+#        --threadcount_high  -h    =value
+#        --threadcount_incr  -e    =value
+#        --regioncount       -n    =values
+#        --regioncount_low   -i    =value
+#        --regioncount_high  -j    =value
+#        --regioncount_incr  -k    =value
+#        --offset            -o    =values
+#        --offset_low        -m    =value
+#        --offset_high       -q    =value
+#        --offset_incr       -r    =value
+#        --chunksize         -c    =values
+#        --chunksize_low     -a    =value
+#        --chunksize_high    -b    =value
+#        --chunksize_incr    -g    =value
+#        --regionsize        -s    =values
+#        --regionsize_low    -A    =value
+#        --regionsize_high   -B    =value
+#        --regionsize_incr   -C    =value
+#        --load              -L    =dmuio|ssf|fpp
+#        --pool              -p    =pool name
+#        --name              -M    =test name
+#        --cleanup           -x
+#        --prerun            -P    =pre-command
+#        --postrun           -R    =post-command
+#        --log               -G    =log directory
+#        --regionnoise       -I    =shift
+#        --chunknoise        -N    =bytes
+#        --threaddelay       -T    =jiffies
+#        --verify            -V
+#        --zerocopy          -z
+#        --nowait            -O
+#        --human-readable    -H
+#        --verbose           -v    =increase verbosity
+#        --help              -?    =this help
+
+ZPIOS_CMD="${ZPIOS}                                              \
+	--load=dmuio                                             \
+	--pool=${ZPOOL_NAME}                                     \
+	--name=${ZPOOL_CONFIG}                                   \
+	--threadcount=4                                          \
+	--regioncount=1024                                       \
+	--regionsize=4M                                          \
+	--chunksize=1M                                           \
+	--offset=4M                                              \
+	--cleanup                                                \
+	--human-readable                                         \
+	${ZPIOS_OPTIONS}"
+
+zpios_start() {
+	if [ ${VERBOSE} ]; then
+		ZPIOS_CMD="${ZPIOS_CMD} --verbose"
+		echo ${ZPIOS_CMD}
+	fi
+
+	${ZPIOS_CMD} || exit 1
+}
+
+zpios_stop() {
+	[ ${VERBOSE} ] && echo
+}
diff --git a/scripts/zpios-test/tiny.sh b/scripts/zpios-test/tiny.sh
deleted file mode 120000
index ba8b7cd..0000000
--- a/scripts/zpios-test/tiny.sh
+++ /dev/null
@@ -1 +0,0 @@
-1th-16rc-4rs-1cs-4off.sh
\ No newline at end of file
diff --git a/scripts/zpios-test/tiny.sh b/scripts/zpios-test/tiny.sh
new file mode 100755
index 0000000..cd3c50b
--- /dev/null
+++ b/scripts/zpios-test/tiny.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+#
+# Usage: zpios
+#        --threadcount       -t    =values
+#        --threadcount_low   -l    =value
+#        --threadcount_high  -h    =value
+#        --threadcount_incr  -e    =value
+#        --regioncount       -n    =values
+#        --regioncount_low   -i    =value
+#        --regioncount_high  -j    =value
+#        --regioncount_incr  -k    =value
+#        --offset            -o    =values
+#        --offset_low        -m    =value
+#        --offset_high       -q    =value
+#        --offset_incr       -r    =value
+#        --chunksize         -c    =values
+#        --chunksize_low     -a    =value
+#        --chunksize_high    -b    =value
+#        --chunksize_incr    -g    =value
+#        --regionsize        -s    =values
+#        --regionsize_low    -A    =value
+#        --regionsize_high   -B    =value
+#        --regionsize_incr   -C    =value
+#        --load              -L    =dmuio|ssf|fpp
+#        --pool              -p    =pool name
+#        --name              -M    =test name
+#        --cleanup           -x
+#        --prerun            -P    =pre-command
+#        --postrun           -R    =post-command
+#        --log               -G    =log directory
+#        --regionnoise       -I    =shift
+#        --chunknoise        -N    =bytes
+#        --threaddelay       -T    =jiffies
+#        --verify            -V
+#        --zerocopy          -z
+#        --nowait            -O
+#        --human-readable    -H
+#        --verbose           -v    =increase verbosity
+#        --help              -?    =this help
+
+
+ZPIOS_CMD="${ZPIOS}                                              \
+	--load=dmuio                                             \
+	--pool=${ZPOOL_NAME}                                     \
+	--name=${ZPOOL_CONFIG}                                   \
+	--threadcount=1                                          \
+	--regioncount=16                                         \
+	--regionsize=4M                                          \
+	--chunksize=1M                                           \
+	--offset=4M                                              \
+	--cleanup                                                \
+	--human-readable                                         \
+	${ZPIOS_OPTIONS}"
+
+zpios_start() {
+	if [ ${VERBOSE} ]; then
+		ZPIOS_CMD="${ZPIOS_CMD} --verbose"
+		echo ${ZPIOS_CMD}
+	fi
+
+	${ZPIOS_CMD} || exit 1
+}
+
+zpios_stop() {
+	[ ${VERBOSE} ] && echo
+}

-- 
OpenZFS on Linux



More information about the Pkg-zfsonlinux-devel mailing list