Add xfsdump support for the security extended attributes namespace.
[xfstests-dev.git] / common.dump
index a2f79e5ad53828ccb5abe957b71638b0bf0f8b43..fa38afb9f2247fb2b005b9a27c752ef873f4b444 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Functions useful for xfsdump/xfsrestore tests
 #
-# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
 # 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of version 2 of the GNU General Public License as
@@ -228,23 +228,12 @@ _require_tape()
     _set_variable
 }
 
-_error()
-{
-    echo "Error: $*" | tee -a $here/$seq.full
-    echo "(see $here/$seq.full for details)"
-    status=1
-    exit
-}
-
 _wipe_fs()
 {
     _require_scratch
 
-    mkfs_xfs $SCRATCH_DEV>>$here/$seq.full  ||\
-       _error "mkfs failed"
-      
-    mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$here/$seq.full ||\
-       _error "mount failed"
+    _scratch_mkfs_xfs >>$here/$seq.full || _fail "mkfs failed"
+    _scratch_mount >>$here/$seq.full || _fail "mount failed"
 }
 
 # 
@@ -273,11 +262,11 @@ _cleanup()
     done
 
     if [ $status -ne $NOTRUNSTS ]; then
-       # Sleep added to stop _check_fs from complaining that the
+       # Sleep added to stop _check_scratch_fs from complaining that the
        # scratch_dev is still busy
        sleep 10
 
-       _check_fs $SCRATCH_DEV
+       _check_scratch_fs
     fi
 }
 
@@ -289,22 +278,20 @@ _cleanup()
 _stable_fs()
 {
     _saveddir=`pwd`; cd /
-    umount $SCRATCH_MNT >>$here/$seq.full ||\
-       _error "unmount failed"
-    mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$here/$seq.full ||\
-       _error "mount failed"
+    umount $SCRATCH_MNT >>$here/$seq.full || _fail "unmount failed"
+    _scratch_mount >>$here/$seq.full || _fail "mount failed"
     cd $_saveddir
 }
 
 #
-# Run src/fsstress to create a mixture of 
+# Run fsstress to create a mixture of 
 # files,dirs,links,symlinks
 #
 # Pinched from test 013.
 #
 _create_dumpdir_stress()
 {
-    echo "Creating directory system to dump using src/fsstress."
+    echo "Creating directory system to dump using fsstress."
 
     _wipe_fs
 
@@ -320,7 +307,7 @@ _create_dumpdir_stress()
     echo "-----------------------------------------------"
     echo "fsstress : $_param"
     echo "-----------------------------------------------"
-    if ! $here/src/fsstress $_param -s 1 $FSSTRESS_AVOID -n $_count -d $dump_dir >$tmp.out 2>&1
+    if ! $here/ltp/fsstress $_param -s 1 $FSSTRESS_AVOID -n $_count -d $dump_dir >$tmp.out 2>&1
     then
         echo "    fsstress (count=$_count) returned $? - see $here/$seq.full"
         
@@ -447,6 +434,25 @@ sub/n              8192    $nobody $nobody
 End-of-File
 }
 
+#
+# extended file attribute flags
+#
+_mk_fillconfig_xattr()
+{
+    cat <<End-of-File >$tmp.config
+# pathname     size    user    group    perm   name 
+#
+xflag_realtime 10      $nobody $nobody  777    XFS_XFLAG_REALTIME
+xflag_prealloc 10      $nobody $nobody  777    XFS_XFLAG_PREALLOC
+xflag_immutable 10     $nobody $nobody  777    XFS_XFLAG_IMMUTABLE
+xflag_append   10      $nobody $nobody  777    XFS_XFLAG_APPEND
+xflag_sync     10      $nobody $nobody  777    XFS_XFLAG_SYNC
+xflag_noatime  10      $nobody $nobody  777    XFS_XFLAG_NOATIME
+xflag_nodump   10      $nobody $nobody  777    XFS_XFLAG_NODUMP
+xflag_hasattr  10      $nobody $nobody  777    XFS_XFLAG_HASATTR
+End-of-File
+}
+
 #
 # Create a bunch of directories/files of different sizes
 # filled with data.
@@ -457,8 +463,7 @@ _do_create_dumpdir_fill()
 {
     echo "Creating directory system to dump using src/fill."
 
-    mkdir -p $dump_dir ||\
-       _error "cannot mkdir \"$dump_dir\""
+    mkdir -p $dump_dir || _fail "cannot mkdir \"$dump_dir\""
     cd $dump_dir
 
     $verbose && echo -n "Setup "
@@ -512,12 +517,19 @@ _do_create_dumpdir_fill()
        if [ -n "$perms" ]; then
            chmod $perms $file
        fi
+       # extended attributes (EA)
        if [ -n "$ea_name" -a -n "$ea_value" ]; then
            if [ "X$namespace" = "Xroot" ]; then
                attr -R -s $ea_name -V $ea_value $file
            else
                attr -s $ea_name -V $ea_value $file
            fi
+       # extended file attribute flags - no value - NOT EAs
+       elif [ -n "$ea_name" -a -z "$ea_value" ]; then
+           # set the flag
+           # TODO XXX
+            # use xfs_io to send the ioctl
+           :
        fi
        $verbose && echo -n "."
     done
@@ -529,11 +541,11 @@ _do_create_dumpdir_fill()
 _create_dumpdir_largefile()
 {
     _wipe_fs
-    mkdir -p $dump_dir ||\
-       _error "cannot mkdir \"$dump_dir\""
+    mkdir -p $dump_dir || _fail "cannot mkdir \"$dump_dir\""
     _largesize=4294967297
     _largefile=$dump_dir/largefile
     echo "dd a largefile at offset $_largesize"
+    POSIXLY_CORRECT=yes \
     dd if=/dev/zero of=$_largefile bs=1 seek=$_largesize count=10 2>&1
     _stable_fs
 }      
@@ -602,8 +614,7 @@ _do_create_dump_symlinks()
 {
     echo "Creating directory system of symlinks to dump."
 
-    mkdir -p $dump_dir ||\
-       _error "cannot mkdir \"$dump_dir\""
+    mkdir -p $dump_dir || _fail "cannot mkdir \"$dump_dir\""
     cd $dump_dir
 
     $verbose && echo -n "Setup "
@@ -725,8 +736,7 @@ _create_dumpdir_hardlinks()
     _wipe_fs
     echo "Creating directory system of hardlinks to incrementally dump."
 
-    mkdir -p $dump_dir ||\
-       _error "cannot mkdir \"$dump_dir\""
+    mkdir -p $dump_dir || _fail "cannot mkdir \"$dump_dir\""
     cd $dump_dir
 
     _create_hardset $_numsets
@@ -738,14 +748,17 @@ _create_dumpdir_hardlinks()
 #
 # Filter for ls
 # Filter out dates on symlinks and char devices
+# Filter out size on directories because this can differ
+# when transitioning to long inode numbers (ie. 64 bits).
 #
 _ls_filter()
 {
   $AWK_PROG '
         /^l/ { date = $8; sub(date,"DATE"); print}
         /^c/ { date = $9; sub(date,"DATE"); print}
+        /^d/ { size = $5; sub(size,"SIZE"); print}
         {print}' \
-  | sed -e 's/total [0-9][0-9]*/total TOTAL/'
+  | sed -e 's/total [0-9][0-9]*/total TOTAL/' -e 's/[ \t][ \t]*/ /g'
 }
 
 
@@ -842,12 +855,12 @@ _parse_args()
         case $1
         in
         -f)
-            [ -z "$2" ] && _error "missing argument for -f"
+            [ -z "$2" ] && _fail "missing argument for -f"
            dumptape=$2 
            shift
             ;;
         -L)
-            [ -z "$2" ] && _error "missing argument for -L"
+            [ -z "$2" ] && _fail "missing argument for -L"
            session_label=$2
            shift
             ;;
@@ -868,12 +881,12 @@ _parse_args()
             do_quota_check=false
             ;;
         -l)
-            [ -z "$2" ] && _error "missing argument for -l"
+            [ -z "$2" ] && _fail "missing argument for -l"
            dump_args="$dump_args -l$2"
            shift
             ;;
        *)
-            _error "invalid argument to common.dump function: $1"
+            _fail "invalid argument to common.dump function: $1"
             ;;
         esac
        shift
@@ -962,8 +975,7 @@ _do_dump_multi_file()
 _prepare_restore_dir()
 {
     rm -rf $restore_dir
-    mkdir $restore_dir ||\
-       _error "failed to mkdir $restore_dir"
+    mkdir $restore_dir || _fail "failed to mkdir $restore_dir"
 }
 
 
@@ -1160,7 +1172,7 @@ _get_eas_on_path()
     # sort |\
 # and this is now the Linux way...
     echo "User names"
-    getfattr --absolute-names -Rh $_path |\
+    getfattr --absolute-names -Rh -m user $_path |\
     perl -wn -e '
        if (m/^# file: (\S+)/) { $file = $1 }
        elsif (m/^user\.(\w+)/) { print $file, " ",$1,"\n" }' |\
@@ -1169,11 +1181,23 @@ _get_eas_on_path()
        attr -g $ea_name $file
     done
 
+    if [ "$USE_ATTR_SECURE" = yes ]; then
+       echo "Security names"
+       getfattr --absolute-names -Rh -m security $_path |\
+       perl -wn -e '
+           if (m/^# file: (\S+)/) { $file = $1 }
+           elsif (m/^security\.(\w+)/) { print $file, " ",$1,"\n" }' |\
+       sort |\
+       while read file ea_name; do
+           attr -g $ea_name $file
+       done
+    fi
+
     echo "Root names"
-    getfattr --absolute-names -Rh -m xfsroot $_path |\
+    getfattr --absolute-names -Rh -m trusted $_path |\
     perl -wn -e '
        if (m/^# file: (\S+)/) { $file = $1 }
-       elsif (m/^xfsroot\.(\w+)/) { print $file, " ",$1,"\n" }' |\
+       elsif (m/^trusted\.(\w+)/) { print $file, " ",$1,"\n" }' |\
     sort |\
     while read file ea_name; do
        attr -R -g $ea_name $file