All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/1] xfstests: add log attribute replay test
@ 2022-02-01 17:09 Catherine Hoang
  2022-02-01 17:09 ` [PATCH v6 1/1] xfstests: Add Log Attribute Replay test Catherine Hoang
  0 siblings, 1 reply; 4+ messages in thread
From: Catherine Hoang @ 2022-02-01 17:09 UTC (permalink / raw)
  To: linux-xfs, fstests

Hi all,

This patch aims to provide better test coverage for Allison’s delayed
attribute set. These tests aim to cover cases where attributes are added,
removed, and overwritten in each format (shortform, leaf, node). Error
inject is used to replay these operations from the log.

The following cases are covered in this test:
- empty, add/remove inline attr		(64 bytes)
- empty, add/remove internal attr	(1kB)
- empty, add/remove remote attr		(64kB)
- inline, add/remove inline attr	(64 bytes)
- inline, add/remove internal attr	(1kB)
- inline, add/remove remote attr	(64kB)
- extent, add/remove internal attr	(1kB)
- extent, add multiple internal attr	(inject error on split operation)
- extent, add multiple internal attr	(inject error on transition to node)
- extent, add/remove remote attr	(64kB)
- btree, add/remove multiple internal	(1kB)
- btree, add/remove remote attr         (64kB)
- overwrite shortform attr
- overwrite leaf attr
- overwrite node attr 

Running these tests require the corresponding kernel and xfsprogs changes
that add the new error tags da_leaf_split and larp_leaf_to_node.

v5->v6:
- Renamed larp_leaf_split to da_leaf_split
- Updated copyright year to 2022

v4->v5:
- Changed mode of 543.out to 644

v3->v4:
- Removed leading underscores on functions
- Filtered $SCRATCH_MNT on md5sum check
- Removed unnecessary unmount code
- Replaced _scratch_mkfs_xfs with _scratch_mkfs

Suggestions and feedback are appreciated!

Catherine

Allison Henderson (1):
  xfstests: Add Log Attribute Replay test

 tests/xfs/543     | 171 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/543.out | 149 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 320 insertions(+)
 create mode 100755 tests/xfs/543
 create mode 100644 tests/xfs/543.out

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v6 1/1] xfstests: Add Log Attribute Replay test
  2022-02-01 17:09 [PATCH v6 0/1] xfstests: add log attribute replay test Catherine Hoang
@ 2022-02-01 17:09 ` Catherine Hoang
  2022-02-01 20:13   ` Darrick J. Wong
  0 siblings, 1 reply; 4+ messages in thread
From: Catherine Hoang @ 2022-02-01 17:09 UTC (permalink / raw)
  To: linux-xfs, fstests

From: Allison Henderson <allison.henderson@oracle.com>

This patch adds tests to exercise the log attribute error
inject and log replay. These tests aim to cover cases where attributes
are added, removed, and overwritten in each format (shortform, leaf,
node). Error inject is used to replay these operations from the log.

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 tests/xfs/543     | 171 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/543.out | 149 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 320 insertions(+)
 create mode 100755 tests/xfs/543
 create mode 100644 tests/xfs/543.out

diff --git a/tests/xfs/543 b/tests/xfs/543
new file mode 100755
index 00000000..ae955660
--- /dev/null
+++ b/tests/xfs/543
@@ -0,0 +1,171 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
+#
+# FS QA Test 543
+#
+# Log attribute replay test
+#
+. ./common/preamble
+_begin_fstest auto quick attr
+
+# get standard environment, filters and checks
+. ./common/filter
+. ./common/attr
+. ./common/inject
+
+_cleanup()
+{
+	rm -f $tmp.*
+	echo 0 > /sys/fs/xfs/debug/larp
+}
+
+test_attr_replay()
+{
+	testfile=$SCRATCH_MNT/$1
+	attr_name=$2
+	attr_value=$3
+	flag=$4
+	error_tag=$5
+
+	# Inject error
+	_scratch_inject_error $error_tag
+
+	# Set attribute
+	echo "$attr_value" | ${ATTR_PROG} -$flag "$attr_name" $testfile 2>&1 | \
+			    _filter_scratch
+
+	# FS should be shut down, touch will fail
+	touch $testfile 2>&1 | _filter_scratch
+
+	# Remount to replay log
+	_scratch_remount_dump_log >> $seqres.full
+
+	# FS should be online, touch should succeed
+	touch $testfile
+
+	# Verify attr recovery
+	{ $ATTR_PROG -g $attr_name $testfile | md5sum; } 2>&1 | _filter_scratch
+
+	echo ""
+}
+
+create_test_file()
+{
+	filename=$SCRATCH_MNT/$1
+	count=$2
+	attr_value=$3
+
+	touch $filename
+
+	for i in `seq $count`
+	do
+		$ATTR_PROG -s "attr_name$i" -V $attr_value $filename >> \
+			$seqres.full
+	done
+}
+
+# real QA test starts here
+_supported_fs xfs
+
+_require_scratch
+_require_attrs
+_require_xfs_io_error_injection "larp"
+_require_xfs_io_error_injection "da_leaf_split"
+_require_xfs_io_error_injection "larp_leaf_to_node"
+_require_xfs_sysfs debug/larp
+
+# turn on log attributes
+echo 1 > /sys/fs/xfs/debug/larp
+
+attr16="0123456789ABCDEF"
+attr64="$attr16$attr16$attr16$attr16"
+attr256="$attr64$attr64$attr64$attr64"
+attr1k="$attr256$attr256$attr256$attr256"
+attr4k="$attr1k$attr1k$attr1k$attr1k"
+attr8k="$attr4k$attr4k"
+attr16k="$attr8k$attr8k"
+attr32k="$attr16k$attr16k"
+attr64k="$attr32k$attr32k"
+
+echo "*** mkfs"
+_scratch_mkfs >/dev/null
+
+echo "*** mount FS"
+_scratch_mount
+
+# empty, inline
+create_test_file empty_file1 0
+test_attr_replay empty_file1 "attr_name" $attr64 "s" "larp"
+test_attr_replay empty_file1 "attr_name" $attr64 "r" "larp"
+
+# empty, internal
+create_test_file empty_file2 0
+test_attr_replay empty_file2 "attr_name" $attr1k "s" "larp"
+test_attr_replay empty_file2 "attr_name" $attr1k "r" "larp"
+
+# empty, remote
+create_test_file empty_file3 0
+test_attr_replay empty_file3 "attr_name" $attr64k "s" "larp"
+test_attr_replay empty_file3 "attr_name" $attr64k "r" "larp"
+
+# inline, inline
+create_test_file inline_file1 1 $attr16
+test_attr_replay inline_file1 "attr_name2" $attr64 "s" "larp"
+test_attr_replay inline_file1 "attr_name2" $attr64 "r" "larp"
+
+# inline, internal
+create_test_file inline_file2 1 $attr16
+test_attr_replay inline_file2 "attr_name2" $attr1k "s" "larp"
+test_attr_replay inline_file2 "attr_name2" $attr1k "r" "larp"
+
+# inline, remote
+create_test_file inline_file3 1 $attr16
+test_attr_replay inline_file3 "attr_name2" $attr64k "s" "larp"
+test_attr_replay inline_file3 "attr_name2" $attr64k "r" "larp"
+
+# extent, internal
+create_test_file extent_file1 1 $attr1k
+test_attr_replay extent_file1 "attr_name2" $attr1k "s" "larp"
+test_attr_replay extent_file1 "attr_name2" $attr1k "r" "larp"
+
+# extent, inject error on split
+create_test_file extent_file2 3 $attr1k
+test_attr_replay extent_file2 "attr_name4" $attr1k "s" "da_leaf_split"
+
+# extent, inject error on fork transition
+create_test_file extent_file3 3 $attr1k
+test_attr_replay extent_file3 "attr_name4" $attr1k "s" "larp_leaf_to_node"
+
+# extent, remote
+create_test_file extent_file4 1 $attr1k
+test_attr_replay extent_file4 "attr_name2" $attr64k "s" "larp"
+test_attr_replay extent_file4 "attr_name2" $attr64k "r" "larp"
+
+# remote, internal
+create_test_file remote_file1 1 $attr64k
+test_attr_replay remote_file1 "attr_name2" $attr1k "s" "larp"
+test_attr_replay remote_file1 "attr_name2" $attr1k "r" "larp"
+
+# remote, remote
+create_test_file remote_file2 1 $attr64k
+test_attr_replay remote_file2 "attr_name2" $attr64k "s" "larp"
+test_attr_replay remote_file2 "attr_name2" $attr64k "r" "larp"
+
+# replace shortform
+create_test_file sf_file 2 $attr64
+test_attr_replay sf_file "attr_name2" $attr64 "s" "larp"
+
+# replace leaf
+create_test_file leaf_file 2 $attr1k
+test_attr_replay leaf_file "attr_name2" $attr1k "s" "larp"
+
+# replace node
+create_test_file node_file 1 $attr64k
+$ATTR_PROG -s "attr_name2" -V $attr1k $SCRATCH_MNT/node_file \
+		>> $seqres.full
+test_attr_replay node_file "attr_name2" $attr1k "s" "larp"
+
+echo "*** done"
+status=0
+exit
diff --git a/tests/xfs/543.out b/tests/xfs/543.out
new file mode 100644
index 00000000..075eecb3
--- /dev/null
+++ b/tests/xfs/543.out
@@ -0,0 +1,149 @@
+QA output created by 543
+*** mkfs
+*** mount FS
+attr_set: Input/output error
+Could not set "attr_name" for SCRATCH_MNT/empty_file1
+touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
+db6747306e971b6e3fd474aae10159a1  -
+
+attr_remove: Input/output error
+Could not remove "attr_name" for SCRATCH_MNT/empty_file1
+touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
+attr_get: No data available
+Could not get "attr_name" for SCRATCH_MNT/empty_file1
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name" for SCRATCH_MNT/empty_file2
+touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
+d489897d7ba99c2815052ae7dca29097  -
+
+attr_remove: Input/output error
+Could not remove "attr_name" for SCRATCH_MNT/empty_file2
+touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
+attr_get: No data available
+Could not get "attr_name" for SCRATCH_MNT/empty_file2
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name" for SCRATCH_MNT/empty_file3
+touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
+0ba8b18d622a11b5ff89336761380857  -
+
+attr_remove: Input/output error
+Could not remove "attr_name" for SCRATCH_MNT/empty_file3
+touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
+attr_get: No data available
+Could not get "attr_name" for SCRATCH_MNT/empty_file3
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/inline_file1
+touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
+49f4f904e12102a3423d8ab3f845e6e8  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/inline_file1
+touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/inline_file1
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/inline_file2
+touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
+6a0bd8b5aaa619bcd51f2ead0208f1bb  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/inline_file2
+touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/inline_file2
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/inline_file3
+touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
+3276329baa72c32f0a4a5cb0dbf813df  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/inline_file3
+touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/inline_file3
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/extent_file1
+touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
+8c6a952b2dbecaa5a308a00d2022e599  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/extent_file1
+touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/extent_file1
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name4" for SCRATCH_MNT/extent_file2
+touch: cannot touch 'SCRATCH_MNT/extent_file2': Input/output error
+c5ae4d474e547819a8807cfde66daba2  -
+
+attr_set: Input/output error
+Could not set "attr_name4" for SCRATCH_MNT/extent_file3
+touch: cannot touch 'SCRATCH_MNT/extent_file3': Input/output error
+17bae95be35ce7a0e6d4327b67da932b  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/extent_file4
+touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
+d17d94c39a964409b8b8173a51f8e951  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/extent_file4
+touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/extent_file4
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/remote_file1
+touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
+4104e21da013632e636cdd044884ca94  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/remote_file1
+touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/remote_file1
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/remote_file2
+touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
+9ac16e37ecd6f6c24de3f724c49199a8  -
+
+attr_remove: Input/output error
+Could not remove "attr_name2" for SCRATCH_MNT/remote_file2
+touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
+attr_get: No data available
+Could not get "attr_name2" for SCRATCH_MNT/remote_file2
+d41d8cd98f00b204e9800998ecf8427e  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/sf_file
+touch: cannot touch 'SCRATCH_MNT/sf_file': Input/output error
+33bc798a506b093a7c2cdea122a738d7  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/leaf_file
+touch: cannot touch 'SCRATCH_MNT/leaf_file': Input/output error
+dec146c586813046f4b876bcecbaa713  -
+
+attr_set: Input/output error
+Could not set "attr_name2" for SCRATCH_MNT/node_file
+touch: cannot touch 'SCRATCH_MNT/node_file': Input/output error
+e97ce3d15f9f28607b51f76bf8b7296c  -
+
+*** done
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v6 1/1] xfstests: Add Log Attribute Replay test
  2022-02-01 17:09 ` [PATCH v6 1/1] xfstests: Add Log Attribute Replay test Catherine Hoang
@ 2022-02-01 20:13   ` Darrick J. Wong
  2022-02-01 22:09     ` Catherine Hoang
  0 siblings, 1 reply; 4+ messages in thread
From: Darrick J. Wong @ 2022-02-01 20:13 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs, fstests

On Tue, Feb 01, 2022 at 05:09:52PM +0000, Catherine Hoang wrote:
> From: Allison Henderson <allison.henderson@oracle.com>
> 
> This patch adds tests to exercise the log attribute error
> inject and log replay. These tests aim to cover cases where attributes
> are added, removed, and overwritten in each format (shortform, leaf,
> node). Error inject is used to replay these operations from the log.
> 
> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
> ---
>  tests/xfs/543     | 171 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/543.out | 149 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 320 insertions(+)
>  create mode 100755 tests/xfs/543
>  create mode 100644 tests/xfs/543.out
> 
> diff --git a/tests/xfs/543 b/tests/xfs/543
> new file mode 100755
> index 00000000..ae955660
> --- /dev/null
> +++ b/tests/xfs/543
> @@ -0,0 +1,171 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
> +#
> +# FS QA Test 543
> +#
> +# Log attribute replay test
> +#
> +. ./common/preamble
> +_begin_fstest auto quick attr
> +
> +# get standard environment, filters and checks
> +. ./common/filter
> +. ./common/attr
> +. ./common/inject
> +
> +_cleanup()
> +{
> +	rm -f $tmp.*
> +	echo 0 > /sys/fs/xfs/debug/larp

Cleanup functions can run even if the _require functions decide to
_notrun the test, so I think this ought to be:

	test -w /sys/fs/xfs/debug/larp && \
		echo 0 > /sys/fs/xfs/debug/larp
> +}
> +
> +test_attr_replay()
> +{
> +	testfile=$SCRATCH_MNT/$1
> +	attr_name=$2
> +	attr_value=$3
> +	flag=$4
> +	error_tag=$5
> +
> +	# Inject error
> +	_scratch_inject_error $error_tag
> +
> +	# Set attribute
> +	echo "$attr_value" | ${ATTR_PROG} -$flag "$attr_name" $testfile 2>&1 | \
> +			    _filter_scratch
> +
> +	# FS should be shut down, touch will fail
> +	touch $testfile 2>&1 | _filter_scratch
> +
> +	# Remount to replay log
> +	_scratch_remount_dump_log >> $seqres.full
> +
> +	# FS should be online, touch should succeed
> +	touch $testfile
> +
> +	# Verify attr recovery
> +	{ $ATTR_PROG -g $attr_name $testfile | md5sum; } 2>&1 | _filter_scratch
> +
> +	echo ""
> +}
> +
> +create_test_file()
> +{
> +	filename=$SCRATCH_MNT/$1
> +	count=$2
> +	attr_value=$3
> +
> +	touch $filename
> +
> +	for i in `seq $count`
> +	do
> +		$ATTR_PROG -s "attr_name$i" -V $attr_value $filename >> \
> +			$seqres.full
> +	done
> +}
> +
> +# real QA test starts here
> +_supported_fs xfs
> +
> +_require_scratch
> +_require_attrs
> +_require_xfs_io_error_injection "larp"
> +_require_xfs_io_error_injection "da_leaf_split"
> +_require_xfs_io_error_injection "larp_leaf_to_node"
> +_require_xfs_sysfs debug/larp

This only tests that the sysfs control file exists, not that it's
writable.  Granted, debug knobs are writable by default, but we should
be careful here and:

test -w /sys/fs/xfs/debug/larp || _notrun "larp knob not writable"

So this test won't fail if (say) someone has chmod a-w the debug knob
since the module loaded.

With that fixed, I think this test will be ready to go the next time
around.

--D

> +
> +# turn on log attributes
> +echo 1 > /sys/fs/xfs/debug/larp
> +
> +attr16="0123456789ABCDEF"
> +attr64="$attr16$attr16$attr16$attr16"
> +attr256="$attr64$attr64$attr64$attr64"
> +attr1k="$attr256$attr256$attr256$attr256"
> +attr4k="$attr1k$attr1k$attr1k$attr1k"
> +attr8k="$attr4k$attr4k"
> +attr16k="$attr8k$attr8k"
> +attr32k="$attr16k$attr16k"
> +attr64k="$attr32k$attr32k"
> +
> +echo "*** mkfs"
> +_scratch_mkfs >/dev/null
> +
> +echo "*** mount FS"
> +_scratch_mount
> +
> +# empty, inline
> +create_test_file empty_file1 0
> +test_attr_replay empty_file1 "attr_name" $attr64 "s" "larp"
> +test_attr_replay empty_file1 "attr_name" $attr64 "r" "larp"
> +
> +# empty, internal
> +create_test_file empty_file2 0
> +test_attr_replay empty_file2 "attr_name" $attr1k "s" "larp"
> +test_attr_replay empty_file2 "attr_name" $attr1k "r" "larp"
> +
> +# empty, remote
> +create_test_file empty_file3 0
> +test_attr_replay empty_file3 "attr_name" $attr64k "s" "larp"
> +test_attr_replay empty_file3 "attr_name" $attr64k "r" "larp"
> +
> +# inline, inline
> +create_test_file inline_file1 1 $attr16
> +test_attr_replay inline_file1 "attr_name2" $attr64 "s" "larp"
> +test_attr_replay inline_file1 "attr_name2" $attr64 "r" "larp"
> +
> +# inline, internal
> +create_test_file inline_file2 1 $attr16
> +test_attr_replay inline_file2 "attr_name2" $attr1k "s" "larp"
> +test_attr_replay inline_file2 "attr_name2" $attr1k "r" "larp"
> +
> +# inline, remote
> +create_test_file inline_file3 1 $attr16
> +test_attr_replay inline_file3 "attr_name2" $attr64k "s" "larp"
> +test_attr_replay inline_file3 "attr_name2" $attr64k "r" "larp"
> +
> +# extent, internal
> +create_test_file extent_file1 1 $attr1k
> +test_attr_replay extent_file1 "attr_name2" $attr1k "s" "larp"
> +test_attr_replay extent_file1 "attr_name2" $attr1k "r" "larp"
> +
> +# extent, inject error on split
> +create_test_file extent_file2 3 $attr1k
> +test_attr_replay extent_file2 "attr_name4" $attr1k "s" "da_leaf_split"
> +
> +# extent, inject error on fork transition
> +create_test_file extent_file3 3 $attr1k
> +test_attr_replay extent_file3 "attr_name4" $attr1k "s" "larp_leaf_to_node"
> +
> +# extent, remote
> +create_test_file extent_file4 1 $attr1k
> +test_attr_replay extent_file4 "attr_name2" $attr64k "s" "larp"
> +test_attr_replay extent_file4 "attr_name2" $attr64k "r" "larp"
> +
> +# remote, internal
> +create_test_file remote_file1 1 $attr64k
> +test_attr_replay remote_file1 "attr_name2" $attr1k "s" "larp"
> +test_attr_replay remote_file1 "attr_name2" $attr1k "r" "larp"
> +
> +# remote, remote
> +create_test_file remote_file2 1 $attr64k
> +test_attr_replay remote_file2 "attr_name2" $attr64k "s" "larp"
> +test_attr_replay remote_file2 "attr_name2" $attr64k "r" "larp"
> +
> +# replace shortform
> +create_test_file sf_file 2 $attr64
> +test_attr_replay sf_file "attr_name2" $attr64 "s" "larp"
> +
> +# replace leaf
> +create_test_file leaf_file 2 $attr1k
> +test_attr_replay leaf_file "attr_name2" $attr1k "s" "larp"
> +
> +# replace node
> +create_test_file node_file 1 $attr64k
> +$ATTR_PROG -s "attr_name2" -V $attr1k $SCRATCH_MNT/node_file \
> +		>> $seqres.full
> +test_attr_replay node_file "attr_name2" $attr1k "s" "larp"
> +
> +echo "*** done"
> +status=0
> +exit
> diff --git a/tests/xfs/543.out b/tests/xfs/543.out
> new file mode 100644
> index 00000000..075eecb3
> --- /dev/null
> +++ b/tests/xfs/543.out
> @@ -0,0 +1,149 @@
> +QA output created by 543
> +*** mkfs
> +*** mount FS
> +attr_set: Input/output error
> +Could not set "attr_name" for SCRATCH_MNT/empty_file1
> +touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
> +db6747306e971b6e3fd474aae10159a1  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name" for SCRATCH_MNT/empty_file1
> +touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
> +attr_get: No data available
> +Could not get "attr_name" for SCRATCH_MNT/empty_file1
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name" for SCRATCH_MNT/empty_file2
> +touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
> +d489897d7ba99c2815052ae7dca29097  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name" for SCRATCH_MNT/empty_file2
> +touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
> +attr_get: No data available
> +Could not get "attr_name" for SCRATCH_MNT/empty_file2
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name" for SCRATCH_MNT/empty_file3
> +touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
> +0ba8b18d622a11b5ff89336761380857  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name" for SCRATCH_MNT/empty_file3
> +touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
> +attr_get: No data available
> +Could not get "attr_name" for SCRATCH_MNT/empty_file3
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/inline_file1
> +touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
> +49f4f904e12102a3423d8ab3f845e6e8  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file1
> +touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/inline_file1
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/inline_file2
> +touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
> +6a0bd8b5aaa619bcd51f2ead0208f1bb  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file2
> +touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/inline_file2
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/inline_file3
> +touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
> +3276329baa72c32f0a4a5cb0dbf813df  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file3
> +touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/inline_file3
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/extent_file1
> +touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
> +8c6a952b2dbecaa5a308a00d2022e599  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/extent_file1
> +touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/extent_file1
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name4" for SCRATCH_MNT/extent_file2
> +touch: cannot touch 'SCRATCH_MNT/extent_file2': Input/output error
> +c5ae4d474e547819a8807cfde66daba2  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name4" for SCRATCH_MNT/extent_file3
> +touch: cannot touch 'SCRATCH_MNT/extent_file3': Input/output error
> +17bae95be35ce7a0e6d4327b67da932b  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/extent_file4
> +touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
> +d17d94c39a964409b8b8173a51f8e951  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/extent_file4
> +touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/extent_file4
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/remote_file1
> +touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
> +4104e21da013632e636cdd044884ca94  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/remote_file1
> +touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/remote_file1
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/remote_file2
> +touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
> +9ac16e37ecd6f6c24de3f724c49199a8  -
> +
> +attr_remove: Input/output error
> +Could not remove "attr_name2" for SCRATCH_MNT/remote_file2
> +touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
> +attr_get: No data available
> +Could not get "attr_name2" for SCRATCH_MNT/remote_file2
> +d41d8cd98f00b204e9800998ecf8427e  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/sf_file
> +touch: cannot touch 'SCRATCH_MNT/sf_file': Input/output error
> +33bc798a506b093a7c2cdea122a738d7  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/leaf_file
> +touch: cannot touch 'SCRATCH_MNT/leaf_file': Input/output error
> +dec146c586813046f4b876bcecbaa713  -
> +
> +attr_set: Input/output error
> +Could not set "attr_name2" for SCRATCH_MNT/node_file
> +touch: cannot touch 'SCRATCH_MNT/node_file': Input/output error
> +e97ce3d15f9f28607b51f76bf8b7296c  -
> +
> +*** done
> -- 
> 2.25.1
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v6 1/1] xfstests: Add Log Attribute Replay test
  2022-02-01 20:13   ` Darrick J. Wong
@ 2022-02-01 22:09     ` Catherine Hoang
  0 siblings, 0 replies; 4+ messages in thread
From: Catherine Hoang @ 2022-02-01 22:09 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs, fstests

> On Feb 1, 2022, at 12:13 PM, Darrick J. Wong <djwong@kernel.org> wrote:
> 
> On Tue, Feb 01, 2022 at 05:09:52PM +0000, Catherine Hoang wrote:
>> From: Allison Henderson <allison.henderson@oracle.com>
>> 
>> This patch adds tests to exercise the log attribute error
>> inject and log replay. These tests aim to cover cases where attributes
>> are added, removed, and overwritten in each format (shortform, leaf,
>> node). Error inject is used to replay these operations from the log.
>> 
>> Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
>> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
>> ---
>> tests/xfs/543     | 171 ++++++++++++++++++++++++++++++++++++++++++++++
>> tests/xfs/543.out | 149 ++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 320 insertions(+)
>> create mode 100755 tests/xfs/543
>> create mode 100644 tests/xfs/543.out
>> 
>> diff --git a/tests/xfs/543 b/tests/xfs/543
>> new file mode 100755
>> index 00000000..ae955660
>> --- /dev/null
>> +++ b/tests/xfs/543
>> @@ -0,0 +1,171 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2022, Oracle and/or its affiliates.  All Rights Reserved.
>> +#
>> +# FS QA Test 543
>> +#
>> +# Log attribute replay test
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto quick attr
>> +
>> +# get standard environment, filters and checks
>> +. ./common/filter
>> +. ./common/attr
>> +. ./common/inject
>> +
>> +_cleanup()
>> +{
>> +	rm -f $tmp.*
>> +	echo 0 > /sys/fs/xfs/debug/larp
> 
> Cleanup functions can run even if the _require functions decide to
> _notrun the test, so I think this ought to be:
> 
> 	test -w /sys/fs/xfs/debug/larp && \
> 		echo 0 > /sys/fs/xfs/debug/larp

Ok, this makes sense
>> +}
>> +
>> +test_attr_replay()
>> +{
>> +	testfile=$SCRATCH_MNT/$1
>> +	attr_name=$2
>> +	attr_value=$3
>> +	flag=$4
>> +	error_tag=$5
>> +
>> +	# Inject error
>> +	_scratch_inject_error $error_tag
>> +
>> +	# Set attribute
>> +	echo "$attr_value" | ${ATTR_PROG} -$flag "$attr_name" $testfile 2>&1 | \
>> +			    _filter_scratch
>> +
>> +	# FS should be shut down, touch will fail
>> +	touch $testfile 2>&1 | _filter_scratch
>> +
>> +	# Remount to replay log
>> +	_scratch_remount_dump_log >> $seqres.full
>> +
>> +	# FS should be online, touch should succeed
>> +	touch $testfile
>> +
>> +	# Verify attr recovery
>> +	{ $ATTR_PROG -g $attr_name $testfile | md5sum; } 2>&1 | _filter_scratch
>> +
>> +	echo ""
>> +}
>> +
>> +create_test_file()
>> +{
>> +	filename=$SCRATCH_MNT/$1
>> +	count=$2
>> +	attr_value=$3
>> +
>> +	touch $filename
>> +
>> +	for i in `seq $count`
>> +	do
>> +		$ATTR_PROG -s "attr_name$i" -V $attr_value $filename >> \
>> +			$seqres.full
>> +	done
>> +}
>> +
>> +# real QA test starts here
>> +_supported_fs xfs
>> +
>> +_require_scratch
>> +_require_attrs
>> +_require_xfs_io_error_injection "larp"
>> +_require_xfs_io_error_injection "da_leaf_split"
>> +_require_xfs_io_error_injection "larp_leaf_to_node"
>> +_require_xfs_sysfs debug/larp
> 
> This only tests that the sysfs control file exists, not that it's
> writable.  Granted, debug knobs are writable by default, but we should
> be careful here and:
> 
> test -w /sys/fs/xfs/debug/larp || _notrun "larp knob not writable"
> 
> So this test won't fail if (say) someone has chmod a-w the debug knob
> since the module loaded.
> 
> With that fixed, I think this test will be ready to go the next time
> around.
> 
> --D

Ok, will add this on the next one. Thanks for the feedback!
> 
>> +
>> +# turn on log attributes
>> +echo 1 > /sys/fs/xfs/debug/larp
>> +
>> +attr16="0123456789ABCDEF"
>> +attr64="$attr16$attr16$attr16$attr16"
>> +attr256="$attr64$attr64$attr64$attr64"
>> +attr1k="$attr256$attr256$attr256$attr256"
>> +attr4k="$attr1k$attr1k$attr1k$attr1k"
>> +attr8k="$attr4k$attr4k"
>> +attr16k="$attr8k$attr8k"
>> +attr32k="$attr16k$attr16k"
>> +attr64k="$attr32k$attr32k"
>> +
>> +echo "*** mkfs"
>> +_scratch_mkfs >/dev/null
>> +
>> +echo "*** mount FS"
>> +_scratch_mount
>> +
>> +# empty, inline
>> +create_test_file empty_file1 0
>> +test_attr_replay empty_file1 "attr_name" $attr64 "s" "larp"
>> +test_attr_replay empty_file1 "attr_name" $attr64 "r" "larp"
>> +
>> +# empty, internal
>> +create_test_file empty_file2 0
>> +test_attr_replay empty_file2 "attr_name" $attr1k "s" "larp"
>> +test_attr_replay empty_file2 "attr_name" $attr1k "r" "larp"
>> +
>> +# empty, remote
>> +create_test_file empty_file3 0
>> +test_attr_replay empty_file3 "attr_name" $attr64k "s" "larp"
>> +test_attr_replay empty_file3 "attr_name" $attr64k "r" "larp"
>> +
>> +# inline, inline
>> +create_test_file inline_file1 1 $attr16
>> +test_attr_replay inline_file1 "attr_name2" $attr64 "s" "larp"
>> +test_attr_replay inline_file1 "attr_name2" $attr64 "r" "larp"
>> +
>> +# inline, internal
>> +create_test_file inline_file2 1 $attr16
>> +test_attr_replay inline_file2 "attr_name2" $attr1k "s" "larp"
>> +test_attr_replay inline_file2 "attr_name2" $attr1k "r" "larp"
>> +
>> +# inline, remote
>> +create_test_file inline_file3 1 $attr16
>> +test_attr_replay inline_file3 "attr_name2" $attr64k "s" "larp"
>> +test_attr_replay inline_file3 "attr_name2" $attr64k "r" "larp"
>> +
>> +# extent, internal
>> +create_test_file extent_file1 1 $attr1k
>> +test_attr_replay extent_file1 "attr_name2" $attr1k "s" "larp"
>> +test_attr_replay extent_file1 "attr_name2" $attr1k "r" "larp"
>> +
>> +# extent, inject error on split
>> +create_test_file extent_file2 3 $attr1k
>> +test_attr_replay extent_file2 "attr_name4" $attr1k "s" "da_leaf_split"
>> +
>> +# extent, inject error on fork transition
>> +create_test_file extent_file3 3 $attr1k
>> +test_attr_replay extent_file3 "attr_name4" $attr1k "s" "larp_leaf_to_node"
>> +
>> +# extent, remote
>> +create_test_file extent_file4 1 $attr1k
>> +test_attr_replay extent_file4 "attr_name2" $attr64k "s" "larp"
>> +test_attr_replay extent_file4 "attr_name2" $attr64k "r" "larp"
>> +
>> +# remote, internal
>> +create_test_file remote_file1 1 $attr64k
>> +test_attr_replay remote_file1 "attr_name2" $attr1k "s" "larp"
>> +test_attr_replay remote_file1 "attr_name2" $attr1k "r" "larp"
>> +
>> +# remote, remote
>> +create_test_file remote_file2 1 $attr64k
>> +test_attr_replay remote_file2 "attr_name2" $attr64k "s" "larp"
>> +test_attr_replay remote_file2 "attr_name2" $attr64k "r" "larp"
>> +
>> +# replace shortform
>> +create_test_file sf_file 2 $attr64
>> +test_attr_replay sf_file "attr_name2" $attr64 "s" "larp"
>> +
>> +# replace leaf
>> +create_test_file leaf_file 2 $attr1k
>> +test_attr_replay leaf_file "attr_name2" $attr1k "s" "larp"
>> +
>> +# replace node
>> +create_test_file node_file 1 $attr64k
>> +$ATTR_PROG -s "attr_name2" -V $attr1k $SCRATCH_MNT/node_file \
>> +		>> $seqres.full
>> +test_attr_replay node_file "attr_name2" $attr1k "s" "larp"
>> +
>> +echo "*** done"
>> +status=0
>> +exit
>> diff --git a/tests/xfs/543.out b/tests/xfs/543.out
>> new file mode 100644
>> index 00000000..075eecb3
>> --- /dev/null
>> +++ b/tests/xfs/543.out
>> @@ -0,0 +1,149 @@
>> +QA output created by 543
>> +*** mkfs
>> +*** mount FS
>> +attr_set: Input/output error
>> +Could not set "attr_name" for SCRATCH_MNT/empty_file1
>> +touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
>> +db6747306e971b6e3fd474aae10159a1  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name" for SCRATCH_MNT/empty_file1
>> +touch: cannot touch 'SCRATCH_MNT/empty_file1': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name" for SCRATCH_MNT/empty_file1
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name" for SCRATCH_MNT/empty_file2
>> +touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
>> +d489897d7ba99c2815052ae7dca29097  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name" for SCRATCH_MNT/empty_file2
>> +touch: cannot touch 'SCRATCH_MNT/empty_file2': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name" for SCRATCH_MNT/empty_file2
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name" for SCRATCH_MNT/empty_file3
>> +touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
>> +0ba8b18d622a11b5ff89336761380857  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name" for SCRATCH_MNT/empty_file3
>> +touch: cannot touch 'SCRATCH_MNT/empty_file3': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name" for SCRATCH_MNT/empty_file3
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/inline_file1
>> +touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
>> +49f4f904e12102a3423d8ab3f845e6e8  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file1
>> +touch: cannot touch 'SCRATCH_MNT/inline_file1': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/inline_file1
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/inline_file2
>> +touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
>> +6a0bd8b5aaa619bcd51f2ead0208f1bb  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file2
>> +touch: cannot touch 'SCRATCH_MNT/inline_file2': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/inline_file2
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/inline_file3
>> +touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
>> +3276329baa72c32f0a4a5cb0dbf813df  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/inline_file3
>> +touch: cannot touch 'SCRATCH_MNT/inline_file3': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/inline_file3
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/extent_file1
>> +touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
>> +8c6a952b2dbecaa5a308a00d2022e599  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/extent_file1
>> +touch: cannot touch 'SCRATCH_MNT/extent_file1': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/extent_file1
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name4" for SCRATCH_MNT/extent_file2
>> +touch: cannot touch 'SCRATCH_MNT/extent_file2': Input/output error
>> +c5ae4d474e547819a8807cfde66daba2  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name4" for SCRATCH_MNT/extent_file3
>> +touch: cannot touch 'SCRATCH_MNT/extent_file3': Input/output error
>> +17bae95be35ce7a0e6d4327b67da932b  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/extent_file4
>> +touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
>> +d17d94c39a964409b8b8173a51f8e951  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/extent_file4
>> +touch: cannot touch 'SCRATCH_MNT/extent_file4': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/extent_file4
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/remote_file1
>> +touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
>> +4104e21da013632e636cdd044884ca94  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/remote_file1
>> +touch: cannot touch 'SCRATCH_MNT/remote_file1': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/remote_file1
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/remote_file2
>> +touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
>> +9ac16e37ecd6f6c24de3f724c49199a8  -
>> +
>> +attr_remove: Input/output error
>> +Could not remove "attr_name2" for SCRATCH_MNT/remote_file2
>> +touch: cannot touch 'SCRATCH_MNT/remote_file2': Input/output error
>> +attr_get: No data available
>> +Could not get "attr_name2" for SCRATCH_MNT/remote_file2
>> +d41d8cd98f00b204e9800998ecf8427e  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/sf_file
>> +touch: cannot touch 'SCRATCH_MNT/sf_file': Input/output error
>> +33bc798a506b093a7c2cdea122a738d7  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/leaf_file
>> +touch: cannot touch 'SCRATCH_MNT/leaf_file': Input/output error
>> +dec146c586813046f4b876bcecbaa713  -
>> +
>> +attr_set: Input/output error
>> +Could not set "attr_name2" for SCRATCH_MNT/node_file
>> +touch: cannot touch 'SCRATCH_MNT/node_file': Input/output error
>> +e97ce3d15f9f28607b51f76bf8b7296c  -
>> +
>> +*** done
>> -- 
>> 2.25.1
>> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-02-01 22:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-01 17:09 [PATCH v6 0/1] xfstests: add log attribute replay test Catherine Hoang
2022-02-01 17:09 ` [PATCH v6 1/1] xfstests: Add Log Attribute Replay test Catherine Hoang
2022-02-01 20:13   ` Darrick J. Wong
2022-02-01 22:09     ` Catherine Hoang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.