Skip to content

Commit

Permalink
ext4: fsmap tests
Browse files Browse the repository at this point in the history
Test the GETFSMAP ioctl against ext4.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
  • Loading branch information
djwong authored and Eryu Guan committed Aug 3, 2017
1 parent 93d6007 commit fed9041
Show file tree
Hide file tree
Showing 7 changed files with 225 additions and 1 deletion.
76 changes: 76 additions & 0 deletions tests/ext4/027
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#! /bin/bash
# FS QA Test No. 027
#
# Check that getfsmap reports the BG metadata we're expecting.
#
#-----------------------------------------------------------------------
# Copyright (c) 2017, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------

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()
{
cd /
rm -f "$tmp".* $TEST_DIR/fsmap $TEST_DIR/testout
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter

# real QA test starts here
_supported_os Linux
_supported_fs ext4
_require_scratch
_require_xfs_io_command "fsmap"

rm -f "$seqres.full"

echo "Format and mount"
_scratch_mkfs > "$seqres.full" 2>&1
_scratch_mount

echo "Get fsmap" | tee -a $seqres.full
$XFS_IO_PROG -c 'fsmap' $SCRATCH_MNT > $TEST_DIR/fsmap
cat $TEST_DIR/fsmap >> $seqres.full

echo "Check fs metadata" | tee -a $seqres.full
x=$(grep -c 'static fs metadata' $TEST_DIR/fsmap)
test $x -gt 0 || echo "No fs metadata?"

echo "Check block bitmap" | tee -a $seqres.full
x=$(grep -c 'special 102:1' $TEST_DIR/fsmap)
test $x -gt 0 || echo "No block bitmaps?"

echo "Check inode bitmap" | tee -a $seqres.full
x=$(grep -c 'special 102:2' $TEST_DIR/fsmap)
test $x -gt 0 || echo "No inode bitmaps?"

echo "Check inodes" | tee -a $seqres.full
x=$(grep -c 'inodes' $TEST_DIR/fsmap)
test $x -gt 0 || echo "No inodes?"

# success, all done
status=0
exit
7 changes: 7 additions & 0 deletions tests/ext4/027.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
QA output created by 027
Format and mount
Get fsmap
Check fs metadata
Check block bitmap
Check inode bitmap
Check inodes
65 changes: 65 additions & 0 deletions tests/ext4/028
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#! /bin/bash
# FS QA Test No. 028
#
# Populate filesystem, check that fsmap -n10000 matches fsmap -n1.
#
#-----------------------------------------------------------------------
# Copyright (c) 2017, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------

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()
{
cd /
rm -f "$tmp".* $TEST_DIR/a $TEST_DIR/b
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/populate

# real QA test starts here
_supported_os Linux
_supported_fs ext4
_require_scratch
_require_populate_commands
_require_xfs_io_command "fsmap"

rm -f "$seqres.full"

echo "Format and mount"
_scratch_populate_cached nofill > $seqres.full 2>&1

echo "Compare fsmap" | tee -a $seqres.full
_scratch_mount
$XFS_IO_PROG -c 'fsmap -n 65536' $SCRATCH_MNT | grep -v 'EXT:' > $TEST_DIR/a
$XFS_IO_PROG -c 'fsmap -n 1' $SCRATCH_MNT | grep -v 'EXT:' > $TEST_DIR/b
cat $TEST_DIR/a $TEST_DIR/b >> $seqres.full

diff -uw $TEST_DIR/a $TEST_DIR/b

# success, all done
status=0
exit
3 changes: 3 additions & 0 deletions tests/ext4/028.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
QA output created by 028
Format and mount
Compare fsmap
66 changes: 66 additions & 0 deletions tests/ext4/029
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#! /bin/bash
# FS QA Test No. 029
#
# Check that getfsmap reports external log devices
#
#-----------------------------------------------------------------------
# Copyright (c) 2017, Oracle and/or its affiliates. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------

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()
{
cd /
rm -f "$tmp".* $TEST_DIR/fsmap $TEST_DIR/testout
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter

# real QA test starts here
_supported_os Linux
_supported_fs ext4
_require_logdev
_require_scratch
_require_xfs_io_command "fsmap"

rm -f "$seqres.full"

echo "Format and mount"
_scratch_mkfs > "$seqres.full" 2>&1
_scratch_mount

echo "Get fsmap" | tee -a $seqres.full
$XFS_IO_PROG -c 'fsmap' $SCRATCH_MNT >> $seqres.full
$XFS_IO_PROG -c 'fsmap' $SCRATCH_MNT | tr '[]()' ' ' > $TEST_DIR/fsmap

echo "Check device field of FS metadata and journalling log"
data_dev=$(grep 'static fs metadata' $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
journal_dev=$(grep 'journalling log' $TEST_DIR/fsmap | head -n 1 | awk '{print $2}')
test "${data_dev}" != "${journal_dev}" || echo "data ${data_dev} journal ${journal_dev}?"

# success, all done
status=0
exit
4 changes: 4 additions & 0 deletions tests/ext4/029.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
QA output created by 029
Format and mount
Get fsmap
Check device field of FS metadata and journalling log
5 changes: 4 additions & 1 deletion tests/ext4/group
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,11 @@
022 auto quick attr dangerous
023 auto quick scrub
024 auto quick encrypt dangerous
025 auto quick fuzzers dangerous
025 auto quick fuzzers dangerous
026 auto quick attr
027 auto quick fsmap
028 auto quick fsmap
029 auto quick fsmap
271 auto rw quick
301 aio auto ioctl rw stress defrag
302 aio auto ioctl rw stress defrag
Expand Down

0 comments on commit fed9041

Please sign in to comment.