1*6a54128fSAndroid Build Coastguard Worker#!/bin/bash 2*6a54128fSAndroid Build Coastguard Worker 3*6a54128fSAndroid Build Coastguard Worker# Test harness to fuzz a filesystem over and over... 4*6a54128fSAndroid Build Coastguard Worker# Copyright (C) 2014 Oracle. 5*6a54128fSAndroid Build Coastguard Worker 6*6a54128fSAndroid Build Coastguard WorkerDIR=/tmp 7*6a54128fSAndroid Build Coastguard WorkerPASSES=10000 8*6a54128fSAndroid Build Coastguard WorkerSZ=32m 9*6a54128fSAndroid Build Coastguard WorkerSCRIPT_DIR="$(dirname "$0")" 10*6a54128fSAndroid Build Coastguard WorkerFEATURES="has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize,64bit,metadata_csum,bigalloc,sparse_super2,inline_data" 11*6a54128fSAndroid Build Coastguard WorkerBLK_SZ=4096 12*6a54128fSAndroid Build Coastguard WorkerINODE_SZ=256 13*6a54128fSAndroid Build Coastguard WorkerEXTENDED_OPTS="discard" 14*6a54128fSAndroid Build Coastguard WorkerEXTENDED_FSCK_OPTIONS="" 15*6a54128fSAndroid Build Coastguard WorkerRUN_FSCK=1 16*6a54128fSAndroid Build Coastguard WorkerOVERRIDE_PATH=1 17*6a54128fSAndroid Build Coastguard WorkerHAS_FUSE2FS=0 18*6a54128fSAndroid Build Coastguard WorkerUSE_FUSE2FS=0 19*6a54128fSAndroid Build Coastguard WorkerMAX_FSCK=10 20*6a54128fSAndroid Build Coastguard WorkerSRCDIR=/etc 21*6a54128fSAndroid Build Coastguard Workertest -x "${SCRIPT_DIR}/fuse2fs" && HAS_FUSE2FS=1 22*6a54128fSAndroid Build Coastguard Worker 23*6a54128fSAndroid Build Coastguard Workerprint_help() { 24*6a54128fSAndroid Build Coastguard Worker echo "Usage: $0 OPTIONS" 25*6a54128fSAndroid Build Coastguard Worker echo "-b: FS block size is this. (${BLK_SZ})" 26*6a54128fSAndroid Build Coastguard Worker echo "-B: Corrupt this many bytes per run." 27*6a54128fSAndroid Build Coastguard Worker echo "-d: Create test files in this directory. (${DIR})" 28*6a54128fSAndroid Build Coastguard Worker echo "-E: Extended mke2fs options." 29*6a54128fSAndroid Build Coastguard Worker echo "-f: Do not run e2fsck after each pass." 30*6a54128fSAndroid Build Coastguard Worker echo "-F: Extended e2fsck options." 31*6a54128fSAndroid Build Coastguard Worker echo "-I: Create inodes of this size. (${INODE_SZ})" 32*6a54128fSAndroid Build Coastguard Worker echo "-n: Run this many passes. (${PASSES})" 33*6a54128fSAndroid Build Coastguard Worker echo "-O: Create FS with these features." 34*6a54128fSAndroid Build Coastguard Worker echo "-p: Use system's mke2fs/e2fsck/tune2fs tools." 35*6a54128fSAndroid Build Coastguard Worker echo "-s: Create FS images of this size. (${SZ})" 36*6a54128fSAndroid Build Coastguard Worker echo "-S: Copy files from this dir. (${SRCDIR})" 37*6a54128fSAndroid Build Coastguard Worker echo "-x: Run e2fsck at most this many times. (${MAX_FSCK})" 38*6a54128fSAndroid Build Coastguard Worker test "${HAS_FUSE2FS}" -gt 0 && echo "-u: Use fuse2fs instead of the kernel." 39*6a54128fSAndroid Build Coastguard Worker exit 0 40*6a54128fSAndroid Build Coastguard Worker} 41*6a54128fSAndroid Build Coastguard Worker 42*6a54128fSAndroid Build Coastguard WorkerGETOPT="d:n:s:O:I:b:B:E:F:fpx:S:" 43*6a54128fSAndroid Build Coastguard Workertest "${HAS_FUSE2FS}" && GETOPT="${GETOPT}u" 44*6a54128fSAndroid Build Coastguard Worker 45*6a54128fSAndroid Build Coastguard Workerwhile getopts "${GETOPT}" opt; do 46*6a54128fSAndroid Build Coastguard Worker case "${opt}" in 47*6a54128fSAndroid Build Coastguard Worker "B") 48*6a54128fSAndroid Build Coastguard Worker E2FUZZ_ARGS="${E2FUZZ_ARGS} -b ${OPTARG}" 49*6a54128fSAndroid Build Coastguard Worker ;; 50*6a54128fSAndroid Build Coastguard Worker "d") 51*6a54128fSAndroid Build Coastguard Worker DIR="${OPTARG}" 52*6a54128fSAndroid Build Coastguard Worker ;; 53*6a54128fSAndroid Build Coastguard Worker "n") 54*6a54128fSAndroid Build Coastguard Worker PASSES="${OPTARG}" 55*6a54128fSAndroid Build Coastguard Worker ;; 56*6a54128fSAndroid Build Coastguard Worker "s") 57*6a54128fSAndroid Build Coastguard Worker SZ="${OPTARG}" 58*6a54128fSAndroid Build Coastguard Worker ;; 59*6a54128fSAndroid Build Coastguard Worker "O") 60*6a54128fSAndroid Build Coastguard Worker FEATURES="${FEATURES},${OPTARG}" 61*6a54128fSAndroid Build Coastguard Worker ;; 62*6a54128fSAndroid Build Coastguard Worker "I") 63*6a54128fSAndroid Build Coastguard Worker INODE_SZ="${OPTARG}" 64*6a54128fSAndroid Build Coastguard Worker ;; 65*6a54128fSAndroid Build Coastguard Worker "b") 66*6a54128fSAndroid Build Coastguard Worker BLK_SZ="${OPTARG}" 67*6a54128fSAndroid Build Coastguard Worker ;; 68*6a54128fSAndroid Build Coastguard Worker "E") 69*6a54128fSAndroid Build Coastguard Worker EXTENDED_OPTS="${OPTARG}" 70*6a54128fSAndroid Build Coastguard Worker ;; 71*6a54128fSAndroid Build Coastguard Worker "F") 72*6a54128fSAndroid Build Coastguard Worker EXTENDED_FSCK_OPTS="-E ${OPTARG}" 73*6a54128fSAndroid Build Coastguard Worker ;; 74*6a54128fSAndroid Build Coastguard Worker "f") 75*6a54128fSAndroid Build Coastguard Worker RUN_FSCK=0 76*6a54128fSAndroid Build Coastguard Worker ;; 77*6a54128fSAndroid Build Coastguard Worker "p") 78*6a54128fSAndroid Build Coastguard Worker OVERRIDE_PATH=0 79*6a54128fSAndroid Build Coastguard Worker ;; 80*6a54128fSAndroid Build Coastguard Worker "u") 81*6a54128fSAndroid Build Coastguard Worker USE_FUSE2FS=1 82*6a54128fSAndroid Build Coastguard Worker ;; 83*6a54128fSAndroid Build Coastguard Worker "x") 84*6a54128fSAndroid Build Coastguard Worker MAX_FSCK="${OPTARG}" 85*6a54128fSAndroid Build Coastguard Worker ;; 86*6a54128fSAndroid Build Coastguard Worker "S") 87*6a54128fSAndroid Build Coastguard Worker SRCDIR="${OPTARG}" 88*6a54128fSAndroid Build Coastguard Worker ;; 89*6a54128fSAndroid Build Coastguard Worker *) 90*6a54128fSAndroid Build Coastguard Worker print_help 91*6a54128fSAndroid Build Coastguard Worker ;; 92*6a54128fSAndroid Build Coastguard Worker esac 93*6a54128fSAndroid Build Coastguard Workerdone 94*6a54128fSAndroid Build Coastguard Worker 95*6a54128fSAndroid Build Coastguard Workerif [ "${OVERRIDE_PATH}" -gt 0 ]; then 96*6a54128fSAndroid Build Coastguard Worker PATH="${SCRIPT_DIR}:${SCRIPT_DIR}/../e2fsck/:${PATH}" 97*6a54128fSAndroid Build Coastguard Worker export PATH 98*6a54128fSAndroid Build Coastguard Workerfi 99*6a54128fSAndroid Build Coastguard Worker 100*6a54128fSAndroid Build Coastguard WorkerTESTDIR="${DIR}/tests/" 101*6a54128fSAndroid Build Coastguard WorkerTESTMNT="${DIR}/mnt/" 102*6a54128fSAndroid Build Coastguard WorkerBASE_IMG="${DIR}/e2fuzz.img" 103*6a54128fSAndroid Build Coastguard Worker 104*6a54128fSAndroid Build Coastguard Workercat > /tmp/mke2fs.conf << ENDL 105*6a54128fSAndroid Build Coastguard Worker[defaults] 106*6a54128fSAndroid Build Coastguard Worker base_features = ${FEATURES} 107*6a54128fSAndroid Build Coastguard Worker default_mntopts = acl,user_xattr,block_validity 108*6a54128fSAndroid Build Coastguard Worker enable_periodic_fsck = 0 109*6a54128fSAndroid Build Coastguard Worker blocksize = ${BLK_SZ} 110*6a54128fSAndroid Build Coastguard Worker inode_size = ${INODE_SZ} 111*6a54128fSAndroid Build Coastguard Worker inode_ratio = 4096 112*6a54128fSAndroid Build Coastguard Worker cluster_size = $((BLK_SZ * 2)) 113*6a54128fSAndroid Build Coastguard Worker options = ${EXTENDED_OPTS} 114*6a54128fSAndroid Build Coastguard WorkerENDL 115*6a54128fSAndroid Build Coastguard WorkerMKE2FS_CONFIG=/tmp/mke2fs.conf 116*6a54128fSAndroid Build Coastguard Workerexport MKE2FS_CONFIG 117*6a54128fSAndroid Build Coastguard Worker 118*6a54128fSAndroid Build Coastguard Worker# Set up FS image 119*6a54128fSAndroid Build Coastguard Workerecho "+ create fs image" 120*6a54128fSAndroid Build Coastguard Workerumount "${TESTDIR}" 121*6a54128fSAndroid Build Coastguard Workerumount "${TESTMNT}" 122*6a54128fSAndroid Build Coastguard Workerrm -rf "${TESTDIR}" 123*6a54128fSAndroid Build Coastguard Workerrm -rf "${TESTMNT}" 124*6a54128fSAndroid Build Coastguard Workermkdir -p "${TESTDIR}" 125*6a54128fSAndroid Build Coastguard Workermkdir -p "${TESTMNT}" 126*6a54128fSAndroid Build Coastguard Workerrm -rf "${BASE_IMG}" 127*6a54128fSAndroid Build Coastguard Workertruncate -s "${SZ}" "${BASE_IMG}" 128*6a54128fSAndroid Build Coastguard Workermke2fs -F -v "${BASE_IMG}" 129*6a54128fSAndroid Build Coastguard Workerif [ $? -ne 0 ]; then 130*6a54128fSAndroid Build Coastguard Worker exit $? 131*6a54128fSAndroid Build Coastguard Workerfi 132*6a54128fSAndroid Build Coastguard Worker 133*6a54128fSAndroid Build Coastguard Worker# Populate FS image 134*6a54128fSAndroid Build Coastguard Workerecho "+ populate fs image" 135*6a54128fSAndroid Build Coastguard Workermodprobe loop 136*6a54128fSAndroid Build Coastguard Workermount "${BASE_IMG}" "${TESTMNT}" -o loop 137*6a54128fSAndroid Build Coastguard Workerif [ $? -ne 0 ]; then 138*6a54128fSAndroid Build Coastguard Worker exit $? 139*6a54128fSAndroid Build Coastguard Workerfi 140*6a54128fSAndroid Build Coastguard WorkerSRC_SZ="$(du -ks "${SRCDIR}" | awk '{print $1}')" 141*6a54128fSAndroid Build Coastguard WorkerFS_SZ="$(( $(stat -f "${TESTMNT}" -c '%a * %S') / 1024 ))" 142*6a54128fSAndroid Build Coastguard WorkerNR="$(( (FS_SZ * 4 / 10) / SRC_SZ ))" 143*6a54128fSAndroid Build Coastguard Workerif [ "${NR}" -lt 1 ]; then 144*6a54128fSAndroid Build Coastguard Worker NR=1 145*6a54128fSAndroid Build Coastguard Workerfi 146*6a54128fSAndroid Build Coastguard Workerecho "+ make ${NR} copies" 147*6a54128fSAndroid Build Coastguard Workerseq 1 "${NR}" | while read nr; do 148*6a54128fSAndroid Build Coastguard Worker cp -pRdu "${SRCDIR}" "${TESTMNT}/test.${nr}" 2> /dev/null 149*6a54128fSAndroid Build Coastguard Workerdone 150*6a54128fSAndroid Build Coastguard Workerumount "${TESTMNT}" 151*6a54128fSAndroid Build Coastguard Workere2fsck -fn "${BASE_IMG}" 152*6a54128fSAndroid Build Coastguard Workerif [ $? -ne 0 ]; then 153*6a54128fSAndroid Build Coastguard Worker echo "fsck failed??" 154*6a54128fSAndroid Build Coastguard Worker exit 1 155*6a54128fSAndroid Build Coastguard Workerfi 156*6a54128fSAndroid Build Coastguard Worker 157*6a54128fSAndroid Build Coastguard Worker# Run tests 158*6a54128fSAndroid Build Coastguard Workerecho "+ run test" 159*6a54128fSAndroid Build Coastguard Workerret=0 160*6a54128fSAndroid Build Coastguard Workerseq 1 "${PASSES}" | while read pass; do 161*6a54128fSAndroid Build Coastguard Worker echo "+ pass ${pass}" 162*6a54128fSAndroid Build Coastguard Worker PASS_IMG="${TESTDIR}/e2fuzz-${pass}.img" 163*6a54128fSAndroid Build Coastguard Worker FSCK_IMG="${TESTDIR}/e2fuzz-${pass}.fsck" 164*6a54128fSAndroid Build Coastguard Worker FUZZ_LOG="${TESTDIR}/e2fuzz-${pass}.fuzz.log" 165*6a54128fSAndroid Build Coastguard Worker OPS_LOG="${TESTDIR}/e2fuzz-${pass}.ops.log" 166*6a54128fSAndroid Build Coastguard Worker 167*6a54128fSAndroid Build Coastguard Worker echo "++ corrupt image" 168*6a54128fSAndroid Build Coastguard Worker cp "${BASE_IMG}" "${PASS_IMG}" 169*6a54128fSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 170*6a54128fSAndroid Build Coastguard Worker exit $? 171*6a54128fSAndroid Build Coastguard Worker fi 172*6a54128fSAndroid Build Coastguard Worker tune2fs -L "e2fuzz-${pass}" "${PASS_IMG}" 173*6a54128fSAndroid Build Coastguard Worker e2fuzz -v "${PASS_IMG}" ${E2FUZZ_ARGS} > "${FUZZ_LOG}" 174*6a54128fSAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 175*6a54128fSAndroid Build Coastguard Worker exit $? 176*6a54128fSAndroid Build Coastguard Worker fi 177*6a54128fSAndroid Build Coastguard Worker 178*6a54128fSAndroid Build Coastguard Worker echo "++ mount image" 179*6a54128fSAndroid Build Coastguard Worker if [ "${USE_FUSE2FS}" -gt 0 ]; then 180*6a54128fSAndroid Build Coastguard Worker "${SCRIPT_DIR}/fuse2fs" "${PASS_IMG}" "${TESTMNT}" 181*6a54128fSAndroid Build Coastguard Worker res=$? 182*6a54128fSAndroid Build Coastguard Worker else 183*6a54128fSAndroid Build Coastguard Worker mount "${PASS_IMG}" "${TESTMNT}" -o loop 184*6a54128fSAndroid Build Coastguard Worker res=$? 185*6a54128fSAndroid Build Coastguard Worker fi 186*6a54128fSAndroid Build Coastguard Worker 187*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -eq 0 ]; then 188*6a54128fSAndroid Build Coastguard Worker echo "+++ ls -laR" 189*6a54128fSAndroid Build Coastguard Worker ls -laR "${TESTMNT}/test.1/" > /dev/null 2> "${OPS_LOG}" 190*6a54128fSAndroid Build Coastguard Worker 191*6a54128fSAndroid Build Coastguard Worker echo "+++ cat files" 192*6a54128fSAndroid Build Coastguard Worker find "${TESTMNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat > /dev/null 2>> "${OPS_LOG}" 193*6a54128fSAndroid Build Coastguard Worker 194*6a54128fSAndroid Build Coastguard Worker echo "+++ expand" 195*6a54128fSAndroid Build Coastguard Worker find "${TESTMNT}/" -type f 2> /dev/null | head -n 50000 | while read f; do 196*6a54128fSAndroid Build Coastguard Worker attr -l "$f" > /dev/null 2>> "${OPS_LOG}" 197*6a54128fSAndroid Build Coastguard Worker if [ -f "$f" -a -w "$f" ]; then 198*6a54128fSAndroid Build Coastguard Worker dd if=/dev/zero bs="${BLK_SZ}" count=1 >> "$f" 2>> "${OPS_LOG}" 199*6a54128fSAndroid Build Coastguard Worker fi 200*6a54128fSAndroid Build Coastguard Worker mv "$f" "$f.longer" > /dev/null 2>> "${OPS_LOG}" 201*6a54128fSAndroid Build Coastguard Worker done 202*6a54128fSAndroid Build Coastguard Worker sync 203*6a54128fSAndroid Build Coastguard Worker 204*6a54128fSAndroid Build Coastguard Worker echo "+++ create files" 205*6a54128fSAndroid Build Coastguard Worker cp -pRdu "${SRCDIR}" "${TESTMNT}/test.moo" 2>> "${OPS_LOG}" 206*6a54128fSAndroid Build Coastguard Worker sync 207*6a54128fSAndroid Build Coastguard Worker 208*6a54128fSAndroid Build Coastguard Worker echo "+++ remove files" 209*6a54128fSAndroid Build Coastguard Worker rm -rf "${TESTMNT}/test.moo" 2>> "${OPS_LOG}" 210*6a54128fSAndroid Build Coastguard Worker 211*6a54128fSAndroid Build Coastguard Worker umount "${TESTMNT}" 212*6a54128fSAndroid Build Coastguard Worker res=$? 213*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -ne 0 ]; then 214*6a54128fSAndroid Build Coastguard Worker ret=1 215*6a54128fSAndroid Build Coastguard Worker break 216*6a54128fSAndroid Build Coastguard Worker fi 217*6a54128fSAndroid Build Coastguard Worker sync 218*6a54128fSAndroid Build Coastguard Worker test "${USE_FUSE2FS}" -gt 0 && sleep 2 219*6a54128fSAndroid Build Coastguard Worker fi 220*6a54128fSAndroid Build Coastguard Worker if [ "${RUN_FSCK}" -gt 0 ]; then 221*6a54128fSAndroid Build Coastguard Worker cp "${PASS_IMG}" "${FSCK_IMG}" 222*6a54128fSAndroid Build Coastguard Worker pass_img_sz="$(stat -c '%s' "${PASS_IMG}")" 223*6a54128fSAndroid Build Coastguard Worker 224*6a54128fSAndroid Build Coastguard Worker seq 1 "${MAX_FSCK}" | while read fsck_pass; do 225*6a54128fSAndroid Build Coastguard Worker echo "++ fsck pass ${fsck_pass}: $(which e2fsck) -fy ${FSCK_IMG} ${EXTENDED_FSCK_OPTS}" 226*6a54128fSAndroid Build Coastguard Worker FSCK_LOG="${TESTDIR}/e2fuzz-${pass}-${fsck_pass}.log" 227*6a54128fSAndroid Build Coastguard Worker e2fsck -fy "${FSCK_IMG}" ${EXTENDED_FSCK_OPTS} > "${FSCK_LOG}" 2>&1 228*6a54128fSAndroid Build Coastguard Worker res=$? 229*6a54128fSAndroid Build Coastguard Worker echo "++ fsck returns ${res}" 230*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -eq 0 ]; then 231*6a54128fSAndroid Build Coastguard Worker exit 0 232*6a54128fSAndroid Build Coastguard Worker elif [ "${fsck_pass}" -eq "${MAX_FSCK}" ]; then 233*6a54128fSAndroid Build Coastguard Worker echo "++ fsck did not fix in ${MAX_FSCK} passes." 234*6a54128fSAndroid Build Coastguard Worker exit 1 235*6a54128fSAndroid Build Coastguard Worker fi 236*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -gt 0 -a \ 237*6a54128fSAndroid Build Coastguard Worker "$(grep 'Memory allocation failed' "${FSCK_LOG}" | wc -l)" -gt 0 ]; then 238*6a54128fSAndroid Build Coastguard Worker echo "++ Ran out of memory, get more RAM" 239*6a54128fSAndroid Build Coastguard Worker exit 0 240*6a54128fSAndroid Build Coastguard Worker fi 241*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -gt 0 -a \ 242*6a54128fSAndroid Build Coastguard Worker "$(grep 'Could not allocate block' "${FSCK_LOG}" | wc -l)" -gt 0 -a \ 243*6a54128fSAndroid Build Coastguard Worker "$(dumpe2fs -h "${FSCK_IMG}" | grep '^Free blocks:' | awk '{print $3}')0" -eq 0 ]; then 244*6a54128fSAndroid Build Coastguard Worker echo "++ Ran out of space, get a bigger image" 245*6a54128fSAndroid Build Coastguard Worker exit 0 246*6a54128fSAndroid Build Coastguard Worker fi 247*6a54128fSAndroid Build Coastguard Worker if [ "${fsck_pass}" -gt 1 ]; then 248*6a54128fSAndroid Build Coastguard Worker diff -u "${TESTDIR}/e2fuzz-${pass}-$((fsck_pass - 1)).log" "${FSCK_LOG}" 249*6a54128fSAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 250*6a54128fSAndroid Build Coastguard Worker echo "++ fsck makes no progress" 251*6a54128fSAndroid Build Coastguard Worker exit 2 252*6a54128fSAndroid Build Coastguard Worker fi 253*6a54128fSAndroid Build Coastguard Worker fi 254*6a54128fSAndroid Build Coastguard Worker 255*6a54128fSAndroid Build Coastguard Worker fsck_img_sz="$(stat -c '%s' "${FSCK_IMG}")" 256*6a54128fSAndroid Build Coastguard Worker if [ "${fsck_img_sz}" -ne "${pass_img_sz}" ]; then 257*6a54128fSAndroid Build Coastguard Worker echo "++ fsck image size changed" 258*6a54128fSAndroid Build Coastguard Worker exit 3 259*6a54128fSAndroid Build Coastguard Worker fi 260*6a54128fSAndroid Build Coastguard Worker done 261*6a54128fSAndroid Build Coastguard Worker fsck_loop_ret=$? 262*6a54128fSAndroid Build Coastguard Worker if [ "${fsck_loop_ret}" -gt 0 ]; then 263*6a54128fSAndroid Build Coastguard Worker break; 264*6a54128fSAndroid Build Coastguard Worker fi 265*6a54128fSAndroid Build Coastguard Worker fi 266*6a54128fSAndroid Build Coastguard Worker 267*6a54128fSAndroid Build Coastguard Worker echo "+++ check fs for round 2" 268*6a54128fSAndroid Build Coastguard Worker FSCK_LOG="${TESTDIR}/e2fuzz-${pass}-round2.log" 269*6a54128fSAndroid Build Coastguard Worker e2fsck -fn "${FSCK_IMG}" ${EXTENDED_FSCK_OPTS} >> "${FSCK_LOG}" 2>&1 270*6a54128fSAndroid Build Coastguard Worker res=$? 271*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -ne 0 ]; then 272*6a54128fSAndroid Build Coastguard Worker echo "++++ fsck failed." 273*6a54128fSAndroid Build Coastguard Worker exit 1 274*6a54128fSAndroid Build Coastguard Worker fi 275*6a54128fSAndroid Build Coastguard Worker 276*6a54128fSAndroid Build Coastguard Worker echo "++ mount image (2)" 277*6a54128fSAndroid Build Coastguard Worker mount "${FSCK_IMG}" "${TESTMNT}" -o loop 278*6a54128fSAndroid Build Coastguard Worker res=$? 279*6a54128fSAndroid Build Coastguard Worker 280*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -eq 0 ]; then 281*6a54128fSAndroid Build Coastguard Worker echo "+++ ls -laR (2)" 282*6a54128fSAndroid Build Coastguard Worker ls -laR "${TESTMNT}/test.1/" > /dev/null 2> "${OPS_LOG}" 283*6a54128fSAndroid Build Coastguard Worker 284*6a54128fSAndroid Build Coastguard Worker echo "+++ cat files (2)" 285*6a54128fSAndroid Build Coastguard Worker find "${TESTMNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat > /dev/null 2>> "${OPS_LOG}" 286*6a54128fSAndroid Build Coastguard Worker 287*6a54128fSAndroid Build Coastguard Worker echo "+++ expand (2)" 288*6a54128fSAndroid Build Coastguard Worker find "${TESTMNT}/" -type f 2> /dev/null | head -n 50000 | while read f; do 289*6a54128fSAndroid Build Coastguard Worker attr -l "$f" > /dev/null 2>> "${OPS_LOG}" 290*6a54128fSAndroid Build Coastguard Worker if [ -f "$f" -a -w "$f" ]; then 291*6a54128fSAndroid Build Coastguard Worker dd if=/dev/zero bs="${BLK_SZ}" count=1 >> "$f" 2>> "${OPS_LOG}" 292*6a54128fSAndroid Build Coastguard Worker fi 293*6a54128fSAndroid Build Coastguard Worker mv "$f" "$f.longer" > /dev/null 2>> "${OPS_LOG}" 294*6a54128fSAndroid Build Coastguard Worker done 295*6a54128fSAndroid Build Coastguard Worker sync 296*6a54128fSAndroid Build Coastguard Worker 297*6a54128fSAndroid Build Coastguard Worker echo "+++ create files (2)" 298*6a54128fSAndroid Build Coastguard Worker cp -pRdu "${SRCDIR}" "${TESTMNT}/test.moo" 2>> "${OPS_LOG}" 299*6a54128fSAndroid Build Coastguard Worker sync 300*6a54128fSAndroid Build Coastguard Worker 301*6a54128fSAndroid Build Coastguard Worker echo "+++ remove files (2)" 302*6a54128fSAndroid Build Coastguard Worker rm -rf "${TESTMNT}/test.moo" 2>> "${OPS_LOG}" 303*6a54128fSAndroid Build Coastguard Worker 304*6a54128fSAndroid Build Coastguard Worker umount "${TESTMNT}" 305*6a54128fSAndroid Build Coastguard Worker res=$? 306*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -ne 0 ]; then 307*6a54128fSAndroid Build Coastguard Worker ret=1 308*6a54128fSAndroid Build Coastguard Worker break 309*6a54128fSAndroid Build Coastguard Worker fi 310*6a54128fSAndroid Build Coastguard Worker sync 311*6a54128fSAndroid Build Coastguard Worker test "${USE_FUSE2FS}" -gt 0 && sleep 2 312*6a54128fSAndroid Build Coastguard Worker 313*6a54128fSAndroid Build Coastguard Worker echo "+++ check fs (2)" 314*6a54128fSAndroid Build Coastguard Worker e2fsck -fn "${FSCK_IMG}" >> "${FSCK_LOG}" 2>&1 315*6a54128fSAndroid Build Coastguard Worker res=$? 316*6a54128fSAndroid Build Coastguard Worker if [ "${res}" -ne 0 ]; then 317*6a54128fSAndroid Build Coastguard Worker echo "++ fsck failed." 318*6a54128fSAndroid Build Coastguard Worker exit 1 319*6a54128fSAndroid Build Coastguard Worker fi 320*6a54128fSAndroid Build Coastguard Worker else 321*6a54128fSAndroid Build Coastguard Worker echo "++ mount(2) failed with ${res}" 322*6a54128fSAndroid Build Coastguard Worker exit 1 323*6a54128fSAndroid Build Coastguard Worker fi 324*6a54128fSAndroid Build Coastguard Worker rm -rf "${FSCK_IMG}" "${PASS_IMG}" "${FUZZ_LOG}" "${TESTDIR}"/e2fuzz*.log 325*6a54128fSAndroid Build Coastguard Workerdone 326*6a54128fSAndroid Build Coastguard Worker 327*6a54128fSAndroid Build Coastguard Workerexit $ret 328