Output selection, improvements for ext4/001
cover Output selection, improvements for ext4/001
Hello,
the patch series below addresses some issues with test ext4/001. The first patch is just a minor improvement to _filter_fiemap to work with older awk programs. The second patch updates expected output of the test because it slightly changes after punch hole fixes.
Patch 3 implements function which allows selecting different output file based on mount options (or basically any feature string that's passed to the function
- e.g. selection based on fs blocksize can be easily done as well). Current helper _link_out_file() could be implemented using this as well but for now I left it alone. I think this feature can be useful when different mount options change behavior of the filesystem and thus different output is generated but we want to have test working all mount options.
Patch 4 uses the output selection function in ext4/001 to select different output files based on mount options.
Comments welcome!
Honza
PATCH 1/4 _filter_fiemap: Avoid awk interval regexps
Older versions of awk do not accept interval regexps by default. Avoid them in _filter_fiemap to keep better compatibility since it's pretty trivial.
--- common/punch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
common/punch +1 -1
@@ -208,7 +208,7 @@ _filter_fiemap() print $1, $2, $3; next; } - $5 ~ /0x[[:xdigit:]]*8[[:xdigit:]]{2}/ { + $5 ~ /0x[[:xdigit:]]*8[[:xdigit:]][[:xdigit:]]/ { print $1, $2, "unwritten"; next; }
Signature · 1 line
2.1.4
PATCH 2/4 ext4/001: Update output
In reply to Jan KaraAfter patch "ext4: Fix races of writeback with punch hole and zero range" we don't flush range that's going to be zeroed out which results in different final extent layout because some extents will be zeroed-out instead of being split. Update the output file accordingly.
--- tests/ext4/001.out | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
tests/ext4/001.out +2 -6
@@ -131,14 +131,10 @@ cc63069677939f69a6e8f68cae6a6dac 2: [32..39]: hole daa100df6e6711906b61c9ab5aa16032 11. data -> hole -> data -0: [0..7]: data -1: [8..31]: unwritten -2: [32..39]: data +0: [0..39]: data f6aeca13ec49e5b266cd1c913cd726e3 12. unwritten -> data -> unwritten -0: [0..7]: data -1: [8..31]: unwritten -2: [32..39]: data +0: [0..39]: unwritten daa100df6e6711906b61c9ab5aa16032 13. data -> unwritten -> data 0: [0..7]: data
Signature · 1 line
2.1.4
PATCH 3/4 common: Add function for selecting from different output files
In reply to Jan KaraAdd function for selection of different output files. The idea is that in config file ($seq.cfg) there are several lines like:
feat1,feat2: suffix
The function is passed a feature string (or uses MOUNT_OPTIONS if no argument is passed) and selects output file with a suffix for which all features are present in the feature string. If there is no matching line, output with 'default' suffix is selected.
--- common/rc | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
common/rc +41 -0
@@ -3142,6 +3142,47 @@ get_block_size() echo `stat -f -c %S $1` } +_select_output() +{ + if [ $# -eq 0 ]; then + FEATURES=${MOUNT_OPTIONS##"-o "} + else + FEATURES=$1 + fi + + export FEATURES + seqfull=$SRC_DIR/$seqnum + perl -e ' + my %feathash; + my $feature, $result, $suffix, $opts; + + foreach $feature (split(/,/, $ENV{"FEATURES"})) { + $feathash{$feature} = 1; + } + $result = "default"; + while (<>) { + my $found = 1; + + chomp; + ($opts, $suffix) = split(/ *: */); + foreach my $opt (split(/,/, $opts)) { + if (!exists($feathash{$opt})) { + $found = 0; + last; + } + } + if ($found == 1) { + $result = $suffix; + last; + } + } + print $result + ' <$seqfull.cfg | { + read SUFFIX + ln -fs $seq.out.$SUFFIX $seqfull.out + } +} + init_rc ################################################################################
Signature · 1 line
2.1.4
Re: [PATCH 3/4] common: Add function for selecting from different output files
Quoted 11 lines · Jan Kara
Add function for selection of different output files. The idea is that in config file ($seq.cfg) there are several lines like:
feat1,feat2: suffix
The function is passed a feature string (or uses
MOUNT_OPTIONSif no argument is passed) and selects output file with a suffix for which all features are present in the feature string. If there is no matching line, output with 'default' suffix is selected.Signed-off-by Jan Kara <[email protected]>
Looks like a good idea, but probably needs to be integrated into _link_out_file(), which already does platform based output file linking...
Quoted 42 lines
--- common/rc | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)common/rc +30
-0@@ -3142,6 +3142,47 @@ get_block_size() echo `stat -f -c %S $1` } +_select_output() +{ + if [ $# -eq 0 ]; then + FEATURES=${MOUNT_OPTIONS##"-o "} + else + FEATURES=$1 + fi + + export FEATURES + seqfull=$SRC_DIR/$seqnum + perl -e ' + my %feathash; + my $feature, $result, $suffix, $opts; + + foreach $feature (split(/,/, $ENV{"FEATURES"})) { + $feathash{$feature} = 1; + } + $result = "default"; + while (<>) { + my $found = 1; + + chomp; + ($opts, $suffix) = split(/ *: */); + foreach my $opt (split(/,/, $opts)) { + if (!exists($feathash{$opt})) { + $found = 0; + last; + } + } + if ($found == 1) {
common/rc get_block_size() · line 3184
Quoted 10 lines
common/rc +10
-0+ $result = $suffix; + last; + } + } + print $result + ' <$seqfull.cfg | { + read SUFFIX + ln -fs $seq.out.$SUFFIX $seqfull.out + } +}
I'd much prefer the perl code simply returns the appropriately matched suffix and then the shell code does the linking of the output file. That way other things that the test harness is aware of can also be taken into account.
Cheers,
Dave.
Signature · 2 lines
Dave Chinner [email protected]
Re: [PATCH 3/4] common: Add function for selecting from different output files
Quoted 11 lines · Dave Chinner
Quoted 10 lines · Jan Kara
Add function for selection of different output files. The idea is that in config file ($seq.cfg) there are several lines like:
feat1,feat2: suffix
The function is passed a feature string (or uses
MOUNT_OPTIONSif no argument is passed) and selects output file with a suffix for which all features are present in the feature string. If there is no matching line, output with 'default' suffix is selected.
Quoted 5 lines
Quoted 1 line
Signed-off-by Jan Kara <[email protected]>Looks like a good idea, but probably needs to be integrated into
_link_out_file(), which already does platform based output file linking...
OK, will do.
Quoted 49 lines
Quoted 49 lines
--- common/rc | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)common/rc +37
-0@@ -3142,6 +3142,47 @@ get_block_size() echo `stat -f -c %S $1` } +_select_output() +{ + if [ $# -eq 0 ]; then + FEATURES=${MOUNT_OPTIONS##"-o "} + else + FEATURES=$1 + fi + + export FEATURES + seqfull=$SRC_DIR/$seqnum + perl -e ' + my %feathash; + my $feature, $result, $suffix, $opts; + + foreach $feature (split(/,/, $ENV{"FEATURES"})) { + $feathash{$feature} = 1; + } + $result = "default"; + while (<>) { + my $found = 1; + + chomp; + ($opts, $suffix) = split(/ *: */); + foreach my $opt (split(/,/, $opts)) { + if (!exists($feathash{$opt})) { + $found = 0; + last; + } + } + if ($found == 1) { + $result = $suffix; + last; + } + } + print $result + ' <$seqfull.cfg | { + read SUFFIX
Quoted 8 lines
common/rc get_block_size() · line 3184
Quoted 3 lines
common/rc +3
-0+ ln -fs $seq.out.$SUFFIX $seqfull.out + } +}I'd much prefer the perl code simply returns the appropriately matched suffix and then the shell code does the linking of the output file. That way other things that the test harness is aware of can also be taken into account.
Well, the perl code does return (print) the selected suffix. But I guess you dislike the piping into a shell block where the linking happens. I wanted to save on some shell escaping but it actually won't be that bad. I'll remove the pipe.
Honza
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR
PATCH 4/4 ext4/001: Select different output based on mount options
In reply to Jan KaraDepending on mount options, we handle unwritten extents somewhat differently. So sometimes we end up zeroing out unwritten extent and converting it to written one and sometimes we just split it. Choose expected output based on mount options.
--- tests/ext4/001 | 3 + tests/ext4/001.cfg | 2 + tests/ext4/001.out | 333 --------------------------------------------- tests/ext4/001.out.default | 333 +++++++++++++++++++++++++++++++++++++++++++++ tests/ext4/001.out.nozero | 333 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 671 insertions(+), 333 deletions(-) create mode 100644 tests/ext4/001.cfg delete mode 100644 tests/ext4/001.out create mode 100644 tests/ext4/001.out.default create mode 100644 tests/ext4/001.out.nozero
tests/ext4/001 +3 -0
@@ -48,6 +48,9 @@ _supported_os Linux _require_xfs_io_command "fzero" _require_test +# Select appropriate golden output based on mount options +_select_output + testfile=$TEST_DIR/001.$$ # Standard zero range tests
tests/ext4/001.cfg new file +2 -0
@@ -0,0 +1,2 @@ +dax: nozero +dioread_nolock: nozero
tests/ext4/001.out deleted +0 -333
333 lines not on this page · raw message
tests/ext4/001.out.default new file +333 -0
333 lines not on this page · raw message
tests/ext4/001.out.nozero new file +333 -0
333 lines not on this page · raw message
Signature · 1 line
2.1.4