1*57718be8SEnji Cooper# $NetBSD: t_quotalimit.sh,v 1.4 2012/01/18 20:51:23 bouyer Exp $ 2*57718be8SEnji Cooper# 3*57718be8SEnji Cooper# Copyright (c) 2011 Manuel Bouyer 4*57718be8SEnji Cooper# All rights reserved. 5*57718be8SEnji Cooper# 6*57718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without 7*57718be8SEnji Cooper# modification, are permitted provided that the following conditions 8*57718be8SEnji Cooper# are met: 9*57718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10*57718be8SEnji Cooper# notice, this list of conditions and the following disclaimer. 11*57718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12*57718be8SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13*57718be8SEnji Cooper# documentation and/or other materials provided with the distribution. 14*57718be8SEnji Cooper# 15*57718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16*57718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17*57718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18*57718be8SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19*57718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*57718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*57718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*57718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*57718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*57718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*57718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26*57718be8SEnji Cooper# 27*57718be8SEnji Cooper 28*57718be8SEnji Cooperfor e in le; do 29*57718be8SEnji Cooper for v in 1; do 30*57718be8SEnji Cooper for q in "user" "group"; do 31*57718be8SEnji Cooper test_case_root limit_${e}_${v}_${q} limit_quota \ 32*57718be8SEnji Cooper "hit hard limit quota with ${q} enabled" -b ${e} ${v} ${q} 33*57718be8SEnji Cooper test_case_root limit_${e}_${v}_${q}_log limit_quota \ 34*57718be8SEnji Cooper "hit hard limit quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 35*57718be8SEnji Cooper test_case_root slimit_${e}_${v}_${q} limit_softquota \ 36*57718be8SEnji Cooper "hit soft limit quota with ${q} enabled after grace time" \ 37*57718be8SEnji Cooper -b ${e} ${v} ${q} 38*57718be8SEnji Cooper test_case_root inolimit_${e}_${v}_${q} limit_iquota \ 39*57718be8SEnji Cooper "hit hard limit ino quota with ${q} enabled" -b ${e} ${v} ${q} 40*57718be8SEnji Cooper test_case_root inolimit_${e}_${v}_${q}_log limit_iquota \ 41*57718be8SEnji Cooper "hit hard limit ino quota with ${q} enabled, WAPBL" -bl ${e} ${v} ${q} 42*57718be8SEnji Cooper test_case_root sinolimit_${e}_${v}_${q} limit_softiquota \ 43*57718be8SEnji Cooper "hit soft limit ino quota with ${q} enabled after grace time" \ 44*57718be8SEnji Cooper -b ${e} ${v} ${q} 45*57718be8SEnji Cooper test_case_root herit_defq_${e}_${v}_${q} inherit_defaultquota \ 46*57718be8SEnji Cooper "new id herit from default for ${q} quota" -b ${e} ${v} ${q} 47*57718be8SEnji Cooper test_case_root herit_defq_${e}_${v}_${q}_log inherit_defaultquota \ 48*57718be8SEnji Cooper "new id herit from default for ${q} quota, WAPBL" -bl ${e} ${v} ${q} 49*57718be8SEnji Cooper test_case_root herit_idefq_${e}_${v}_${q}_log inherit_defaultiquota \ 50*57718be8SEnji Cooper "new id herit from default for ${q} ino quota, WAPBL" -bl ${e} ${v} ${q} 51*57718be8SEnji Cooper done 52*57718be8SEnji Cooper done 53*57718be8SEnji Cooperdone 54*57718be8SEnji Cooper 55*57718be8SEnji Cooperlimit_quota() 56*57718be8SEnji Cooper{ 57*57718be8SEnji Cooper create_ffs_server $* 58*57718be8SEnji Cooper local q=$4 59*57718be8SEnji Cooper local expect 60*57718be8SEnji Cooper local id=1 61*57718be8SEnji Cooper 62*57718be8SEnji Cooper case ${q} in 63*57718be8SEnji Cooper user) 64*57718be8SEnji Cooper expect=u 65*57718be8SEnji Cooper fail=g 66*57718be8SEnji Cooper ;; 67*57718be8SEnji Cooper group) 68*57718be8SEnji Cooper expect=g 69*57718be8SEnji Cooper fail=u 70*57718be8SEnji Cooper ;; 71*57718be8SEnji Cooper both) 72*57718be8SEnji Cooper expect="u g" 73*57718be8SEnji Cooper fail="" 74*57718be8SEnji Cooper ;; 75*57718be8SEnji Cooper *) 76*57718be8SEnji Cooper atf_fail "wrong quota type" 77*57718be8SEnji Cooper ;; 78*57718be8SEnji Cooper esac 79*57718be8SEnji Cooper 80*57718be8SEnji Cooper for q in ${expect} ; do 81*57718be8SEnji Cooper atf_check -s exit:0 \ 82*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 83*57718be8SEnji Cooper -t 2h/2h ${id} 84*57718be8SEnji Cooper done 85*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 86*57718be8SEnji Cooper 87*57718be8SEnji Cooper #now start the server which does the limits tests 88*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 89*57718be8SEnji Cooper-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 90*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 91*57718be8SEnji Cooper for q in ${expect} ; do 92*57718be8SEnji Cooper atf_check -s exit:0 \ 93*57718be8SEnji Cooper -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 94*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 95*57718be8SEnji Cooper atf_check -s exit:0 \ 96*57718be8SEnji Cooper -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 97*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 98*57718be8SEnji Cooper done 99*57718be8SEnji Cooper rump_quota_shutdown 100*57718be8SEnji Cooper} 101*57718be8SEnji Cooper 102*57718be8SEnji Cooperlimit_softquota() 103*57718be8SEnji Cooper{ 104*57718be8SEnji Cooper create_ffs_server $* 105*57718be8SEnji Cooper local q=$4 106*57718be8SEnji Cooper local expect 107*57718be8SEnji Cooper local id=1 108*57718be8SEnji Cooper 109*57718be8SEnji Cooper case ${q} in 110*57718be8SEnji Cooper user) 111*57718be8SEnji Cooper expect=u 112*57718be8SEnji Cooper fail=g 113*57718be8SEnji Cooper ;; 114*57718be8SEnji Cooper group) 115*57718be8SEnji Cooper expect=g 116*57718be8SEnji Cooper fail=u 117*57718be8SEnji Cooper ;; 118*57718be8SEnji Cooper both) 119*57718be8SEnji Cooper expect="u g" 120*57718be8SEnji Cooper fail="" 121*57718be8SEnji Cooper ;; 122*57718be8SEnji Cooper *) 123*57718be8SEnji Cooper atf_fail "wrong quota type" 124*57718be8SEnji Cooper ;; 125*57718be8SEnji Cooper esac 126*57718be8SEnji Cooper 127*57718be8SEnji Cooper for q in ${expect} ; do 128*57718be8SEnji Cooper atf_check -s exit:0 \ 129*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 130*57718be8SEnji Cooper -t 1s/1d ${id} 131*57718be8SEnji Cooper done 132*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 133*57718be8SEnji Cooper 134*57718be8SEnji Cooper #now start the server which does the limits tests 135*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 136*57718be8SEnji Cooper-e match:'test 1: write beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 137*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 1 ${IMG} ${RUMP_SERVER} 138*57718be8SEnji Cooper for q in ${expect} ; do 139*57718be8SEnji Cooper atf_check -s exit:0 \ 140*57718be8SEnji Cooper -o match:'/mnt 2560 B\* 2048 B 3072 B none 2 4 6 ' \ 141*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 142*57718be8SEnji Cooper atf_check -s exit:0 \ 143*57718be8SEnji Cooper -o match:'daemon \+- 2 2 3 none 2 4 6' \ 144*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 145*57718be8SEnji Cooper done 146*57718be8SEnji Cooper rump_quota_shutdown 147*57718be8SEnji Cooper} 148*57718be8SEnji Cooper 149*57718be8SEnji Cooperlimit_iquota() 150*57718be8SEnji Cooper{ 151*57718be8SEnji Cooper create_ffs_server $* 152*57718be8SEnji Cooper local q=$4 153*57718be8SEnji Cooper local expect 154*57718be8SEnji Cooper local id=1 155*57718be8SEnji Cooper 156*57718be8SEnji Cooper case ${q} in 157*57718be8SEnji Cooper user) 158*57718be8SEnji Cooper expect=u 159*57718be8SEnji Cooper fail=g 160*57718be8SEnji Cooper ;; 161*57718be8SEnji Cooper group) 162*57718be8SEnji Cooper expect=g 163*57718be8SEnji Cooper fail=u 164*57718be8SEnji Cooper ;; 165*57718be8SEnji Cooper both) 166*57718be8SEnji Cooper expect="u g" 167*57718be8SEnji Cooper fail="" 168*57718be8SEnji Cooper ;; 169*57718be8SEnji Cooper *) 170*57718be8SEnji Cooper atf_fail "wrong quota type" 171*57718be8SEnji Cooper ;; 172*57718be8SEnji Cooper esac 173*57718be8SEnji Cooper 174*57718be8SEnji Cooper for q in ${expect} ; do 175*57718be8SEnji Cooper atf_check -s exit:0 \ 176*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 177*57718be8SEnji Cooper -t 2h/2h ${id} 178*57718be8SEnji Cooper done 179*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 180*57718be8SEnji Cooper 181*57718be8SEnji Cooper #now start the server which does the limits tests 182*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 183*57718be8SEnji Cooper-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 184*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 185*57718be8SEnji Cooper for q in ${expect} ; do 186*57718be8SEnji Cooper atf_check -s exit:0 \ 187*57718be8SEnji Cooper -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 188*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 189*57718be8SEnji Cooper atf_check -s exit:0 \ 190*57718be8SEnji Cooper -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 191*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 192*57718be8SEnji Cooper done 193*57718be8SEnji Cooper rump_quota_shutdown 194*57718be8SEnji Cooper} 195*57718be8SEnji Cooper 196*57718be8SEnji Cooperlimit_softiquota() 197*57718be8SEnji Cooper{ 198*57718be8SEnji Cooper create_ffs_server $* 199*57718be8SEnji Cooper local q=$4 200*57718be8SEnji Cooper local expect 201*57718be8SEnji Cooper local id=1 202*57718be8SEnji Cooper 203*57718be8SEnji Cooper case ${q} in 204*57718be8SEnji Cooper user) 205*57718be8SEnji Cooper expect=u 206*57718be8SEnji Cooper fail=g 207*57718be8SEnji Cooper ;; 208*57718be8SEnji Cooper group) 209*57718be8SEnji Cooper expect=g 210*57718be8SEnji Cooper fail=u 211*57718be8SEnji Cooper ;; 212*57718be8SEnji Cooper both) 213*57718be8SEnji Cooper expect="u g" 214*57718be8SEnji Cooper fail="" 215*57718be8SEnji Cooper ;; 216*57718be8SEnji Cooper *) 217*57718be8SEnji Cooper atf_fail "wrong quota type" 218*57718be8SEnji Cooper ;; 219*57718be8SEnji Cooper esac 220*57718be8SEnji Cooper 221*57718be8SEnji Cooper for q in ${expect} ; do 222*57718be8SEnji Cooper atf_check -s exit:0 \ 223*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 224*57718be8SEnji Cooper -t 1d/1s ${id} 225*57718be8SEnji Cooper done 226*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 227*57718be8SEnji Cooper 228*57718be8SEnji Cooper #now start the server which does the limits tests 229*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 230*57718be8SEnji Cooper-e match:'test 3: create file beyond the soft limit after grace time returned 69: Disc quota exceeded' \ 231*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 3 ${IMG} ${RUMP_SERVER} 232*57718be8SEnji Cooper for q in ${expect} ; do 233*57718be8SEnji Cooper atf_check -s exit:0 \ 234*57718be8SEnji Cooper -o match:'/mnt 2560 B 2048 K 3072 K 5 \* 4 6 none' \ 235*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 236*57718be8SEnji Cooper atf_check -s exit:0 \ 237*57718be8SEnji Cooper -o match:'daemon -\+ 2 2048 3072 5 4 6 none' \ 238*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 239*57718be8SEnji Cooper done 240*57718be8SEnji Cooper rump_quota_shutdown 241*57718be8SEnji Cooper} 242*57718be8SEnji Cooper 243*57718be8SEnji Cooperinherit_defaultquota() 244*57718be8SEnji Cooper{ 245*57718be8SEnji Cooper create_ffs_server $* 246*57718be8SEnji Cooper local q=$4 247*57718be8SEnji Cooper local expect 248*57718be8SEnji Cooper local id=1 249*57718be8SEnji Cooper 250*57718be8SEnji Cooper case ${q} in 251*57718be8SEnji Cooper user) 252*57718be8SEnji Cooper expect=u 253*57718be8SEnji Cooper fail=g 254*57718be8SEnji Cooper ;; 255*57718be8SEnji Cooper group) 256*57718be8SEnji Cooper expect=g 257*57718be8SEnji Cooper fail=u 258*57718be8SEnji Cooper ;; 259*57718be8SEnji Cooper both) 260*57718be8SEnji Cooper expect="u g" 261*57718be8SEnji Cooper fail="" 262*57718be8SEnji Cooper ;; 263*57718be8SEnji Cooper *) 264*57718be8SEnji Cooper atf_fail "wrong quota type" 265*57718be8SEnji Cooper ;; 266*57718be8SEnji Cooper esac 267*57718be8SEnji Cooper 268*57718be8SEnji Cooper for q in ${expect} ; do 269*57718be8SEnji Cooper atf_check -s exit:0 \ 270*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2k/4 -h3k/6 \ 271*57718be8SEnji Cooper -t 2h/2h -d 272*57718be8SEnji Cooper done 273*57718be8SEnji Cooper for q in ${expect} ; do 274*57718be8SEnji Cooper atf_check -s exit:0 \ 275*57718be8SEnji Cooper -o match:'Disk quotas for .*id 1\): none' \ 276*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 277*57718be8SEnji Cooper done 278*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 279*57718be8SEnji Cooper 280*57718be8SEnji Cooper #now start the server which does the limits tests 281*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 282*57718be8SEnji Cooper-e match:'test 0: write up to hard limit returned 69: Disc quota exceeded' \ 283*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 0 ${IMG} ${RUMP_SERVER} 284*57718be8SEnji Cooper for q in ${expect} ; do 285*57718be8SEnji Cooper atf_check -s exit:0 \ 286*57718be8SEnji Cooper -o match:'/mnt 3072 B\* 2048 B 3072 B 2:0 2 4 6 ' \ 287*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 288*57718be8SEnji Cooper atf_check -s exit:0 \ 289*57718be8SEnji Cooper -o match:'daemon \+- 3 2 3 2:0 2 4 6' \ 290*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 291*57718be8SEnji Cooper done 292*57718be8SEnji Cooper rump_quota_shutdown 293*57718be8SEnji Cooper} 294*57718be8SEnji Cooper 295*57718be8SEnji Cooperinherit_defaultiquota() 296*57718be8SEnji Cooper{ 297*57718be8SEnji Cooper create_ffs_server $* 298*57718be8SEnji Cooper local q=$4 299*57718be8SEnji Cooper local expect 300*57718be8SEnji Cooper local id=1 301*57718be8SEnji Cooper 302*57718be8SEnji Cooper case ${q} in 303*57718be8SEnji Cooper user) 304*57718be8SEnji Cooper expect=u 305*57718be8SEnji Cooper fail=g 306*57718be8SEnji Cooper ;; 307*57718be8SEnji Cooper group) 308*57718be8SEnji Cooper expect=g 309*57718be8SEnji Cooper fail=u 310*57718be8SEnji Cooper ;; 311*57718be8SEnji Cooper both) 312*57718be8SEnji Cooper expect="u g" 313*57718be8SEnji Cooper fail="" 314*57718be8SEnji Cooper ;; 315*57718be8SEnji Cooper *) 316*57718be8SEnji Cooper atf_fail "wrong quota type" 317*57718be8SEnji Cooper ;; 318*57718be8SEnji Cooper esac 319*57718be8SEnji Cooper 320*57718be8SEnji Cooper for q in ${expect} ; do 321*57718be8SEnji Cooper atf_check -s exit:0 \ 322*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt edquota -$q -s2m/4 -h3m/6 \ 323*57718be8SEnji Cooper -t 2h/2h -d 324*57718be8SEnji Cooper done 325*57718be8SEnji Cooper for q in ${expect} ; do 326*57718be8SEnji Cooper atf_check -s exit:0 \ 327*57718be8SEnji Cooper -o match:'Disk quotas for .*id 1\): none' \ 328*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -v ${id} 329*57718be8SEnji Cooper done 330*57718be8SEnji Cooper atf_check -s exit:0 rump.halt 331*57718be8SEnji Cooper 332*57718be8SEnji Cooper #now start the server which does the limits tests 333*57718be8SEnji Cooper atf_check -s exit:0 -o ignore \ 334*57718be8SEnji Cooper-e match:'test 2: create file up to hard limit returned 69: Disc quota exceeded' \ 335*57718be8SEnji Cooper $(atf_get_srcdir)/h_quota2_tests -b 2 ${IMG} ${RUMP_SERVER} 336*57718be8SEnji Cooper for q in ${expect} ; do 337*57718be8SEnji Cooper atf_check -s exit:0 \ 338*57718be8SEnji Cooper -o match:'/mnt 3072 B 2048 K 3072 K 6 \* 4 6 2:0' \ 339*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt quota -$q -h ${id} 340*57718be8SEnji Cooper atf_check -s exit:0 \ 341*57718be8SEnji Cooper -o match:'daemon -\+ 3 2048 3072 6 4 6 2:0' \ 342*57718be8SEnji Cooper env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -$q /mnt 343*57718be8SEnji Cooper done 344*57718be8SEnji Cooper rump_quota_shutdown 345*57718be8SEnji Cooper} 346