summaryrefslogtreecommitdiff
path: root/052
blob: d7d64416e70845ec738decb683ee242756c5d473 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#! /bin/sh
# XFS QA Test No. 052
#
# Ensure that quota(1) displays blocksizes matching ondisk dquots.
#
# MOUNT_OPTIONS can be set to grpquota to test group quota,
# defaults to usrquota if MOUNT_OPTIONS is not set.
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
# 
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
# 
# This program is distributed in the hope that it would be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like.  Any license provided herein, whether implied or
# otherwise, applies only to this software file.  Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
# 
# You should have received a copy of the GNU General Public License along
# with this program; if not, write the Free Software Foundation, Inc., 59
# Temple Place - Suite 330, Boston MA 02111-1307, USA.
# 
# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
# Mountain View, CA  94043, or:
# 
# http://www.sgi.com 
# 
# For further information regarding this notice, see: 
# 
# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
#-----------------------------------------------------------------------
#
# creator
owner=nathans@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1	# failure is the default!

# get standard environment, filters and checks
. ./common.rc
. ./common.filter
. ./common.quota

_cleanup()
{
	umount $SCRATCH_MNT 2>/dev/null
	rm -f $tmp.*
}
trap "_cleanup; exit \$status" 0 1 2 3 15
rm -f $seq.full

_require_scratch
_require_quota

# setup a default run
if [ -z "$MOUNT_OPTIONS" ]; then
        MOUNT_OPTIONS="-o usrquota"; export MOUNT_OPTIONS
fi

# real QA test starts here
_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs
cat $tmp.mkfs >>$seq.full
chmod a+w $seq.full     # arbitrary users will write here

# keep the blocksize from mkfs ($dbsize)
. $tmp.mkfs

_qmount

# setup user/group to test
if src/feature -U $SCRATCH_DEV ; then
	type=u ; eval `_choose_uid`
elif src/feature -G $SCRATCH_DEV ; then
	type=g ; eval `_choose_gid`
else
	_notrun "No quota support at mount time"
fi

# create 100 (fs-blocksize) blocks
_file_as_id $SCRATCH_MNT/foo $id $type $dbsize 220
sync

# set limit at 1001 (1k) blocks
setquota -$type $id 1001 1001 10 10 $SCRATCH_DEV

# cross check blks, softblks, hardblks <-> quota, xfs_db
quota -$type $id | tee -a $seq.full | perl -ne '
	if (m,^\s*'$SCRATCH_DEV'\s+(\d+)\s+(\d+)\s+(\d+), ||
		($next == 1 && m,^\s+(\d+)\s+(\d+)\s+(\d+),)) {
		print "used_blocks=", $1, "\n";
		print "soft_blocks=", $2, "\n";
		print "hard_blocks=", $3, "\n";
		$next = 0;
	}
	elsif (m,^\s*'$SCRATCH_DEV',) {		# devfs (long) names
		$next = 1;
	}' | LC_COLLATE=POSIX sort >$tmp.quota

echo ===quota output >> $seq.full
cat $tmp.quota >> $seq.full
[ ! -s $tmp.quota ] && echo "warning: quota output file is empty"

umount $SCRATCH_MNT

# note - does (insitu) conversion from fs blocks to 1K blocks
xfs_db -rc "dquot -$type $id" -c p $SCRATCH_DEV | tee -a $seq.full | perl -ne '
	if (/^diskdq.bcount = (\d+)$/) {
		 print "used_blocks=", $1 * '$dbsize' / 1024, "\n";
	}
	elsif (/^diskdq.blk_hardlimit = (\d+)$/) {
		 print "hard_blocks=", $1 * '$dbsize' / 1024, "\n";
	}
	elsif (/^diskdq.blk_softlimit = (\d+)$/) {
		print "soft_blocks=", $1 * '$dbsize' / 1024, "\n";
	}' | LC_COLLATE=POSIX sort >$tmp.xfs_db

echo ===xfs_db output >> $seq.full
cat $tmp.xfs_db >> $seq.full
[ ! -s $tmp.xfs_db ] && echo "warning: xfs_db output file is empty"

echo Comparing out of quota and xfs_db
diff $tmp.quota $tmp.xfs_db 
[ $? -eq 0 ] && echo OK.

# success, all done
status=0
exit