2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2011 Oracle All Rights Reserved.
5 # FS QA Test No. btrfs/002
7 # Extented btrfs snapshot test cases
10 seqres=$RESULT_DIR/$seq
11 echo "QA output created by $seq"
15 status=1 # failure is the default!
22 trap "_cleanup ; exit \$status" 0 1 2 3 15
24 # get standard environment, filters and checks
32 _scratch_mkfs > /dev/null 2>&1 || _fail "mkfs failed"
35 # Create and save sha256sum
36 # arg1 FS to generate sha256
37 # arg2 File name to save the sha256 output
43 for i in `find . -type f`; do sha256sum $i >> $2; done
47 # Verify the sha256sum for a FS
48 # arg1 FS to be tested
53 [ -f $2 ] || _fail "checksum file $2 not found"
54 sha256sum -c $2 | grep "FAILED"
60 # Return snapshot name in the SNAPNAME
64 [ -d $1 ] || _fail "Destination dir $1 not present"
65 SNAPNAME=`mktemp -u $SCRATCH_MNT/snap.XXXXXX`
66 $BTRFS_UTIL_PROG subvolume snapshot $1 $SNAPNAME > /dev/null || _fail "snapshot create failed"
69 # Reads and writes new data but does not allocate new blocks
70 # arg1 FS to be modified
75 for i in `find $1 -type f`
77 FSIZE=`stat -t $i | cut -d" " -f2`
78 dd if=$i of=/dev/null obs=$FSIZE count=1 status=noxfer 2>/dev/null &
79 _ddt of=$i obs=$FSIZE count=1 status=noxfer 2>/dev/null &
84 # Fills the allocated blocks
94 for i in `find /$1 -type f`
96 FSIZE=`stat -t $i | cut -d" " -f2`
97 BLKS=`stat -c "%B" $i`
98 NBLK=`stat -c "%b" $i`
99 FALLOC=$(($BLKS * $NBLK))
100 WS=$(($FALLOC - $FSIZE))
101 _ddt of=$i oseek=$FSIZE obs=$WS count=1 status=noxfer 2>/dev/null &
106 # Append a random size to the files
107 # arg1 : FS in question
115 for i in `find $1 -type f`
119 FSIZE=`stat -t $X | cut -d" " -f2`
120 dd if=$X of=$X seek=1 bs=$FSIZE obs=$FSIZE count=1 status=noxfer 2>/dev/null &
124 FSIZE=`stat -t $i | cut -d" " -f2`
125 dd if=$X of=$i seek=1 bs=$FSIZE obs=$FSIZE count=1 status=noxfer 2>/dev/null &
131 ##################### real QA test starts here###################################
132 # sv1 - is just a name nothing spl
133 firstvol="$SCRATCH_MNT/sv1"
134 $BTRFS_UTIL_PROG subvolume create $firstvol > /dev/null || _fail "btrfs subvolume create $firstvol failed"
135 dirp=`mktemp -duq $firstvol/dir.XXXXXX`
136 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10 -c
138 _create_snap $firstvol
139 _save_checksum $firstvol $tmp.sv1.sum
140 _verify_checksum $SNAPNAME $tmp.sv1.sum
144 _verify_checksum $firstvol $tmp.sv1.sum
147 _append_file $SNAPNAME
148 _verify_checksum $firstvol $tmp.sv1.sum
151 _read_modify_write $SNAPNAME
152 _verify_checksum $firstvol $tmp.sv1.sum
154 #nested snapshot test
156 for i in `seq 1 7`; do
158 _create_snap $src_vol
159 _verify_checksum $SNAPNAME $tmp.sv1.sum
165 _create_snap $firstvol
166 tname=`echo $SNAPNAME | rev | cut -d"/" -f1 | rev`
167 _save_checksum $SNAPNAME $tmp.$tname.sum
169 _verify_checksum $SNAPNAME $tmp.$tname.sum
171 _scratch_unmount || _fail "unmount failed"
173 echo "Silence is golden"