#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
+#
# FS QA Test No. 308
#
# Test recovery of "lost" CoW blocks:
# - Use the debugger to fake a leftover CoW extent
# - See if mount/umount fixes it
#
-#-----------------------------------------------------------------------
-# Copyright (c) 2016, 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 -rf $tmp.*
-}
+. ./common/preamble
+_begin_fstest auto quick clone
-# get standard environment, filters and checks
-. ./common/rc
+# Import common functions.
. ./common/filter
. ./common/reflink
# real QA test starts here
-_supported_os Linux
_supported_fs xfs
_require_scratch_reflink
-rm -f $seqres.full
-
echo "Format"
_scratch_mkfs > $seqres.full 2>&1
_scratch_mount >> $seqres.full
is_rmap=$($XFS_INFO_PROG $SCRATCH_MNT | grep -c "rmapbt=1")
-_scratch_unmount
+_scratch_xfs_unmount_dirty
_get_agf_data() {
field="$1"
echo "Remove the extent from the freesp btrees"
_set_agf_data "recs[1].blockcount" $((len - debris_len)) -c 'addr bnoroot'
_set_agf_data "recs[1].blockcount" $((len - debris_len)) -c 'addr cntroot'
-_set_agf_data freeblks $((agf_freeblks - debris_len))
_set_agf_data longest $((len - debris_len))
+_set_agf_data freeblks $((agf_freeblks - debris_len))
_set_sb_data fdblocks $((sb_fdblocks - debris_len))
echo "Add the extent to the refcount btree"
_dump_status "broken fs config" >> $seqres.full
-echo "Look for leftover warning in xfs_check"
-_scratch_xfs_check | _filter_leftover
-
echo "Look for leftover warning in xfs_repair"
_scratch_xfs_repair -n 2>&1 | _filter_leftover