#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2015 Red Hat Inc. All Rights Reserved. # # FS QA Test No. 084 # # Test hardlink to unlinked file. # # Regression test for commit: # aae8a97 fs: Don't allow to create hardlink for deleted file # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / rm -f $tmp.* } # get standard environment, filters and checks . ./common/rc . ./common/filter # real QA test starts here _supported_fs generic _require_scratch link_unlink_storm() { local src=$1 local target=$2 local i=0 while true; do ln -f $src $target.$i >/dev/null 2>&1 rm -f $target.$i >/dev/null 2>&1 let i=i+1 done } rm -f $seqres.full nr_cpu=`$here/src/feature -o` echo "Silence is golden" _scratch_mkfs >>$seqres.full 2>&1 _scratch_mount # create, open & unlinked files so unlinked inode list is not empty $here/src/multi_open_unlink -f $SCRATCH_MNT/$seq.unlinked -n $nr_cpu & open_pid=$! # start link/unlink storm src=$SCRATCH_MNT/$seq.target touch $src for i in `seq 1 $nr_cpu`; do target=$SCRATCH_MNT/$seq.target.link.$i link_unlink_storm $src $target & link_pids="$link_pids $!" done # remove & re-create target to race with link/unlink while true; do rm -f $src touch $src done & sleep 5 kill $! >/dev/null 2>&1 kill $open_pid $link_pids >/dev/null 2>&1 wait $open_pid $link_pids # all done, no oops/hang expected, _check_filesystems checks SCRATCH_DEV after test status=0 exit