]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - zfs/tests/zfs-tests/tests/functional/snapused/snapused.kshlib
UBUNTU: SAUCE: Update zfs to e02aaf17f15ad274fa1f24c9c826f1477911ea3f
[mirror_ubuntu-zesty-kernel.git] / zfs / tests / zfs-tests / tests / functional / snapused / snapused.kshlib
1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
7 #
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21
22 #
23 # Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26
27 #
28 # Copyright (c) 2013 by Delphix. All rights reserved.
29 #
30
31 . $STF_SUITE/include/libtest.shlib
32
33 export USEDTEST=$TESTPOOL/$TESTFS/usedtest-snapused
34
35 function _check_used # dataset
36 {
37 typeset dataset=$1
38
39 if [[ "$(get_prop type $dataset)" == "snapshot" ]]; then
40 return
41 fi
42
43 used=$(get_prop used $dataset)
44 usedbychildren=$(get_prop usedbychildren $dataset)
45 usedbydataset=$(get_prop usedbydataset $dataset)
46 usedbyrefreservation=$(get_prop usedbyrefreservation $dataset)
47 usedbysnapshots=$(get_prop usedbysnapshots $dataset)
48 ((used_sum = usedbychildren + usedbydataset + \
49 usedbyrefreservation + usedbysnapshots))
50 if ((used != used_sum)); then
51 log_fail "$dataset: used($used) is not the sum($used_sum) of usedby*"
52 fi
53 }
54
55 function check_used # dataset
56 {
57 typeset dataset=$1
58 for child in $($ZFS list -rH -t filesystem,volume -o name $dataset)
59 do
60 _check_used $child
61 done
62 }
63
64 function check_usedbychildren # dataset
65 {
66 typeset dataset=$1
67 typeset -i usedbychildren_sum=0
68 typeset -i parent_usedbychildren=0
69 for child in $($ZFS list -rH -t filesystem,volume -o name $dataset)
70 do
71 if [[ "$(get_prop type $child)" == "snapshot" ]]; then
72 continue
73 fi
74
75 # parent
76 if [[ "$child" == "$dataset" ]]; then
77 parent_usedbychildren=$(get_prop usedbychildren $child)
78 else #child
79 reservation=$(get_prop reservation $child)
80 used=$(get_prop used $child)
81 if ((reservation > used)); then
82 ((usedbychildren_sum += reservation))
83 else
84 ((usedbychildren_sum += used))
85 fi
86 fi
87 done
88
89 if ((parent_usedbychildren != usedbychildren_sum)); then
90 log_fail "$dataset: usedbychildren($parent_usedbychildren) is not the sum($usedbychildren_sum) of used by children"
91 fi
92 }
93
94 function _check_usedbydataset # dataset
95 {
96 typeset dataset=$1
97 if [[ "$(get_prop type $dataset)" == "snapshot" ]]; then
98 return
99 fi
100
101 usedbydataset=$(get_prop usedbydataset $dataset)
102 referenced=$(get_prop referenced $dataset)
103
104 is_cloned=$(get_prop is:cloned $dataset)
105
106 if [[ "$is_cloned" == "yes" ]]; then
107 if ((usedbydataset > referenced)); then
108 log_fail "$dataset(cloned): usedbydataset($usedbydataset) is more than referenced($referenced)"
109 fi
110 else
111 #
112 # if non-clones, should usedbydataset == referenced
113 #
114 if ((usedbydataset != referenced)); then
115 log_fail "$dataset: usedbydataset($usedbydataset) is not equal to referenced($referenced)"
116 fi
117 fi
118 }
119
120 function check_usedbydataset # dataset
121 {
122 typeset dataset=$1
123 for child in $($ZFS list -rH -t filesystem,volume -o name $dataset)
124 do
125 _check_usedbydataset $child
126 done
127 }
128
129 function _check_usedbyrefreservation # dataset
130 {
131 typeset dataset=$1
132 if [[ "$(get_prop type $dataset)" == "snapshot" ]]; then
133 return
134 fi
135
136 usedbyrefreservation=$(get_prop usedbyrefreservation $dataset)
137 referenced=$(get_prop referenced $dataset)
138 refreservation=$(get_prop refreservation $dataset)
139 ((diff_ref = refreservation - referenced))
140 if ((usedbyrefreservation > refreservation || \
141 usedbyrefreservation < diff_ref)); then
142 log_fail "$dataset: usedbyrefreservation($usedbyrefreservation) checking is not ok"
143 fi
144 }
145
146 function check_usedbyrefreservation # dataset
147 {
148 typeset dataset=$1
149 for child in $($ZFS list -rH -t filesystem,volume -o name $dataset)
150 do
151 _check_usedbyrefreservation $child
152 done
153 }
154
155 function check_usedbysnapshots # dataset
156 {
157 typeset dataset=$1
158 typeset -i usedbysnapshots_sum=0
159 typeset -i parent_usedbysnapshots=0
160 for child in $($ZFS list -rH -t filesystem,volume,snapshot -o name $dataset)
161 do
162 # parent
163 if [[ "$child" == "$dataset" ]]; then
164 parent_usedbysnapshots=$(get_prop usedbysnapshots $child)
165 continue
166 fi
167
168 if [[ "$(get_prop type $child)" != "snapshot" ]]; then
169 continue
170 fi
171
172 if [[ "$child" != "$dataset@"* ]]; then
173 continue
174 fi
175
176 # snapshot
177 used=$(get_prop used $child)
178 ((usedbysnapshots_sum += used))
179 done
180
181 if ((parent_usedbysnapshots < usedbysnapshots_sum)); then
182 log_fail "$dataset: usedbysnapshots($parent_usedbysnapshots) is not more than or equal to" \
183 "the sum($usedbysnapshots_sum) of used of snapshots"
184 fi
185 }