1*084fd14fSBrian Behlendorf#!/bin/ksh -p
2*084fd14fSBrian Behlendorf#
3*084fd14fSBrian Behlendorf# CDDL HEADER START
4*084fd14fSBrian Behlendorf#
5*084fd14fSBrian Behlendorf# This file and its contents are supplied under the terms of the
6*084fd14fSBrian Behlendorf# Common Development and Distribution License ("CDDL"), version 1.0.
7*084fd14fSBrian Behlendorf# You may only use this file in accordance with the terms of version
8*084fd14fSBrian Behlendorf# 1.0 of the CDDL.
9*084fd14fSBrian Behlendorf#
10*084fd14fSBrian Behlendorf# A full copy of the text of the CDDL should have accompanied this
11*084fd14fSBrian Behlendorf# source.  A copy of the CDDL is also available via the Internet at
12*084fd14fSBrian Behlendorf# http://www.illumos.org/license/CDDL.
13*084fd14fSBrian Behlendorf#
14*084fd14fSBrian Behlendorf# CDDL HEADER END
15*084fd14fSBrian Behlendorf#
16*084fd14fSBrian Behlendorf
17*084fd14fSBrian Behlendorf#
18*084fd14fSBrian Behlendorf# Copyright (c) 2019 by Tim Chase. All rights reserved.
19*084fd14fSBrian Behlendorf# Copyright (c) 2019 Lawrence Livermore National Security, LLC.
20*084fd14fSBrian Behlendorf# Copyright 2019 Joyent, Inc.
21*084fd14fSBrian Behlendorf#
22*084fd14fSBrian Behlendorf
23*084fd14fSBrian Behlendorf. $STF_SUITE/include/libtest.shlib
24*084fd14fSBrian Behlendorf. $STF_SUITE/tests/functional/cli_root/zpool_initialize/zpool_initialize.kshlib
25*084fd14fSBrian Behlendorf. $STF_SUITE/tests/functional/cli_root/zpool_trim/zpool_trim.kshlib
26*084fd14fSBrian Behlendorf
27*084fd14fSBrian Behlendorf#
28*084fd14fSBrian Behlendorf# DESCRIPTION:
29*084fd14fSBrian Behlendorf# After trimming, the disk is actually trimmed.
30*084fd14fSBrian Behlendorf#
31*084fd14fSBrian Behlendorf# STRATEGY:
32*084fd14fSBrian Behlendorf# 1. Create a one-disk pool using a sparse file.
33*084fd14fSBrian Behlendorf# 2. Initialize the pool and verify the file vdev is no longer sparse.
34*084fd14fSBrian Behlendorf# 3. Trim the pool and verify the file vdev is again sparse.
35*084fd14fSBrian Behlendorf#
36*084fd14fSBrian Behlendorf
37*084fd14fSBrian Behlendorffunction cleanup
38*084fd14fSBrian Behlendorf{
39*084fd14fSBrian Behlendorf	if poolexists $TESTPOOL; then
40*084fd14fSBrian Behlendorf		destroy_pool $TESTPOOL
41*084fd14fSBrian Behlendorf	fi
42*084fd14fSBrian Behlendorf
43*084fd14fSBrian Behlendorf        if [[ -d "$TESTDIR" ]]; then
44*084fd14fSBrian Behlendorf                rm -rf "$TESTDIR"
45*084fd14fSBrian Behlendorf        fi
46*084fd14fSBrian Behlendorf
47*084fd14fSBrian Behlendorf	log_must set_tunable32 zfs_trim_extent_bytes_min $trim_extent_bytes_min
48*084fd14fSBrian Behlendorf}
49*084fd14fSBrian Behlendorflog_onexit cleanup
50*084fd14fSBrian Behlendorf
51*084fd14fSBrian BehlendorfLARGESIZE=$((MINVDEVSIZE * 4))
52*084fd14fSBrian BehlendorfLARGEFILE="$TESTDIR/largefile"
53*084fd14fSBrian Behlendorf
54*084fd14fSBrian Behlendorf# Reduce trim size to allow for tighter tolerance below when checking.
55*084fd14fSBrian Behlendorftypeset trim_extent_bytes_min=$(get_tunable zfs_trim_extent_bytes_min)
56*084fd14fSBrian Behlendorflog_must set_tunable32 zfs_trim_extent_bytes_min 4096
57*084fd14fSBrian Behlendorf
58*084fd14fSBrian Behlendorflog_must mkdir "$TESTDIR"
59*084fd14fSBrian Behlendorflog_must truncate -s $LARGESIZE "$LARGEFILE"
60*084fd14fSBrian Behlendorflog_must zpool create $TESTPOOL "$LARGEFILE"
61*084fd14fSBrian Behlendorf
62*084fd14fSBrian Behlendorforiginal_size=$(du "$LARGEFILE" | cut -f1)
63*084fd14fSBrian Behlendorforiginal_size=$((original_size * 512))
64*084fd14fSBrian Behlendorf
65*084fd14fSBrian Behlendorflog_must zpool initialize $TESTPOOL
66*084fd14fSBrian Behlendorf
67*084fd14fSBrian Behlendorfwhile [[ "$(initialize_progress $TESTPOOL $LARGEFILE)" -lt "100" ]]; do
68*084fd14fSBrian Behlendorf        sleep 0.5
69*084fd14fSBrian Behlendorfdone
70*084fd14fSBrian Behlendorf
71*084fd14fSBrian Behlendorfnew_size=$(du "$LARGEFILE" | cut -f1)
72*084fd14fSBrian Behlendorfnew_size=$((new_size * 512))
73*084fd14fSBrian Behlendorflog_must test $new_size -gt $((8 * 1024 * 1024))
74*084fd14fSBrian Behlendorf
75*084fd14fSBrian Behlendorflog_must zpool trim $TESTPOOL
76*084fd14fSBrian Behlendorf
77*084fd14fSBrian Behlendorfwhile [[ "$(trim_progress $TESTPOOL $LARGEFILE)" -lt "100" ]]; do
78*084fd14fSBrian Behlendorf        sleep 0.5
79*084fd14fSBrian Behlendorfdone
80*084fd14fSBrian Behlendorf
81*084fd14fSBrian Behlendorfnew_size=$(du "$LARGEFILE" | cut -f1)
82*084fd14fSBrian Behlendorfnew_size=$((new_size * 512))
83*084fd14fSBrian Behlendorflog_must within_tolerance $new_size $original_size $((128 * 1024 * 1024))
84*084fd14fSBrian Behlendorf
85*084fd14fSBrian Behlendorflog_pass "Trimmed appropriate amount of disk space"
86