Message ID | 2df6ee0680b5d2a6fad945e4936749f22abe72dd.1648730443.git.ritesh.list@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | generic: Add some tests around journal replay/recoveryloop | expand |
On Thu, Mar 31, 2022 at 06:24:22PM +0530, Ritesh Harjani wrote: > From: Ritesh Harjani <riteshh@linux.ibm.com> > > In certain cases (it is noted with ext4 fast_commit feature) that, replay phase > may not delete the right range of blocks (after sudden FS shutdown) > due to some operations which depends on inode->i_size (which during replay of > an inode with fast_commit could be 0 for sometime). > This fstest is added to test for such scenarios for all generic fs. > > This test case is based on the test case shared via Xin Yin. > > Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> > --- > tests/generic/678 | 72 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/678.out | 7 +++++ > 2 files changed, 79 insertions(+) > create mode 100755 tests/generic/678 > create mode 100644 tests/generic/678.out > > diff --git a/tests/generic/678 b/tests/generic/678 > new file mode 100755 > index 00000000..46a7be6c > --- /dev/null > +++ b/tests/generic/678 > @@ -0,0 +1,72 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2022 IBM Corporation. All Rights Reserved. > +# > +# FS QA Test 678 > +# > +# This test with ext4 fast_commit feature w/o below patch missed to delete the right > +# range during replay phase, since it depends upon inode->i_size (which might not be > +# stable during replay phase, at least for ext4). > +# 0b5b5a62b945a141: ext4: use ext4_ext_remove_space() for fast commit replay delete range > +# (Based on test case shared by Xin Yin <yinxin.x@bytedance.com>) > +# > + > +. ./common/preamble > +_begin_fstest auto shutdown quick log recoveryloop > + > +# Override the default cleanup function. > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > +} It's the same as the default cleanup function. Cheers, Dave.
On 22/04/04 09:38AM, Dave Chinner wrote: > On Thu, Mar 31, 2022 at 06:24:22PM +0530, Ritesh Harjani wrote: > > From: Ritesh Harjani <riteshh@linux.ibm.com> > > > > In certain cases (it is noted with ext4 fast_commit feature) that, replay phase > > may not delete the right range of blocks (after sudden FS shutdown) > > due to some operations which depends on inode->i_size (which during replay of > > an inode with fast_commit could be 0 for sometime). > > This fstest is added to test for such scenarios for all generic fs. > > > > This test case is based on the test case shared via Xin Yin. > > > > Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> > > --- > > tests/generic/678 | 72 +++++++++++++++++++++++++++++++++++++++++++ > > tests/generic/678.out | 7 +++++ > > 2 files changed, 79 insertions(+) > > create mode 100755 tests/generic/678 > > create mode 100644 tests/generic/678.out > > > > diff --git a/tests/generic/678 b/tests/generic/678 > > new file mode 100755 > > index 00000000..46a7be6c > > --- /dev/null > > +++ b/tests/generic/678 > > @@ -0,0 +1,72 @@ > > +#! /bin/bash > > +# SPDX-License-Identifier: GPL-2.0 > > +# Copyright (c) 2022 IBM Corporation. All Rights Reserved. > > +# > > +# FS QA Test 678 > > +# > > +# This test with ext4 fast_commit feature w/o below patch missed to delete the right > > +# range during replay phase, since it depends upon inode->i_size (which might not be > > +# stable during replay phase, at least for ext4). > > +# 0b5b5a62b945a141: ext4: use ext4_ext_remove_space() for fast commit replay delete range > > +# (Based on test case shared by Xin Yin <yinxin.x@bytedance.com>) > > +# > > + > > +. ./common/preamble > > +_begin_fstest auto shutdown quick log recoveryloop > > + > > +# Override the default cleanup function. > > +_cleanup() > > +{ > > + cd / > > + rm -r -f $tmp.* > > +} > > It's the same as the default cleanup function. > Sure, will remove this definition from here in next revision. Since it is available in common/preamble now. -ritesh > Cheers, > > Dave. > > -- > Dave Chinner > david@fromorbit.com
diff --git a/tests/generic/678 b/tests/generic/678 new file mode 100755 index 00000000..46a7be6c --- /dev/null +++ b/tests/generic/678 @@ -0,0 +1,72 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 IBM Corporation. All Rights Reserved. +# +# FS QA Test 678 +# +# This test with ext4 fast_commit feature w/o below patch missed to delete the right +# range during replay phase, since it depends upon inode->i_size (which might not be +# stable during replay phase, at least for ext4). +# 0b5b5a62b945a141: ext4: use ext4_ext_remove_space() for fast commit replay delete range +# (Based on test case shared by Xin Yin <yinxin.x@bytedance.com>) +# + +. ./common/preamble +_begin_fstest auto shutdown quick log recoveryloop + +# Override the default cleanup function. +_cleanup() +{ + cd / + rm -r -f $tmp.* +} + +# Import common functions. +. ./common/filter +. ./common/punch + +# real QA test starts here + +# Modify as appropriate. +_supported_fs generic +_require_scratch +_require_xfs_io_command "fpunch" +_require_xfs_io_command "fzero" +_require_xfs_io_command "fiemap" +_require_scratch_shutdown + +t1=$SCRATCH_MNT/foo +t2=$SCRATCH_MNT/bar + +_scratch_mkfs > $seqres.full 2>&1 + +_scratch_mount >> $seqres.full 2>&1 + +bs=$(_get_file_block_size $SCRATCH_MNT) + +# create and write data to t1 +$XFS_IO_PROG -f -c "pwrite 0 $((100*$bs))" $t1 | _filter_xfs_io_numbers + +# fzero certain range in between with -k +$XFS_IO_PROG -c "fzero -k $((40*$bs)) $((20*$bs))" $t1 + +# create and fsync a new file t2 +$XFS_IO_PROG -f -c "fsync" $t2 + +# fpunch within the i_size of a file +$XFS_IO_PROG -c "fpunch $((30*$bs)) $((20*$bs))" $t1 + +# fsync t1 to trigger journal operation +$XFS_IO_PROG -c "fsync" $t1 + +# shutdown FS now for replay journal to kick in next mount +_scratch_shutdown -v >> $seqres.full 2>&1 + +_scratch_cycle_mount + +# check fiemap reported is valid or not +$XFS_IO_PROG -c "fiemap -v" $t1 | _filter_fiemap_flags $bs + +# success, all done +status=0 +exit diff --git a/tests/generic/678.out b/tests/generic/678.out new file mode 100644 index 00000000..e0992edd --- /dev/null +++ b/tests/generic/678.out @@ -0,0 +1,7 @@ +QA output created by 678 +wrote XXXX/XXXX bytes at offset XXXX +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +0: [0..29]: none +1: [30..49]: hole +2: [50..59]: unwritten +3: [60..99]: nonelast