#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2014 Red Hat Inc.  All Rights Reserved.
#
# FS QA Test No. generic/558
#
# Stress test fs by using up all inodes and check fs.
#
# Also a regression test for xfsprogs commit
# d586858 xfs_repair: fix sibling pointer tests in verify_dir2_path()
#
. ./common/preamble
_begin_fstest auto enospc

create_file()
{
	local dir=$1
	local nr_file=$2
	local prefix=$3
	local i=0

	while [ $i -lt $nr_file ]; do
		echo -n > $dir/${prefix}_${i}
		let i=$i+1
	done
}

# Import common functions.
. ./common/filter

# real QA test starts here
_supported_fs generic
_require_inode_limits
_require_scratch

echo "Silence is golden"

_scratch_mkfs_sized $((1024 * 1024 * 1024)) >>$seqres.full 2>&1
_scratch_mount

i=0
free_inode=`_get_free_inode $SCRATCH_MNT`
file_per_dir=1000
loop=$((free_inode / file_per_dir + 1))
mkdir -p $SCRATCH_MNT/testdir

echo "Create $((loop * file_per_dir)) files in $SCRATCH_MNT/testdir" >>$seqres.full
while [ $i -lt $loop ]; do
	create_file $SCRATCH_MNT/testdir $file_per_dir $i >>$seqres.full 2>&1 &
	let i=$i+1
done
wait

# log inode status in $seqres.full for debug purpose
echo "Inode status after taking all inodes" >>$seqres.full
$DF_PROG -i $SCRATCH_MNT >>$seqres.full

_check_scratch_fs

# Check again after removing all the files
rm -rf $SCRATCH_MNT/testdir
echo "Inode status after deleting all test files" >>$seqres.full
$DF_PROG -i $SCRATCH_MNT >>$seqres.full

status=0
exit
