generic: test project id recovery after power failure
PATCH 1/3 generic: test project id recovery after power failure
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including project id being persisted, so even after sudden power-cut, during mount, we should recover project_id fields correctly, in order to not loss those meta info.
So adding this testcase to check whether generic filesystem can guarantee that.
--- tests/generic/506 | 97 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/506.out | 2 + tests/generic/group | 1 + 3 files changed, 100 insertions(+) create mode 100644 tests/generic/506 create mode 100644 tests/generic/506.out
tests/generic/506 new file +97 -0
@@ -0,0 +1,97 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 506 +# +# This testcase is trying to test recovery flow of generic filesystem, w/ below +# steps, once project id changes, after we fsync that file, we can expect that +# project id can be recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. chattr -p 100 testfile; +# 3. xfs_io -f testfile -c "fsync"; +# 4. godown; +# 5. umount; +# 6. mount; +# 7. check project id +# +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 +. ./common/quota + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_command "$CHATTR_PROG" chattr + +_require_prjquota $SCRATCH_DEV +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile + +do_check() +{ + _scratch_mount + + touch $testfile + + if [ "$1" == "sync" ]; then + sync + fi + + chattr -p 100 $testfile + + before=`lsattr -p $testfile` + + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr -p $testfile` + + # check inode's uid/gid + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile + _scratch_unmount +} + +echo "Silence is golden" + +do_check +do_check sync + +status=0 +exit
tests/generic/506.out new file +2 -0
@@ -0,0 +1,2 @@ +QA output created by 506 +Silence is golden
tests/generic/group +1 -0
@@ -508,3 +508,4 @@ 503 auto quick dax punch collapse zero 504 auto quick locks 505 shutdown auto quick metadata +506 shutdown auto quick metadata quota
Signature · 1 line
2.18.0
PATCH 2/3 generic: test i_flags recovery after power failure
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including i_flags being persisted, so even after sudden power-cut, during mount, we should recover i_flags fields correctly, in order to not loss those meta info.
So adding this testcase to check whether generic filesystem can guarantee that.
We only check below attribute modification which most filesystem supports:
- no atime updates (A)
- secure deletion (s)
- synchronous updates (S)
- undeletable (u)
--- tests/generic/507 | 132 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/507.out | 2 + tests/generic/group | 1 + 3 files changed, 135 insertions(+) create mode 100755 tests/generic/507 create mode 100644 tests/generic/507.out
tests/generic/507 new file +132 -0
@@ -0,0 +1,132 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 507 +# +# This testcase is trying to test recovery flow of generic filesystem, w/ below +# steps, once i_flags changes, after we fsync that file, we can expect that +# i_flags can be recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. chattr +[AsSu] testfile +# 3. xfs_io -f testfile -c "fsync"; +# 4. godown; +# 5. umount; +# 6. mount; +# 7. check i_flags +# 8. chattr -[AsSu] testfile +# 9. xfs_io -f testfile -c "fsync"; +# 10. godown; +# 11. umount; +# 12. mount; +# 13. check i_flags +# +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 +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_command "$CHATTR_PROG" chattr + +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile +opt="AsSu" + +do_check() +{ + attr=$1 + + _scratch_mount + + touch $testfile + + if [ "$2" == "sync" ]; then + echo "sync" >> $seqres.full + sync + fi + + echo "Test chattr +$1" >> $seqres.full + + # add attribute + chattr +$attr $testfile + + before=`lsattr $testfile` + + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr $testfile` + + # check inode's i_flags + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + echo "Test chattr -$1" >> $seqres.full + + # delete attribute + chattr -$attr $testfile + + before=`lsattr $testfile` + + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr $testfile` + + # check inode's i_flags + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile + _scratch_unmount +} + +echo "Silence is golden" + +for i in `seq ${#opt}`; do + do_check ${opt:$i-1:1} + do_check ${opt:$i-1:1} sync +done + +status=0 +exit
tests/generic/507.out new file +2 -0
@@ -0,0 +1,2 @@ +QA output created by 507 +Silence is golden
tests/generic/group +1 -0
@@ -509,3 +509,4 @@ 504 auto quick locks 505 shutdown auto quick metadata 506 shutdown auto quick metadata quota +507 shutdown auto quick metadata
Signature · 1 line
2.18.0
PATCH 3/3 generic: test creation time recovery after power failure
In reply to Chao YuFrom: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including creation time being persisted, so even after sudden power-cut, during mount, we should recover i_crtime_{,nsec} fields correctly, in order to not loss those meta info.
So adding this testcase to check whether generic filesystem can guarantee that.
Note that, it needs inode creation time support on specified filesystem.
--- tests/generic/508 | 96 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/508.out | 2 + tests/generic/group | 1 + 3 files changed, 99 insertions(+) create mode 100755 tests/generic/508 create mode 100644 tests/generic/508.out
tests/generic/508 new file +96 -0
@@ -0,0 +1,96 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 508 +# +# This testcase is trying to test recovery flow of generic filesystem, it needs +# creation time support on specified filesystem. +# With below steps, once the file is created, creation time attribute should be +# valid on the file, after we fsync that file, it expects creation time can be +# recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. xfs_io -f testfile -c "fsync"; +# 3. godown; +# 4. umount; +# 5. mount; +# 6. check creation time +# +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 +. ./common/quota + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_xfs_io_command "statx" "-v" + +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile + +do_check() +{ + _scratch_mount + + touch $testfile + + if [ "$1" == "sync" ]; then + sync + fi + + before=`$XFS_IO_PROG -f $testfile -c "statx -v" | grep btime` || \ + _notrun "inode creation time not supported by this filesystem" + + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`$XFS_IO_PROG -f $testfile -c "statx -v" | grep btime` + + # check inode's uid/gid + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile + _scratch_unmount +} + +echo "Silence is golden" + +do_check +do_check sync + +status=0 +exit
tests/generic/508.out new file +2 -0
@@ -0,0 +1,2 @@ +QA output created by 508 +Silence is golden
tests/generic/group +1 -0
@@ -510,3 +510,4 @@ 505 shutdown auto quick metadata 506 shutdown auto quick metadata quota 507 shutdown auto quick metadata +508 shutdown auto quick metadata
Signature · 1 line
2.18.0
Quoted 62 lines · Chao Yu
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including project id being persisted, so even after sudden power-cut, during mount, we should recover
project_idfields correctly, in order to not loss those meta info.So adding this testcase to check whether generic filesystem can guarantee that.
Signed-off-by Chao Yu <[email protected]>--- tests/generic/506 | 97 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/506.out | 2 + tests/generic/group | 1 + 3 files changed, 100 insertions(+) create mode 100644 tests/generic/506 create mode 100644 tests/generic/506.outtests/generic/506 new file +37
-0@@ -0,0 +1,97 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 506 +# +# This testcase is trying to test recovery flow of generic filesystem, w/ below +# steps, once project id changes, after we fsync that file, we can expect that +# project id can be recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. chattr -p 100 testfile; +# 3. xfs_io -f testfile -c "fsync"; +# 4. godown; +# 5. umount; +# 6. mount; +# 7. check project id +# +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 +. ./common/quota
tests/generic/506 line 47
Quoted 10 lines
tests/generic/506 new file +10
-0+ +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_command "$CHATTR_PROG" chattr
Better to add a new "LSATTR_PROG" entry as well in common/config and _require_command "$LSATTR_PROG" lsattr
Quoted 11 lines
tests/generic/506 new file +11
-0+ +_require_prjquota $SCRATCH_DEV +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile + +do_check()
tests/generic/506 line 68
Quoted 10 lines
tests/generic/506 new file +10
-0+{ + _scratch_mount + + touch $testfile + + if [ "$1" == "sync" ]; then + sync + fi + + chattr -p 100 $testfile
And use $CHATTR_PROG
tests/generic/506 line 70
Quoted 2 lines
tests/generic/506 new file +2
-0+ + before=`lsattr -p $testfile`
and $LSATTR_PROG in the test.
tests/generic/506 line 79
Quoted 9 lines
tests/generic/506 new file +9
-0+ + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr -p $testfile` + + # check inode's uid/gid
Should be "project quota id"?
tests/generic/506 line 87
Quoted 8 lines
tests/generic/506 new file +8
-0+ if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile
rm -f $testfile
Thanks,
Eryu
Quoted 30 lines
tests/generic/506 new file +10
-0+ _scratch_unmount +} + +echo "Silence is golden" + +do_check +do_check sync + +status=0 +exittests/generic/506.out new file +2
-0@@ -0,0 +1,2 @@ +QA output created by 506 +Silence is goldentests/generic/group +1
-0@@ -508,3 +508,4 @@ 503 auto quick dax punch collapse zero 504 auto quick locks 505 shutdown auto quick metadata +506 shutdown auto quick metadata quotaSignature · 1 line
2.18.0
Re: [PATCH 2/3] generic: test i_flags recovery after power failure
In reply to Chao YuQuoted 74 lines · Chao Yu
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including
i_flagsbeing persisted, so even after sudden power-cut, during mount, we should recoveri_flagsfields correctly, in order to not loss those meta info.So adding this testcase to check whether generic filesystem can guarantee that.
We only check below attribute modification which most filesystem supports:
- no atime updates (A)
- secure deletion (s)
- synchronous updates (S)
- undeletable (u)Signed-off-by Chao Yu <[email protected]>--- tests/generic/507 | 132 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/507.out | 2 + tests/generic/group | 1 + 3 files changed, 135 insertions(+) create mode 100755 tests/generic/507 create mode 100644 tests/generic/507.outtests/generic/507 new file +42
-0@@ -0,0 +1,132 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 507 +# +# This testcase is trying to test recovery flow of generic filesystem, w/ below +# steps, once i_flags changes, after we fsync that file, we can expect that +# i_flags can be recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. chattr +[AsSu] testfile +# 3. xfs_io -f testfile -c "fsync"; +# 4. godown; +# 5. umount; +# 6. mount; +# 7. check i_flags +# 8. chattr -[AsSu] testfile +# 9. xfs_io -f testfile -c "fsync"; +# 10. godown; +# 11. umount; +# 12. mount; +# 13. check i_flags +# +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
tests/generic/507 line 52
Quoted 10 lines
tests/generic/507 new file +10
-0+ +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_command "$CHATTR_PROG" chattr
Need to check if the "$opt" is supported by the filesystem, i.e.
_require_chattr AsSu
Currently xfs doesn't support changing attr 's' and 'u' so test fails.
Quoted 17 lines
tests/generic/507 new file +17
-0+ +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile +opt="AsSu" + +do_check() +{ + attr=$1 + + _scratch_mount + + touch $testfile
tests/generic/507 line 79
Quoted 10 lines
tests/generic/507 new file +10
-0+ + if [ "$2" == "sync" ]; then + echo "sync" >> $seqres.full + sync + fi + + echo "Test chattr +$1" >> $seqres.full + + # add attribute + chattr +$attr $testfile
$CHATTR_PROG
tests/generic/507 line 81
Quoted 2 lines
tests/generic/507 new file +2
-0+ + before=`lsattr $testfile`
$LSATTR_PROG (after adding the definition in patch 1).
Quoted 29 lines
tests/generic/507 new file +29
-0+ + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr $testfile` + + # check inode's i_flags + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + echo "Test chattr -$1" >> $seqres.full + + # delete attribute + chattr -$attr $testfile + + before=`lsattr $testfile` + + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr $testfile`
tests/generic/507 line 120
Quoted 10 lines
tests/generic/507 new file +10
-0+ + # check inode's i_flags + if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile
rm -f $testfile
tests/generic/507 line 129
Quoted 9 lines
tests/generic/507 new file +9
-0+ _scratch_unmount +} + +echo "Silence is golden" + +for i in `seq ${#opt}`; do + do_check ${opt:$i-1:1} + do_check ${opt:$i-1:1} sync +done
I think it'd be easier to read if we do something like:
opts="A s S u"
for i in $opts; do
do_check $i
do_check $i sync
done
Thanks,
Eryu
Quoted 23 lines
tests/generic/507 new file +3
-0+ +status=0 +exittests/generic/507.out new file +2
-0@@ -0,0 +1,2 @@ +QA output created by 507 +Silence is goldentests/generic/group +1
-0@@ -509,3 +509,4 @@ 504 auto quick locks 505 shutdown auto quick metadata 506 shutdown auto quick metadata quota +507 shutdown auto quick metadataSignature · 1 line
2.18.0
Hi Eryu,
Will update them in v2 soon as you suggested.
Thanks,
Quoted 162 lines · Eryu Guan
Quoted 62 lines · Chao Yu
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including project id being persisted, so even after sudden power-cut, during mount, we should recover
project_idfields correctly, in order to not loss those meta info.So adding this testcase to check whether generic filesystem can guarantee that.
Signed-off-by Chao Yu <[email protected]>--- tests/generic/506 | 97 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/506.out | 2 + tests/generic/group | 1 + 3 files changed, 100 insertions(+) create mode 100644 tests/generic/506 create mode 100644 tests/generic/506.outtests/generic/506 new file +37
-0@@ -0,0 +1,97 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 506 +# +# This testcase is trying to test recovery flow of generic filesystem, w/ below +# steps, once project id changes, after we fsync that file, we can expect that +# project id can be recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. chattr -p 100 testfile; +# 3. xfs_io -f testfile -c "fsync"; +# 4. godown; +# 5. umount; +# 6. mount; +# 7. check project id +# +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 +. ./common/quotatests/generic/506 line 47
Quoted 10 lines
tests/generic/506 new file +10
-0+ +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_command "$CHATTR_PROG" chattrBetter to add a new "
LSATTR_PROG" entry as well in common/config and_require_command"$LSATTR_PROG" lsattrQuoted 11 lines
tests/generic/506 new file +11
-0+ +_require_prjquota $SCRATCH_DEV +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile + +do_check()tests/generic/506 line 68
Quoted 10 lines
tests/generic/506 new file +10
-0+{ + _scratch_mount + + touch $testfile + + if [ "$1" == "sync" ]; then + sync + fi + + chattr -p 100 $testfileAnd use $CHATTR_PROG
tests/generic/506 line 70
Quoted 2 lines
tests/generic/506 new file +2
-0+ + before=`lsattr -p $testfile`and $LSATTR_PROG in the test.
tests/generic/506 line 79
Quoted 9 lines
tests/generic/506 new file +9
-0+ + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`lsattr -p $testfile` + + # check inode's uid/gidShould be "project quota id"?
tests/generic/506 line 87
Quoted 8 lines
tests/generic/506 new file +8
-0+ if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfilerm -f $testfile
Thanks,
EryuQuoted 30 lines
tests/generic/506 new file +10
-0+ _scratch_unmount +} + +echo "Silence is golden" + +do_check +do_check sync + +status=0 +exittests/generic/506.out new file +2
-0@@ -0,0 +1,2 @@ +QA output created by 506 +Silence is goldentests/generic/group +1
-0@@ -508,3 +508,4 @@ 503 auto quick dax punch collapse zero 504 auto quick locks 505 shutdown auto quick metadata +506 shutdown auto quick metadata quotaSignature · 1 line
2.18.0
Re: [PATCH 3/3] generic: test creation time recovery after power failure
In reply to Chao YuQuoted 55 lines · Chao Yu
From: Chao Yu <[email protected]>
After fsync, filesystem should guarantee inode metadata including creation time being persisted, so even after sudden power-cut, during mount, we should recover i_crtime_{,nsec} fields correctly, in order to not loss those meta info.
So adding this testcase to check whether generic filesystem can guarantee that.
Note that, it needs inode creation time support on specified filesystem.
Signed-off-by Chao Yu <[email protected]>--- tests/generic/508 | 96 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/508.out | 2 + tests/generic/group | 1 + 3 files changed, 99 insertions(+) create mode 100755 tests/generic/508 create mode 100644 tests/generic/508.outtests/generic/508 new file +28
-0@@ -0,0 +1,96 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Huawei. All Rights Reserved. +# +# FS QA Test 508 +# +# This testcase is trying to test recovery flow of generic filesystem, it needs +# creation time support on specified filesystem. +# With below steps, once the file is created, creation time attribute should be +# valid on the file, after we fsync that file, it expects creation time can be +# recovered after sudden power-cuts. +# 1. touch testfile; +# 1.1 sync (optional) +# 2. xfs_io -f testfile -c "fsync"; +# 3. godown; +# 4. umount; +# 5. mount; +# 6. check creation time +# +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 +
tests/generic/508 line 38
Quoted 10 lines
tests/generic/508 new file +10
-0+_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/quota
This file is not needed by the test.
tests/generic/508 line 48
Quoted 10 lines
tests/generic/508 new file +10
-0+ +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +_require_test_lsattr +_require_xfs_io_command "statx" "-v"
This only checks if "statx" subcommand is supported by xfs_io, we also need "_require_statx" to check if statx(2) is supported by the kernel.
Quoted 11 lines
tests/generic/508 new file +11
-0+ +_require_scratch +_require_scratch_shutdown + +_scratch_mkfs >/dev/null 2>&1 +_require_metadata_journaling $SCRATCH_DEV + +testfile=$SCRATCH_MNT/testfile + +do_check() +{
tests/generic/508 line 69
Quoted 10 lines
tests/generic/508 new file +10
-0+ _scratch_mount + + touch $testfile + + if [ "$1" == "sync" ]; then + sync + fi + + before=`$XFS_IO_PROG -f $testfile -c "statx -v" | grep btime` || \ + _notrun "inode creation time not supported by this filesystem"
Introduce a new '_require_btime' helper function to do this check.
tests/generic/508 line 78
Quoted 9 lines
tests/generic/508 new file +9
-0+ + $XFS_IO_PROG -f $testfile -c "fsync" | _filter_xfs_io + + _scratch_shutdown | tee -a $seqres.full + _scratch_cycle_mount + + after=`$XFS_IO_PROG -f $testfile -c "statx -v" | grep btime` + + # check inode's uid/gid
check inode's creation time
tests/generic/508 line 86
Quoted 8 lines
tests/generic/508 new file +8
-0+ if [ "$before" != "$after" ]; then + echo "Before: $before" + echo "After : $after" + fi + echo "Before: $before" >> $seqres.full + echo "After : $after" >> $seqres.full + + rm $testfile
rm -f $testfile
Thanks,
Eryu
Quoted 30 lines
tests/generic/508 new file +10
-0+ _scratch_unmount +} + +echo "Silence is golden" + +do_check +do_check sync + +status=0 +exittests/generic/508.out new file +2
-0@@ -0,0 +1,2 @@ +QA output created by 508 +Silence is goldentests/generic/group +1
-0@@ -510,3 +510,4 @@ 505 shutdown auto quick metadata 506 shutdown auto quick metadata quota 507 shutdown auto quick metadata +508 shutdown auto quick metadataSignature · 1 line
2.18.0