2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2013 Fusion IO. All Rights Reserved.
7 # Test the basic functionality of qgroups
10 seqres=$RESULT_DIR/$seq
11 echo "QA output created by $seq"
15 status=1 # failure is the default!
16 trap "_cleanup; exit \$status" 0 1 2 3 15
24 # get standard environment, filters and checks
31 _require_btrfs_qgroup_report
35 # Test to make sure we can actually turn it on and it makes sense
38 echo "=== basic test ===" >> $seqres.full
39 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
40 _run_btrfs_util_prog quota enable $SCRATCH_MNT/a
41 _run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
42 subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
43 $BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid >> \
45 [ $? -eq 0 ] || _fail "couldn't find our subvols quota group"
46 run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
48 _run_btrfs_util_prog subvolume snapshot $SCRATCH_MNT/a \
51 # the shared values of both the original subvol and snapshot should
53 a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
54 a_shared=$(echo $a_shared | awk '{ print $2 }')
55 echo "subvol a id=$subvolid" >> $seqres.full
56 subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
57 echo "subvol b id=$subvolid" >> $seqres.full
58 b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
59 b_shared=$(echo $b_shared | awk '{ print $2 }')
60 $BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT >> $seqres.full
61 [ $b_shared -eq $a_shared ] || _fail "shared values don't match"
64 #enable quotas, do some work, check our values and then rescan and make sure we
65 #come up with the same answer
68 echo "=== rescan test ===" >> $seqres.full
69 # first with a blank subvol
70 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
71 _run_btrfs_util_prog quota enable $SCRATCH_MNT/a
72 subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
73 run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
76 output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
77 echo "qgroup values before rescan: $output" >> $seqres.full
78 refer=$(echo $output | awk '{ print $2 }')
79 excl=$(echo $output | awk '{ print $3 }')
80 _run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
81 output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
82 echo "qgroup values after rescan: $output" >> $seqres.full
83 [ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
84 _fail "reference values don't match after rescan"
85 [ $excl -eq $(echo $output | awk '{ print $3 }') ] || \
86 _fail "exclusive values don't match after rescan"
89 #basic exceed limit testing
92 echo "=== limit exceed test ===" >> $seqres.full
93 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
94 _run_btrfs_util_prog quota enable $SCRATCH_MNT
95 subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
96 _run_btrfs_util_prog qgroup limit 5M 0/$subvolid $SCRATCH_MNT
97 _ddt of=$SCRATCH_MNT/a/file bs=10M count=1 >> $seqres.full 2>&1
98 [ $? -ne 0 ] || _fail "quota should have limited us"
101 #basic noexceed limit testing
102 _limit_test_noexceed()
104 echo "=== limit not exceed test ===" >> $seqres.full
105 _run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
106 _run_btrfs_util_prog quota enable $SCRATCH_MNT
107 subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
108 _run_btrfs_util_prog qgroup limit 5M 0/$subvolid $SCRATCH_MNT
109 _ddt of=$SCRATCH_MNT/a/file bs=4M count=1 >> $seqres.full 2>&1
110 [ $? -eq 0 ] || _fail "should have been allowed to write"
113 units=`_btrfs_qgroup_units`
115 _scratch_mkfs > /dev/null 2>&1
121 _scratch_mkfs > /dev/null 2>&1
127 _scratch_mkfs > /dev/null 2>&1
133 _scratch_mkfs > /dev/null 2>&1
138 echo "Silence is golden"