generic/392: support to test fallocate
PATCH 1/1 generic/392: support to test fallocate
From: Chao Yu <[email protected]>
f2fs can skip isize updating in fsync(), since during mount, f2fs tries to recovery isize according to valid block address or preallocated flag in last fsynced dnode block.
However, fallocate() breaks our rule with setting FALLOC_FL_KEEP_SIZE flag, since it can preallocated block cross EOF, once the file is fsynced, in POR, we will recover isize incorrectly based on these fallocated blocks.
This patch enables generic/392 to test fallocate case, in order to verify whether filesystem will do incorrect recovery on isize.
--- tests/generic/392 | 14 ++++++++++++++ tests/generic/392.out | 6 ++++++ 2 files changed, 20 insertions(+)
tests/generic/392 +14 -0
@@ -125,12 +125,26 @@ test_punch() check_inode_metadata $1 } +test_falloc() +{ + echo "==== falloc $2 test with $1 ====" | tee -a $seqres.full + $XFS_IO_PROG -f -c "truncate 4202496" \ + -c "pwrite 0 4202496" \ + -c "fsync" \ + -c "falloc -k 4202496 $2"\ + $testfile >/dev/null + check_inode_metadata $1 +} + for i in fsync fdatasync; do test_i_size $i 1024 test_i_size $i 4096 test_i_time $i test_punch $i 1024 test_punch $i 4096 + test_falloc $i 1024 + test_falloc $i 4096 + test_falloc $i 104857600 done exit
tests/generic/392.out +6 -0
@@ -4,8 +4,14 @@ QA output created by 392 ==== i_time test with fsync ==== ==== fpunch 1024 test with fsync ==== ==== fpunch 4096 test with fsync ==== +==== falloc 1024 test with fsync ==== +==== falloc 4096 test with fsync ==== +==== falloc 104857600 test with fsync ==== ==== i_size 1024 test with fdatasync ==== ==== i_size 4096 test with fdatasync ==== ==== i_time test with fdatasync ==== ==== fpunch 1024 test with fdatasync ==== ==== fpunch 4096 test with fdatasync ==== +==== falloc 1024 test with fdatasync ==== +==== falloc 4096 test with fdatasync ==== +==== falloc 104857600 test with fdatasync ====
Signature · 1 line
2.14.1.145.gb3622a4ee
Quoted 11 lines · Chao Yu
From: Chao Yu <[email protected]>
f2fs can skip isize updating in
fsync(), since during mount, f2fs tries to recovery isize according to valid block address or preallocated flag in last fsynced dnode block.However,
fallocate()breaks our rule with settingFALLOC_FL_KEEP_SIZEflag, since it can preallocated block cross EOF, once the file is fsynced, in POR, we will recover isize incorrectly based on these fallocated blocks.
Quoted 4 lines
This patch enables generic/392 to test fallocate case, in order to verify whether filesystem will do incorrect recovery on isize.
Signed-off-by Chao Yu <[email protected]>
Usually we don't add new sub-tests to existing tests, so new failures introduced by the new sub-tests won't be treated as false regressions. Please add a new test instead. (I notice the new falloc test fails on ext4 too, the allocated block counts changed after power cycle).
Quoted 10 lines
--- tests/generic/392 | 14 ++++++++++++++ tests/generic/392.out | 6 ++++++ 2 files changed, 20 insertions(+)tests/generic/392 +0
-0
tests/generic/392 test_punch() · line 134
Quoted 10 lines
tests/generic/392 +7
-0@@ -125,12 +125,26 @@ test_punch() check_inode_metadata $1 } +test_falloc() +{ + echo "==== falloc $2 test with $1 ====" | tee -a $seqres.full + $XFS_IO_PROG -f -c "truncate 4202496" \ + -c "pwrite 0 4202496" \ + -c "fsync" \ + -c "falloc -k 4202496 $2"\
Need to require falloc -k support by
_require_xfs_io_command "falloc" "-k"
And maybe test falloc without keep_size too?
Thanks,
Eryu
Quoted 38 lines
tests/generic/392 +7
-0+ $testfile >/dev/null + check_inode_metadata $1 +} + for i in fsync fdatasync; do test_i_size $i 1024 test_i_size $i 4096 test_i_time $i test_punch $i 1024 test_punch $i 4096 + test_falloc $i 1024 + test_falloc $i 4096 + test_falloc $i 104857600 done exittests/generic/392.out +6
-0@@ -4,8 +4,14 @@ QA output created by 392 ==== i_time test with fsync ==== ==== fpunch 1024 test with fsync ==== ==== fpunch 4096 test with fsync ==== +==== falloc 1024 test with fsync ==== +==== falloc 4096 test with fsync ==== +==== falloc 104857600 test with fsync ==== ==== i_size 1024 test with fdatasync ==== ==== i_size 4096 test with fdatasync ==== ==== i_time test with fdatasync ==== ==== fpunch 1024 test with fdatasync ==== ==== fpunch 4096 test with fdatasync ==== +==== falloc 1024 test with fdatasync ==== +==== falloc 4096 test with fdatasync ==== +==== falloc 104857600 test with fdatasync ====Signature · 1 line
2.14.1.145.gb3622a4ee
Quoted 15 lines · Eryu Guan
Quoted 14 lines · Chao Yu
From: Chao Yu <[email protected]>
f2fs can skip isize updating in
fsync(), since during mount, f2fs tries to recovery isize according to valid block address or preallocated flag in last fsynced dnode block.However,
fallocate()breaks our rule with settingFALLOC_FL_KEEP_SIZEflag, since it can preallocated block cross EOF, once the file is fsynced, in POR, we will recover isize incorrectly based on these fallocated blocks.This patch enables generic/392 to test fallocate case, in order to verify whether filesystem will do incorrect recovery on isize.
Quoted 6 lines
Quoted 1 line
Signed-off-by Chao Yu <[email protected]>Usually we don't add new sub-tests to existing tests, so new failures introduced by the new sub-tests won't be treated as false regressions. Please add a new test instead. (I notice the new falloc test fails on ext4 too, the allocated block counts changed after power cycle).
Ah, make sense to me, I will prepare patch to add a new test.
Quoted 24 lines
Quoted 11 lines
--- tests/generic/392 | 14 ++++++++++++++ tests/generic/392.out | 6 ++++++ 2 files changed, 20 insertions(+)tests/generic/392 +0
-0tests/generic/392 test_punch() · line 134
Quoted 10 lines
tests/generic/392 +7
-0@@ -125,12 +125,26 @@ test_punch() check_inode_metadata $1 } +test_falloc() +{ + echo "==== falloc $2 test with $1 ====" | tee -a $seqres.full + $XFS_IO_PROG -f -c "truncate 4202496" \ + -c "pwrite 0 4202496" \ + -c "fsync" \ + -c "falloc -k 4202496 $2"\Need to require falloc -k support by
Quoted 1 line
_require_xfs_io_command"falloc" "-k"
Got it, thanks for the reminder.
Quoted 2 lines
And maybe test falloc without
keep_sizetoo?
Agreed, will add. :)
Thanks,
Quoted 42 lines
Thanks,
EryuQuoted 38 lines
tests/generic/392 +7
-0+ $testfile >/dev/null + check_inode_metadata $1 +} + for i in fsync fdatasync; do test_i_size $i 1024 test_i_size $i 4096 test_i_time $i test_punch $i 1024 test_punch $i 4096 + test_falloc $i 1024 + test_falloc $i 4096 + test_falloc $i 104857600 done exittests/generic/392.out +6
-0@@ -4,8 +4,14 @@ QA output created by 392 ==== i_time test with fsync ==== ==== fpunch 1024 test with fsync ==== ==== fpunch 4096 test with fsync ==== +==== falloc 1024 test with fsync ==== +==== falloc 4096 test with fsync ==== +==== falloc 104857600 test with fsync ==== ==== i_size 1024 test with fdatasync ==== ==== i_size 4096 test with fdatasync ==== ==== i_time test with fdatasync ==== ==== fpunch 1024 test with fdatasync ==== ==== fpunch 4096 test with fdatasync ==== +==== falloc 1024 test with fdatasync ==== +==== falloc 4096 test with fdatasync ==== +==== falloc 104857600 test with fdatasync ====Signature · 1 line
2.14.1.145.gb3622a4ee