Verify extended attributes are not lost after multi-stream
xfsdump/xfsrestore of wholly-sparse files. xfsrestore did not
recognize that if the LAST header was reached with no restoredsz set,
(i.e the LAST header is the only header), the following warning is
displayed:
"partial_reg: Out of records. Extend attrs applied early."
and the extended attributes on the current and following restored
files are lost.
Signed-off-by: Rich Johnston <rjohnston@xxxxxxx>
---
tests/xfs/350 | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/350.out | 2
tests/xfs/group | 1
3 files changed, 137 insertions(+)
Index: b/tests/xfs/350
===================================================================
--- /dev/null
+++ b/tests/xfs/350
@@ -0,0 +1,134 @@
+#! /bin/bash
+# FS QA Test No. 350
+#
+# Verify extended attributes are not lost after multi-stream
+# xfsdump/xfsrestore of wholly-sparse files.
+
+#-----------------------------------------------------------------------
+# Copyright (c) 2013 SGI. 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=0 # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/dump
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+_require_multi_stream
+
+# dir where we'll restore
+RESTOREDIR=$SCRATCH_MNT/restore
+
+# subdir used for dump/restore
+DUMPDIR=dumpsrc
+
+# test extended attributes
+attr_name=testattr
+attr_value=1234
+
+# setup for test
+rm -rf $seqres.full
+mkdir -p $RESTOREDIR
+mkdir -p $SCRATCH_MNT/$DUMPDIR
+
+# cleanup for next dump/restore.
+_clean_dirs()
+{
+ rm -rf $SCRATCH_MNT/$DUMPDIR/*
+ rm -rf $RESTOREDIR/*
+ rm -f $tmp.stream?
+}
+
+# set the extended attributes on the test files.
+_set_attrs()
+{
+ for fname in $(ls -dD $SCRATCH_MNT/$DUMPDIR/*); do
+ attr -Rs $attr_name -V $attr_value $fname \
+ 2>&1 >> $seqres.full || _fail "could not set ATTR for $fname"
+ done
+}
+
+# perform a dump and restore.
+_do_dump_restore()
+{
+ $XFSDUMP_PROG -L session -M label1 -M label2 -f $tmp.stream1 \
+ -f $tmp.stream2 $SCRATCH_MNT -s $DUMPDIR \
+ 2>&1 >> $seqres.full || _fail "dump failed"
+ $XFSRESTORE_PROG -F -f $tmp.stream1 -f $tmp.stream2 $RESTOREDIR \
+ 2>&1 >> $seqres.full || _fail "restore failed"
+}
+
+# verify the restored files extended attributes and
+# echo the error (if any) so the test will continue
+_verify_attrs()
+{
+ for fname in $(ls -dD $RESTOREDIR/$DUMPDIR/*); do
+ attr -Rg $attr_name $fname 2>&1 | tee -a $seqres.full | \
+ grep $attr_value 2>&1 >> $seqres.full || \
+ echo "ATTR for $fname DOES NOT match"
+ done
+}
+
+# create files for test 1, a large file so the sparse file
+# is in the next stream.
+_create_test1_files()
+{
+
+ dd if=/dev/zero of=$SCRATCH_MNT/$DUMPDIR/10MB bs=1MB \
+ count=10 2>&1 >> $seqres.full | _filter_dd
+ truncate --size=1t $SCRATCH_MNT/$DUMPDIR/sparse0 2>&1 \
+ >> $seqres.full
+}
+
+# create 4 sparse files for test 2
+_create_test2_files()
+{
+ for i in `seq 1 4`; do
+ truncate --size=1t $SCRATCH_MNT/$DUMPDIR/sparse$i 2>&1 >> \
+ $seqres.full || _fail "failed to create sparse \"$i\""
+ done
+}
+echo "Silence is golden."
+echo "Starting Test 1" >> $seqres.full
+_clean_dirs
+_create_test1_files
+_set_attrs
+_do_dump_restore
+_verify_attrs
+
+echo "Starting Test 2" >> $seqres.full
+_clean_dirs
+_create_test2_files
+_set_attrs
+_do_dump_restore
+_verify_attrs
+
+# success, all done
+exit
Index: b/tests/xfs/350.out
===================================================================
--- /dev/null
+++ b/tests/xfs/350.out
@@ -0,0 +1,2 @@
+QA output created by 350
+Silence is golden.
Index: b/tests/xfs/group
===================================================================
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -179,3 +179,4 @@
297 auto freeze
298 auto attr symlink quick
299 auto quota
+350 dump auto
|