| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2015 Oracle, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. 016 |
| # |
| # Create and populate an ext4 filesystem, corrupt a dirent block, then |
| # see how the kernel and e2fsck deal with it. |
| # |
| . ./common/preamble |
| _begin_fstest fuzzers |
| |
| # Override the default cleanup function. |
| _cleanup() |
| { |
| cd / |
| #rm -f $tmp.* |
| } |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/attr |
| |
| _exclude_fs ext2 |
| _exclude_fs ext3 |
| |
| _require_scratch |
| test -n "${FORCE_FUZZ}" || _require_scratch_ext4_crc |
| _require_attrs |
| |
| TESTDIR="${SCRATCH_MNT}/scratchdir" |
| TESTFILE="${TESTDIR}/testfile" |
| |
| echo "+ create scratch fs" |
| _scratch_mkfs_ext4 > /dev/null 2>&1 |
| |
| echo "+ mount fs image" |
| _scratch_mount |
| |
| echo "+ make some files" |
| for x in `seq 1 15`; do |
| mkdir -p "${SCRATCH_MNT}/test/d_${x}" |
| done |
| umount "${SCRATCH_MNT}" |
| |
| echo "+ check fs" |
| e2fsck -fn "${SCRATCH_DEV}" >> $seqres.full 2>&1 || _fail "fsck should not fail" |
| |
| echo "+ corrupt image" |
| debugfs -w -R "zap -f /test 0" "${SCRATCH_DEV}" 2> /dev/null |
| |
| echo "+ mount image" |
| _scratch_mount |
| |
| echo "+ modify dirs" |
| mkdir -p "${SCRATCH_MNT}/test/newdir" 2> /dev/null && _fail "directory should be corrupt" |
| umount "${SCRATCH_MNT}" |
| |
| echo "+ repair fs" |
| e2fsck -fy "${SCRATCH_DEV}" >> $seqres.full 2>&1 |
| |
| echo "+ mount image (2)" |
| _scratch_mount |
| |
| echo "+ modify dirs (2)" |
| mkdir -p "${SCRATCH_MNT}/test/newdir" || _fail "directory should be corrupt" |
| umount "${SCRATCH_MNT}" |
| |
| echo "+ check fs (2)" |
| e2fsck -fn "${SCRATCH_DEV}" >> $seqres.full 2>&1 || _fail "fsck should not fail" |
| |
| status=0 |
| exit |