All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chandan Babu R <chandan.babu@oracle.com>
To: fstests@vger.kernel.org
Cc: Chandan Babu R <chandan.babu@oracle.com>, linux-xfs@vger.kernel.org
Subject: [PATCH] xfs/533: Delete test since directory's extent count can never overflow
Date: Fri,  6 May 2022 15:27:46 +0530	[thread overview]
Message-ID: <20220506095746.1014345-1-chandan.babu@oracle.com> (raw)

The maximum file size that can be represented by the data fork extent counter
in the worst case occurs when all extents are 1 block in length and each block
is 1KB in size.

With XFS_MAX_EXTCNT_DATA_FORK_SMALL representing maximum extent count and with
1KB sized blocks, a file can reach upto,
(2^31) * 1KB = 2TB

This is much larger than the theoretical maximum size of a directory
i.e. XFS_DIR2_SPACE_SIZE * 3 = ~96GB.

Since a directory can never overflow its data fork extent counter, the xfs
kernel driver removed code which checked for such a situation before any
directory modification operation could be executed. Instead, the kernel driver
verifies the sanity of directory's data fork extent counter when the inode is
read from disk.

This commit removes the test xfs/533 due to the reasons mentioned above.

Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
---
 tests/xfs/533     | 170 ----------------------------------------------
 tests/xfs/533.out |  17 -----
 2 files changed, 187 deletions(-)
 delete mode 100755 tests/xfs/533
 delete mode 100644 tests/xfs/533.out

diff --git a/tests/xfs/533 b/tests/xfs/533
deleted file mode 100755
index b85b5298..00000000
--- a/tests/xfs/533
+++ /dev/null
@@ -1,170 +0,0 @@
-#! /bin/bash
-# SPDX-License-Identifier: GPL-2.0
-# Copyright (c) 2021 Chandan Babu R.  All Rights Reserved.
-#
-# FS QA Test 533
-#
-# Verify that XFS does not cause inode fork's extent count to overflow when
-# adding/removing directory entries.
-. ./common/preamble
-_begin_fstest auto quick dir hardlink symlink
-
-# Import common functions.
-. ./common/filter
-. ./common/inject
-. ./common/populate
-
-# real QA test starts here
-
-_supported_fs xfs
-_require_scratch
-_require_xfs_debug
-_require_test_program "punch-alternating"
-_require_xfs_io_error_injection "reduce_max_iextents"
-_require_xfs_io_error_injection "bmap_alloc_minlen_extent"
-
-_scratch_mkfs_sized $((1024 * 1024 * 1024)) | _filter_mkfs >> $seqres.full 2> $tmp.mkfs
-. $tmp.mkfs
-
-# Filesystems with directory block size greater than one FSB will not be tested,
-# since "7 (i.e. XFS_DA_NODE_MAXDEPTH + 1 data block + 1 free block) * 2 (fsb
-# count) = 14" is greater than the pseudo max extent count limit of 10.
-# Extending the pseudo max limit won't help either.  Consider the case where 1
-# FSB is 1k in size and 1 dir block is 64k in size (i.e. fsb count = 64). In
-# this case, the pseudo max limit has to be greater than 7 * 64 = 448 extents.
-if (( $dirbsize > $dbsize )); then
-	_notrun "Directory block size ($dirbsize) is larger than FSB size ($dbsize)"
-fi
-
-echo "Format and mount fs"
-_scratch_mkfs_sized $((1024 * 1024 * 1024)) >> $seqres.full
-_scratch_mount >> $seqres.full
-
-# Disable realtime inherit flag (if any) on root directory so that space on data
-# device gets fragmented rather than realtime device.
-_xfs_force_bdev data $SCRATCH_MNT
-
-echo "Consume free space"
-fillerdir=$SCRATCH_MNT/fillerdir
-nr_free_blks=$(stat -f -c '%f' $SCRATCH_MNT)
-nr_free_blks=$((nr_free_blks * 90 / 100))
-
-_fill_fs $((dbsize * nr_free_blks)) $fillerdir $dbsize 0 >> $seqres.full 2>&1
-
-echo "Create fragmented filesystem"
-for dentry in $(ls -1 $fillerdir/); do
-	$here/src/punch-alternating $fillerdir/$dentry >> $seqres.full
-done
-
-echo "Inject reduce_max_iextents error tag"
-_scratch_inject_error reduce_max_iextents 1
-
-echo "Inject bmap_alloc_minlen_extent error tag"
-_scratch_inject_error bmap_alloc_minlen_extent 1
-
-dent_len=255
-
-echo "* Create directory entries"
-
-testdir=$SCRATCH_MNT/testdir
-mkdir $testdir
-
-nr_dents=$((dbsize * 20 / dent_len))
-for i in $(seq 1 $nr_dents); do
-	dentry="$(printf "%0255d" $i)"
-	touch ${testdir}/$dentry >> $seqres.full 2>&1 || break
-done
-
-echo "Verify directory's extent count"
-nextents=$(_xfs_get_fsxattr nextents $testdir)
-if (( $nextents > 10 )); then
-	echo "Extent count overflow check failed: nextents = $nextents"
-	exit 1
-fi
-
-rm -rf $testdir
-
-echo "* Rename: Populate destination directory"
-
-dstdir=$SCRATCH_MNT/dstdir
-mkdir $dstdir
-
-nr_dents=$((dirbsize * 20 / dent_len))
-
-echo "Populate \$dstdir by moving new directory entries"
-for i in $(seq 1 $nr_dents); do
-	dentry="$(printf "%0255d" $i)"
-	dentry=${SCRATCH_MNT}/${dentry}
-	touch $dentry || break
-	mv $dentry $dstdir >> $seqres.full 2>&1 || break
-done
-
-rm $dentry
-
-echo "Verify \$dstdir's extent count"
-
-nextents=$(_xfs_get_fsxattr nextents $dstdir)
-if (( $nextents > 10 )); then
-	echo "Extent count overflow check failed: nextents = $nextents"
-	exit 1
-fi
-
-rm -rf $dstdir
-
-echo "* Create multiple hard links to a single file"
-
-testdir=$SCRATCH_MNT/testdir
-mkdir $testdir
-
-testfile=$SCRATCH_MNT/testfile
-touch $testfile
-
-nr_dents=$((dirbsize * 20 / dent_len))
-
-echo "Create multiple hardlinks"
-for i in $(seq 1 $nr_dents); do
-	dentry="$(printf "%0255d" $i)"
-	ln $testfile ${testdir}/${dentry} >> $seqres.full 2>&1 || break
-done
-
-rm $testfile
-
-echo "Verify directory's extent count"
-nextents=$(_xfs_get_fsxattr nextents $testdir)
-if (( $nextents > 10 )); then
-	echo "Extent count overflow check failed: nextents = $nextents"
-	exit 1
-fi
-
-rm -rf $testdir
-
-echo "* Create multiple symbolic links to a single file"
-
-testdir=$SCRATCH_MNT/testdir
-mkdir $testdir
-
-testfile=$SCRATCH_MNT/testfile
-touch $testfile
-
-nr_dents=$((dirbsize * 20 / dent_len))
-
-echo "Create multiple symbolic links"
-for i in $(seq 1 $nr_dents); do
-	dentry="$(printf "%0255d" $i)"
-	ln -s $testfile ${testdir}/${dentry} >> $seqres.full 2>&1 || break;
-done
-
-rm $testfile
-
-echo "Verify directory's extent count"
-nextents=$(_xfs_get_fsxattr nextents $testdir)
-if (( $nextents > 10 )); then
-	echo "Extent count overflow check failed: nextents = $nextents"
-	exit 1
-fi
-
-rm -rf $testdir
-
-# success, all done
-status=0
-exit
diff --git a/tests/xfs/533.out b/tests/xfs/533.out
deleted file mode 100644
index c3cbe2e0..00000000
--- a/tests/xfs/533.out
+++ /dev/null
@@ -1,17 +0,0 @@
-QA output created by 533
-Format and mount fs
-Consume free space
-Create fragmented filesystem
-Inject reduce_max_iextents error tag
-Inject bmap_alloc_minlen_extent error tag
-* Create directory entries
-Verify directory's extent count
-* Rename: Populate destination directory
-Populate $dstdir by moving new directory entries
-Verify $dstdir's extent count
-* Create multiple hard links to a single file
-Create multiple hardlinks
-Verify directory's extent count
-* Create multiple symbolic links to a single file
-Create multiple symbolic links
-Verify directory's extent count
-- 
2.30.2


             reply	other threads:[~2022-05-06  9:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-06  9:57 Chandan Babu R [this message]
2022-05-06 16:02 ` [PATCH] xfs/533: Delete test since directory's extent count can never overflow Darrick J. Wong
2022-05-06 20:42 ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220506095746.1014345-1-chandan.babu@oracle.com \
    --to=chandan.babu@oracle.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.