From owner-svn-src-projects@freebsd.org Wed Sep 6 23:12:36 2017 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 95E93E1C972 for ; Wed, 6 Sep 2017 23:12:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2A6BC7F2CD; Wed, 6 Sep 2017 23:12:36 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v86NCZXj007972; Wed, 6 Sep 2017 23:12:35 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v86NCY8d007969; Wed, 6 Sep 2017 23:12:34 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201709062312.v86NCY8d007969@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Wed, 6 Sep 2017 23:12:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r323250 - projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv X-SVN-Group: projects X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv X-SVN-Commit-Revision: 323250 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Sep 2017 23:12:36 -0000 Author: asomers Date: Wed Sep 6 23:12:34 2017 New Revision: 323250 URL: https://svnweb.freebsd.org/changeset/base/323250 Log: Fix refreserv_00[24] tests/sys/cddl/zfs/tests/refreserv/refreserv_002_pos.ksh Import a fix from Illumos. Quotas and reservations are a little bit approximate. This change incrementally raises refreservation as high as it can go, instead of assuming that it can equal the quota. tests/sys/cddl/zfs/tests/refreserv/refreserv_004_pos.ksh Instead of assuming that refreservation can equal the parent's quota, allow a margin of 5MB, like refreserv_001_pos does. I don't know why this wasn't a problem for Illumos. Also, delete the final line setting reservation. I'm not sure what the purpose of that line was. It may originally have been a copy/paste error. tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh Clear expected failures Obtained from: Illumos (partially) Sponsored by: Spectra Logic Corp Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_002_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_004_pos.ksh projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_002_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_002_pos.ksh Wed Sep 6 23:01:41 2017 (r323249) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_002_pos.ksh Wed Sep 6 23:12:34 2017 (r323250) @@ -70,6 +70,29 @@ function cleanup log_must $ZFS set mountpoint=$TESTDIR $TESTPOOL/$TESTFS } +# This function iteratively increases refreserv to its highest possible +# value. Simply setting refreserv == quota can allow enough writes to +# complete that the test fails. +function max_refreserv +{ + typeset ds=$1 + typeset -i incsize=131072 + typeset -i rr=$(get_prop available $ds) + + log_must $ZFS set refreserv=$rr $ds + while :; do + $ZFS set refreserv=$((rr + incsize)) $ds >/dev/null 2>&1 + if [[ $? == 0 ]]; then + ((rr += incsize)) + continue + else + ((incsize /= 2)) + ((incsize == 0)) && break + fi + done +} + + log_assert "Setting full size as refreservation, verify no snapshot " \ "can be created." log_onexit cleanup @@ -88,9 +111,7 @@ for ds in $datasets; do # Verify refreservation on dataset # log_must $ZFS set quota=25M $ds - log_must $ZFS set refreservation=25M $ds - mntpnt=$(get_prop mountpoint $ds) - log_must $TOUCH $mntpnt/$TESTFILE + max_refreserv $ds log_mustnot $ZFS snapshot $ds@snap if datasetexists $ds@snap ; then log_fail "ERROR: $ds@snap should not exists." Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_004_pos.ksh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_004_pos.ksh Wed Sep 6 23:01:41 2017 (r323249) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_004_pos.ksh Wed Sep 6 23:12:34 2017 (r323250) @@ -82,20 +82,19 @@ for ds in $datasets; do log_must $ZFS set quota=25M $ds log_must $ZFS set refreservation=15M $ds - typeset -i avail - avail=$(get_prop avail $subfs) + typeset avail + avail=5M log_must $ZFS set refreservation=$avail $subfs typeset mntpnt mntpnt=$(get_prop mountpoint $subfs) log_must $MKFILE $avail $mntpnt/$TESTFILE - typeset -i exceed - ((exceed = avail + 1)) + typeset exceed + exceed=15M log_mustnot $ZFS set refreservation=$exceed $subfs - log_mustnot $MKFILE $avail $mntpnt/$TESTFILE + log_mustnot $MKFILE $exceed $mntpnt/$TESTFILE log_must $ZFS set quota=none $ds - log_must $ZFS set reservation=15M $ds done log_pass "Verify refreservation is limited by available space." Modified: projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh ============================================================================== --- projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh Wed Sep 6 23:01:41 2017 (r323249) +++ projects/zfsd/head/tests/sys/cddl/zfs/tests/refreserv/refreserv_test.sh Wed Sep 6 23:12:34 2017 (r323250) @@ -55,7 +55,6 @@ refreserv_002_pos_head() } refreserv_002_pos_body() { - atf_expect_fail "BUG25520 this test incorrectly assumes that the avail, reserv, and refreserv properties are exact values that apply to data but not metadata" . $(atf_get_srcdir)/../../include/default.cfg . $(atf_get_srcdir)/refreserv.cfg @@ -102,7 +101,6 @@ refreserv_004_pos_head() } refreserv_004_pos_body() { - atf_expect_fail "BUG25520 this test incorrectly assumes that the avail, reserv, and refreserv properties are exact values that apply to data but not metadata" . $(atf_get_srcdir)/../../include/default.cfg . $(atf_get_srcdir)/refreserv.cfg