#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. # # FS QA Test No. 009 # # XFS allocator test (preallocation - allocp, resvsp ,etc) # 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() { echo "*** unmount" _scratch_unmount } _init() { echo "*** mkfs" if ! _scratch_mkfs_xfs >$tmp.out 2>&1 then cat $tmp.out echo "failed to mkfs $SCRATCH_DEV" exit 1 fi echo "*** mount" if ! _try_scratch_mount then echo "failed to mount $SCRATCH_DEV" exit 1 fi } # get standard environment, filters and checks . ./common/rc . ./common/filter # real QA test starts here _supported_fs xfs _require_scratch _require_xfs_io_command "falloc" _filesize() { ls -l $1 | $AWK_PROG -v bsize="$bsize" '{print "filesize = " $5 / bsize}' } _block_filter() { $AWK_PROG -v bsize="$bsize" ' /blocksize/ { printf(" blocksize BSIZE\n") next } /CMD/ { split($3, off, "=") offset = strtonum(off[2]) if (offset != -1) offset = offset / bsize split($4, len, "=") nr_blocks = strtonum(len[2]) if (nr_blocks != -1) nr_blocks = nr_blocks / bsize printf(" %s %s off=%s, len=%d\n", $1, $2, offset, nr_blocks) next } /MAP/ { split($2, off, "=") offset = strtonum(off[2]) if (offset != -1) offset = offset / bsize split($3, len, "=") nr_blocks = strtonum(len[2]) if (nr_blocks != -1) nr_blocks = nr_blocks / bsize printf(" %s off=%s, len=%d %s\n", $1, offset, nr_blocks, $4) next } /TRUNCATE/ { split($2, off, "=") offset = strtonum(off[2]) / bsize printf(" %s off=%s\n", $1, offset) next } /\[[0-9]+,[0-9]+\]:/ { printf(" %s BLOCKRANGE\n", $1) next } { print next } ' } _init out=$SCRATCH_MNT/$$.tmp # This isn't really related to fs block size, it's just what # alloc uses for the "block" unit in it's input parameters... # However, xfs_alloc_file_space() rounds up allocation # request by the filesystem's block size. bsize=$(_get_file_block_size $SCRATCH_MNT) # since we're using a clean FS here, we make some assumptions # about availability of contiguous blocks # also interesting to note is that ALLOC == FREE. seriously. # the _length is ignored_ in irix. the file is allocated up # to the specified offset, and zero filled if previously # unallocated. the file is truncated at the specified point. echo "*** test 1 - reservations cleared on O_TRUNC" rm -f $out cat <