btrfs: Add test to check if shrink works well with fstrim

There is a bug in trim code which leads to fstrim accessing beyond
device boundary.

The test case will check if fstrim, then shrink, then fstrim, all of
them works without problem.

The fix is titled "btrfs: trim: fix underflow in trim length to prevent
access beyond device boundary".

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Qu Wenruo
2020-07-30 20:17:35 +08:00
committed by Eryu Guan
parent 2b3de458c4
commit 912521c9fa
3 changed files with 65 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved.
#
# FS QA Test 217
#
# Test if the following workload would cause problem:
# - fstrim
# - shrink device
# - fstrim
#
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.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# remove previous $seqres.full before test
rm -f $seqres.full
# real QA test starts here
# Modify as appropriate.
_supported_fs btrfs
_supported_os Linux
_require_scratch_size $((5 * 1024 * 1024)) #kB
_require_fstrim
# Create a 5G fs
_scratch_mkfs_sized $((5 * 1024 * 1024 * 1024)) >> $seqres.full
_scratch_mount
# Fstrim to populate the device->alloc_status CHUNK_TRIMMED bits
$FSTRIM_PROG -v $SCRATCH_MNT >> $seqres.full 2>&1 || \
_notrun "FSTRIM not supported"
# Shrink the fs to 4G, so the existing CHUNK_TRIMMED bits are beyond
# device boundary
$BTRFS_UTIL_PROG filesystem resize 1:-1G "$SCRATCH_MNT" >> $seqres.full
# Do fstrim again to trigger the bug
$FSTRIM_PROG -v $SCRATCH_MNT >> $seqres.full
echo "Silence is golden"
# success, all done
status=0
exit
+2
View File
@@ -0,0 +1,2 @@
QA output created by 217
Silence is golden
+1
View File
@@ -219,3 +219,4 @@
214 auto quick send snapshot
215 auto quick
216 auto quick seed
217 auto quick trim dangerous