#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2009 Christoph Hellwig.
#
# FS QA Test No. 201
#
# Test out the infamous xfs_btree_delrec corruption.
#
# Only happens on 32-bit kernels without CONFIG_LBD, but it should be harmless
# to run this everywhere.
#
. ./common/preamble
_begin_fstest metadata auto quick

# Override the default cleanup function.
_cleanup()
{
	_scratch_unmount
}

# Import common functions.
. ./common/filter


file=$SCRATCH_MNT/f

do_pwrite()
{
	min_align=$3
	offset=`expr $1 \* $min_align`
	end=`expr $2 \* $min_align`
	length=`expr $end - $offset`

	$XFS_IO_PROG -d -f $file -c "pwrite $offset $length" >/dev/null
}

_require_scratch

_scratch_mkfs_xfs >/dev/null 2>&1
_scratch_mount

min_align=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV`

# Create a fragmented file
do_pwrite 30792 31039 $min_align
do_pwrite 30320 30791 $min_align
do_pwrite 29688 30319 $min_align
do_pwrite 29536 29687 $min_align
do_pwrite 27216 29535 $min_align
do_pwrite 24368 27215 $min_align
do_pwrite 21616 24367 $min_align
do_pwrite 20608 21615 $min_align
do_pwrite 19680 20607 $min_align
do_pwrite 19232 19679 $min_align
do_pwrite 17840 19231 $min_align
do_pwrite 16928 17839 $min_align
do_pwrite 15168 16927 $min_align
do_pwrite 14048 15167 $min_align
do_pwrite 12152 14047 $min_align
do_pwrite 11344 12151 $min_align
do_pwrite 8792 11343 $min_align
do_pwrite 6456 8791 $min_align
do_pwrite 5000 6455 $min_align
do_pwrite 1728 4999 $min_align
do_pwrite 0 1727 $min_align

_scratch_sync
_scratch_sync

# and truncate it again
> $SCRATCH_MNT/bigfile

# success, all done
echo "*** done"
status=0
