xfs/{263,106}: erase max warnings printout
[xfstests-dev.git] / tests / ext4 / 026
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2017 Google, Inc.  All Rights Reserved.
4 #
5 # FS QA Test 026
6 #
7 # Test for ea_inode feature in ext4. Without ea_inode feature, an extended
8 # attribute in ext4 cannot be larger than the fs block size. ea_inode feature
9 # allows storing xattr values in external inodes and so raises xattr value
10 # size limit to 64k.
11 #
12 seq=`basename $0`
13 seqres=$RESULT_DIR/$seq
14 echo "QA output created by $seq"
15
16 tmp=/tmp/$$
17 status=1        # failure is the default!
18 trap "_cleanup; exit \$status" 0 1 2 3 15
19
20 _cleanup()
21 {
22         rm -f $tmp.*
23 }
24
25 # get standard environment, filters and checks
26 . ./common/rc
27 . ./common/filter
28 . ./common/attr
29
30 # remove previous $seqres.full before test
31 rm -f $seqres.full
32
33 # real QA test starts here
34 _supported_fs ext4
35 _supported_os Linux
36 _require_scratch
37 _require_attrs
38 _require_scratch_ext4_feature "ea_inode"
39
40 _scratch_mkfs_ext4 -O ea_inode >/dev/null 2>&1
41 _scratch_mount
42
43 # Sets an extended attribute on a file.
44 attr_set()
45 {
46         local file=$1 name=$2 value=$3 tmp
47
48         if [[ "$value" != "" ]]; then
49                 $SETFATTR_PROG -n $name -v "$value" $file
50         else
51                 $SETFATTR_PROG -n $name $file
52         fi
53
54         tmp=$(_getfattr --absolute-names --only-values -n $name $file)
55         [[ "$tmp" == "$value" ]] || echo "unexpected value returned: $tmp"
56 }
57
58 # List attributes on a file.
59 attr_list()
60 {
61         _getfattr --absolute-names $1 | grep -v '^#'
62 }
63
64 # Removes an extended attribute from a file.
65 attr_remove()
66 {
67         local file=$1 name=$2
68
69         $SETFATTR_PROG -x $name $file
70 }
71
72 # Test files.
73 x=$SCRATCH_MNT/x
74 y=$SCRATCH_MNT/y
75 z=$SCRATCH_MNT/z
76
77 # Attribute with short name that goes into inode body.
78 name_in_ibody=user.i
79
80 # Attribute with long name that goes into xattr block.
81 name_in_block=user.$(perl -e 'print "b" x 100;')
82
83 # Set large xattr values on multiple files.
84 touch $x $y $z
85 for file in $x $y $z; do
86         for name in $name_in_ibody $name_in_block; do
87                 for size in 4096 8000 $((64*1024)); do
88                         attr_set $file $name-$size \
89                                 $(perl -e "print 'v' x $size;")
90                 done
91         done
92         attr_list $file
93 done
94 rm $x $y $z
95
96 # Set/remove.
97 touch $x
98 attr_set $x $name_in_ibody $(perl -e "print 'i' x 25000;")
99 attr_set $x $name_in_block $(perl -e "print 'b' x 25000;")
100 attr_list $x
101 attr_remove $x $name_in_ibody
102 attr_remove $x $name_in_block
103 rm $x
104
105 # Set with same value twice.
106 touch $x
107 attr_set $x $name_in_ibody $(perl -e "print 'i' x 60000;")
108 attr_set $x $name_in_ibody $(perl -e "print 'i' x 60000;")
109 attr_list $x
110 rm $x
111
112 # Repeatedly set an extended attribute with various value sizes.
113 touch $x
114 for size in 0 10 80 900 1900 3000 9000 60 10000 0 8000 3000 10 0 20 10000 5; do
115         attr_set $x user.1 $(perl -e "print 'v' x $size;")
116 done
117 attr_list $x
118 rm $x
119
120 # success, all done
121 status=0
122 exit