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