1*c9539b89SMartin Matuska#!/bin/ksh 2*c9539b89SMartin Matuska 3*c9539b89SMartin Matuska# 4*c9539b89SMartin Matuska# This file and its contents are supplied under the terms of the 5*c9539b89SMartin Matuska# Common Development and Distribution License ("CDDL"), version 1.0. 6*c9539b89SMartin Matuska# You may only use this file in accordance with the terms of version 7*c9539b89SMartin Matuska# 1.0 of the CDDL. 8*c9539b89SMartin Matuska# 9*c9539b89SMartin Matuska# A full copy of the text of the CDDL should have accompanied this 10*c9539b89SMartin Matuska# source. A copy of the CDDL is also available via the Internet at 11*c9539b89SMartin Matuska# http://www.illumos.org/license/CDDL. 12*c9539b89SMartin Matuska# 13*c9539b89SMartin Matuska 14*c9539b89SMartin Matuska. $STF_SUITE/include/libtest.shlib 15*c9539b89SMartin Matuska 16*c9539b89SMartin Matuska# 17*c9539b89SMartin Matuska# DESCRIPTION: 18*c9539b89SMartin Matuska# Exercise gang block IO paths for non-encrypted and encrypted datasets. 19*c9539b89SMartin Matuska# 20*c9539b89SMartin Matuska 21*c9539b89SMartin Matuskaverify_runnable "both" 22*c9539b89SMartin Matuskalog_assert "Verify IO when file system is full and ganging." 23*c9539b89SMartin Matuska 24*c9539b89SMartin Matuskafunction cleanup 25*c9539b89SMartin Matuska{ 26*c9539b89SMartin Matuska log_must set_tunable64 METASLAB_FORCE_GANGING $metaslab_force_ganging 27*c9539b89SMartin Matuska default_cleanup_noexit 28*c9539b89SMartin Matuska} 29*c9539b89SMartin Matuska 30*c9539b89SMartin Matuskalog_onexit cleanup 31*c9539b89SMartin Matuska 32*c9539b89SMartin Matuskadefault_setup_noexit $DISKS 33*c9539b89SMartin Matuska 34*c9539b89SMartin Matuskatypeset metaslab_force_ganging=$(get_tunable METASLAB_FORCE_GANGING) 35*c9539b89SMartin Matuskashift=$(random_int_between 15 17) 36*c9539b89SMartin Matuskalog_must set_tunable64 METASLAB_FORCE_GANGING $((2**$shift)) 37*c9539b89SMartin Matuska 38*c9539b89SMartin Matuskakeyfile=/$TESTPOOL/keyencfods 39*c9539b89SMartin Matuskalog_must eval "echo 'password' > $keyfile" 40*c9539b89SMartin Matuskabs=1024k 41*c9539b89SMartin Matuskacount=512 42*c9539b89SMartin Matuska 43*c9539b89SMartin Matuskalog_must dd if=/dev/urandom of=$TESTDIR/data bs=$bs count=$count 44*c9539b89SMartin Matuskadata_checksum=$(sha256digest $TESTDIR/data) 45*c9539b89SMartin Matuska 46*c9539b89SMartin Matuska# Test common large block configuration. 47*c9539b89SMartin Matuskalog_must zfs create -o recordsize=1m -o primarycache=metadata $TESTPOOL/gang 48*c9539b89SMartin Matuskamntpnt=$(get_prop mountpoint $TESTPOOL/gang) 49*c9539b89SMartin Matuska 50*c9539b89SMartin Matuskalog_must dd if=$TESTDIR/data of=$mntpnt/file bs=$bs count=$count 51*c9539b89SMartin Matuskasync_pool $TESTPOOL 52*c9539b89SMartin Matuskalog_must dd if=$mntpnt/file of=$TESTDIR/out bs=$bs count=$count 53*c9539b89SMartin Matuskaout_checksum=$(sha256digest $TESTDIR/out) 54*c9539b89SMartin Matuska 55*c9539b89SMartin Matuskaif [[ "$data_checksum" != "$out_checksum" ]]; then 56*c9539b89SMartin Matuska log_fail "checksum mismatch ($data_checksum != $out_checksum)" 57*c9539b89SMartin Matuskafi 58*c9539b89SMartin Matuska 59*c9539b89SMartin Matuskalog_must rm -f $TESTDIR/out 60*c9539b89SMartin Matuskalog_must zfs destroy $TESTPOOL/gang 61*c9539b89SMartin Matuska 62*c9539b89SMartin Matuska# Test common large block configuration with encryption. 63*c9539b89SMartin Matuskalog_must zfs create \ 64*c9539b89SMartin Matuska -o recordsize=1m \ 65*c9539b89SMartin Matuska -o primarycache=metadata \ 66*c9539b89SMartin Matuska -o compression=off \ 67*c9539b89SMartin Matuska -o encryption=on \ 68*c9539b89SMartin Matuska -o keyformat=passphrase \ 69*c9539b89SMartin Matuska -o keylocation=file://$keyfile \ 70*c9539b89SMartin Matuska -o copies=2 \ 71*c9539b89SMartin Matuska $TESTPOOL/gang 72*c9539b89SMartin Matuskamntpnt=$(get_prop mountpoint $TESTPOOL/gang) 73*c9539b89SMartin Matuska 74*c9539b89SMartin Matuskalog_must dd if=$TESTDIR/data of=$mntpnt/file bs=$bs count=$count 75*c9539b89SMartin Matuskasync_pool $TESTPOOL 76*c9539b89SMartin Matuskalog_must dd if=$mntpnt/file of=$TESTDIR/out bs=$bs count=$count 77*c9539b89SMartin Matuskaout_checksum=$(sha256digest $TESTDIR/out) 78*c9539b89SMartin Matuska 79*c9539b89SMartin Matuskaif [[ "$data_checksum" != "$out_checksum" ]]; then 80*c9539b89SMartin Matuska log_fail "checksum mismatch ($data_checksum != $out_checksum)" 81*c9539b89SMartin Matuskafi 82*c9539b89SMartin Matuska 83*c9539b89SMartin Matuskalog_must rm -f $TESTDIR/out 84*c9539b89SMartin Matuskalog_must zfs destroy $TESTPOOL/gang 85*c9539b89SMartin Matuska 86*c9539b89SMartin Matuskalog_pass "Verified IO when file system is full and ganging." 87