#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. # # FS QA Test No. 109 # # ENOSPC deadlock case from Asano Masahiro. # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 # get standard environment, filters and checks . ./common/rc . ./common/filter # real QA test starts here _supported_fs xfs _require_scratch populate() { # "faststart" lets us effectively skip (re-)population [ "X$faststart" != "X" ] && rm -f $SCRATCH_MNT/F* # create many small files using most available space echo "creating small files..." i=0 while [ $i -le $files -a "X$faststart" = "X" ]; do file=$SCRATCH_MNT/f$i $XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 64k' $file >/dev/null let i=$i+1 done # remove every second file, freeing up lots of space echo "removing small files..." i=1 while [ $i -le $files -a "X$faststart" = "X" ]; do rm $SCRATCH_MNT/f$i let i=$i+2 done echo "flushing changes via umount/mount." _scratch_unmount _scratch_mount } allocate() { # now try to hit the deadlock echo "starting parallel allocators..." i=0 while [ $i -le 10 ]; do file=$SCRATCH_MNT/F$i { j=0 while [ $j -lt 100 ]; do $XFS_IO_PROG -f -c 'pwrite -b 64k 0 16m' $file \ >/dev/null 2>&1 test -e $file && rm $file let j=$j+1 done } & let i=$i+1 done wait echo "all done!" } # real QA test starts here _scratch_mkfs_xfs >> $seqres.full _scratch_mount rm -f $seqres.full # see if faststart is possible (and requested) files=2000 faststart="" if [ -n "$FASTSTART" -a -f $SCRATCH_MNT/f0 ]; then faststart="-N" # causes us to skip the mkfs step fi _scratch_unmount _scratch_mkfs_xfs -dsize=160m,agcount=4 $faststart | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seqres.full _scratch_mount populate allocate status=0 exit