#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2017 Red Hat, Inc. All Rights Reserved. # # FS QA Test 417 # # Test orphan inode / unlinked list processing on RO mount & RW transition # # A filesystem that crashes with open but unlinked inodes should # be consistent after a ro, ro->rw, or rw mount cycle. # . ./common/preamble _begin_fstest auto quick shutdown log # Import common functions. . ./common/filter # real QA test starts here _supported_fs generic _require_scratch _require_scratch_shutdown _require_metadata_journaling $SCRATCH_DEV _require_test_program "multi_open_unlink" function create_dirty_orphans() { _scratch_mount num_files=200 num_eas=1 ea_val_size=512 # sleep for ages and we will kill this pid when we are ready delay=100 echo "open and unlink $num_files files with EAs" $here/src/multi_open_unlink -f $SCRATCH_MNT/test_file \ -n $num_files -s $delay -e $num_eas -v $ea_val_size & pid=$! # time to create and unlink all the files sleep 3 echo "godown" _scratch_shutdown -v -f >> $seqres.full # kill the multi_open_unlink kill $pid 2>/dev/null wait $pid 2>/dev/null pid="" _scratch_unmount } # Does a regular rw mount handle the orphan list? echo "mount dirty orphans rw, then unmount" create_dirty_orphans _scratch_mount _scratch_unmount # We should be clean at this point echo "check fs consistency" _check_scratch_fs # Does a ro mount handle the orphan list? echo "mount dirty orphans ro, then unmount" create_dirty_orphans _scratch_mount -o ro _scratch_unmount # We should be clean at this point echo "check fs consistency" _check_scratch_fs # Does a mount with ro->rw transition handle orphan list? echo "mount dirty orphans ro and remount rw, then unmount" create_dirty_orphans _scratch_mount -o ro _scratch_remount rw _scratch_unmount # We should be clean at this point echo "check fs consistency" _check_scratch_fs # success, all done status=0 exit