Skip to contentSkip to conversation

Output selection, improvements for ext4/001

PATCH In review Jan Kara 3 participants 7 messages Nov 4, 2015 – Nov 18, 2015

lore
Share & tools
lore

Jan Kara

author
#0 lore raw

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

author
#1 lore raw

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
index e8770ab834a7..be193d67ee56 100644
@@ -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
author
#2 lore raw

PATCH 2/4 ext4/001: Update output

In reply to Jan Kara

After 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
index 212c24783387..c2f728483b23 100644
@@ -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
author
#3 lore raw

PATCH 3/4 common: Add function for selecting from different output files

In reply to 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_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
index adf1edf64d8d..543780c92c59 100644
@@ -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
#4 lore raw

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_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.

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
index adf1edf64d8d..543780c92c59 100644
@@ -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]
#5 lore raw

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_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.

Quoted 5 lines
Quoted 1 line

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
index adf1edf64d8d..543780c92c59 100644
@@ -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
author
#6 lore raw

PATCH 4/4 ext4/001: Select different output based on mount options

In reply to Jan Kara

Depending 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
index 5409f488dd54..e3d607784d23 100755
@@ -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
new file mode 100644
index 000000000000..1942203f91ea
@@ -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