]>
Commit | Line | Data |
---|---|---|
6bb24f4d BB |
1 | #! /bin/ksh -p |
2 | # | |
3 | # CDDL HEADER START | |
4 | # | |
5 | # The contents of this file are subject to the terms of the | |
6 | # Common Development and Distribution License (the "License"). | |
7 | # You may not use this file except in compliance with the License. | |
8 | # | |
9 | # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | |
10 | # or http://www.opensolaris.org/os/licensing. | |
11 | # See the License for the specific language governing permissions | |
12 | # and limitations under the License. | |
13 | # | |
14 | # When distributing Covered Code, include this CDDL HEADER in each | |
15 | # file and include the License file at usr/src/OPENSOLARIS.LICENSE. | |
16 | # If applicable, add the following below this CDDL HEADER, with the | |
17 | # fields enclosed by brackets "[]" replaced with your own identifying | |
18 | # information: Portions Copyright [yyyy] [name of copyright owner] | |
19 | # | |
20 | # CDDL HEADER END | |
21 | # | |
22 | ||
23 | # | |
24 | # Copyright 2009 Sun Microsystems, Inc. All rights reserved. | |
25 | # Use is subject to license terms. | |
26 | # | |
27 | ||
28 | # | |
c1d9abf9 | 29 | # Copyright (c) 2012, 2016 by Delphix. All rights reserved. |
d441e85d | 30 | # Copyright (c) 2018 by Lawrence Livermore National Security, LLC. |
6bb24f4d BB |
31 | # |
32 | ||
d441e85d | 33 | |
6bb24f4d BB |
34 | . $STF_SUITE/include/libtest.shlib |
35 | . $STF_SUITE/tests/functional/cli_root/zpool_expand/zpool_expand.cfg | |
36 | ||
37 | # | |
38 | # Description: | |
39 | # Once set zpool autoexpand=off, zpool can *NOT* autoexpand by | |
d441e85d | 40 | # Dynamic VDEV Expansion |
6bb24f4d BB |
41 | # |
42 | # | |
43 | # STRATEGY: | |
d441e85d BB |
44 | # 1) Create three vdevs (loopback, scsi_debug, and file) |
45 | # 2) Create pool by using the different devices and set autoexpand=off | |
46 | # 3) Expand each device as appropriate | |
47 | # 4) Check that the pool size is not expanded | |
48 | # | |
49 | # NOTE: Three different device types are used in this test to verify | |
50 | # expansion of non-partitioned block devices (loopback), partitioned | |
51 | # block devices (scsi_debug), and non-disk file vdevs. ZFS volumes | |
52 | # are not used in order to avoid a possible lock inversion when | |
53 | # layering pools on zvols. | |
6bb24f4d BB |
54 | # |
55 | ||
56 | verify_runnable "global" | |
57 | ||
58 | function cleanup | |
59 | { | |
d441e85d BB |
60 | poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 |
61 | ||
62 | if losetup -a | grep -q $DEV1; then | |
63 | losetup -d $DEV1 | |
64 | fi | |
65 | ||
66 | rm -f $FILE_LO $FILE_RAW | |
67 | ||
68 | block_device_wait | |
69 | unload_scsi_debug | |
6bb24f4d BB |
70 | } |
71 | ||
72 | log_onexit cleanup | |
73 | ||
d441e85d | 74 | log_assert "zpool can not expand if set autoexpand=off after vdev expansion" |
6bb24f4d BB |
75 | |
76 | for type in " " mirror raidz raidz2; do | |
d441e85d BB |
77 | log_note "Setting up loopback, scsi_debug, and file vdevs" |
78 | log_must truncate -s $org_size $FILE_LO | |
79 | DEV1=$(losetup -f) | |
80 | log_must losetup $DEV1 $FILE_LO | |
81 | ||
82 | load_scsi_debug $org_size_mb 1 1 1 '512b' | |
83 | block_device_wait | |
84 | DEV2=$(get_debug_device) | |
85 | ||
86 | log_must truncate -s $org_size $FILE_RAW | |
87 | DEV3=$FILE_RAW | |
88 | ||
89 | # The -f is required since we're mixing disk and file vdevs. | |
90 | log_must zpool create -f $TESTPOOL1 $type $DEV1 $DEV2 $DEV3 | |
6bb24f4d BB |
91 | |
92 | typeset autoexp=$(get_pool_prop autoexpand $TESTPOOL1) | |
93 | if [[ $autoexp != "off" ]]; then | |
d441e85d | 94 | log_fail "zpool $TESTPOOL1 autoexpand should be off but is " \ |
6bb24f4d BB |
95 | "$autoexp" |
96 | fi | |
97 | ||
98 | typeset prev_size=$(get_pool_prop size $TESTPOOL1) | |
99 | ||
6bb24f4d | 100 | |
d441e85d BB |
101 | # Expand each device as appropriate being careful to add an artificial |
102 | # delay to ensure we get a single history entry for each. This makes | |
103 | # is easier to verify each expansion for the striped pool case, since | |
104 | # they will not be merged in to a single larger expansion. | |
105 | log_note "Expanding loopback, scsi_debug, and file vdevs" | |
106 | log_must truncate -s $exp_size $FILE_LO | |
107 | log_must losetup -c $DEV1 | |
108 | sleep 3 | |
109 | ||
110 | echo "2" > /sys/bus/pseudo/drivers/scsi_debug/virtual_gb | |
111 | echo "1" > /sys/class/block/$DEV2/device/rescan | |
112 | block_device_wait | |
113 | sleep 3 | |
114 | ||
115 | log_must truncate -s $exp_size $FILE_RAW | |
116 | ||
117 | # This is far longer than we should need to wait, but let's be sure. | |
118 | sleep 5 | |
6bb24f4d BB |
119 | |
120 | # check for zpool history for the pool size expansion | |
c1d9abf9 JWK |
121 | zpool history -il $TESTPOOL1 | grep "pool '$TESTPOOL1' size:" | \ |
122 | grep "vdev online" >/dev/null 2>&1 | |
6bb24f4d BB |
123 | |
124 | if [[ $? -eq 0 ]]; then | |
d441e85d | 125 | log_fail "pool $TESTPOOL1 is not autoexpand after vdev " \ |
6bb24f4d BB |
126 | "expansion" |
127 | fi | |
128 | ||
129 | typeset expand_size=$(get_pool_prop size $TESTPOOL1) | |
130 | ||
131 | if [[ "$prev_size" != "$expand_size" ]]; then | |
d441e85d | 132 | log_fail "pool $TESTPOOL1 size changed after vdev expansion" |
6bb24f4d BB |
133 | fi |
134 | ||
d441e85d | 135 | cleanup |
6bb24f4d BB |
136 | done |
137 | ||
d441e85d | 138 | log_pass "zpool can not autoexpand if autoexpand=off after vdev expansion" |