]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
common: make _filter_fiemap_flags optionally print the encoded flag
authorFilipe Manana <fdmanana@suse.com>
Mon, 28 Nov 2022 12:07:22 +0000 (12:07 +0000)
committerZorro Lang <zlang@kernel.org>
Thu, 8 Dec 2022 12:46:54 +0000 (20:46 +0800)
We'd like to have some btrfs test cases in the future to verify that
extents are compressed when using fiemap. For that we can just check if
the FIEMAP_EXTENT_ENCODED (0x8) flag is set for an extent. Currently
_filter_fiemap_flags does not print that flag, so this changes it to
print the flag.

However printing the encoded flag is optional, because some tests use
the filter and use its output to match the golden output. So always
printing the flag would make the tests fail on btrfs when they are run
with "-o compress" (or compress-force) set in MOUNT_OPTIONS due to a
mismatch with the golden output. The tests that can be run with or
without compression on btrfs are generic/352, generic/353 and btrfs/279.
Since those tests don't care about the encoded flag, there is no need to
change them, just make the output of the flag optional, and any future
tests that want to check the presence of the encoded flag, will just pass
a parameter to _filter_fiemap_flags to tell it that the encoded flag
should be printed.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
common/punch

index 94599c35b9bb9afe0b7b9ad16ef6f0d70e0b837d..3b8be21a2a3f84ab2909c269dfea1348850519c5 100644 (file)
@@ -109,7 +109,23 @@ _filter_fiemap()
 
 _filter_fiemap_flags()
 {
-       $AWK_PROG '
+       local include_encoded_flag=0
+
+       # Unless a first argument is passed and with a value of 1, the fiemap
+       # encoded flag is filtered out.
+       # This is because tests that use this filter's output in their golden
+       # output may get the encoded flag set or not depending on the filesystem
+       # and its configuration. For example, running btrfs with "-o compress"
+       # (or compress-force) set in MOUNT_OPTIONS, then extents that get
+       # compressed are reported with the encoded flag, otherwise that flag is
+       # not reported. Like this the fs configuration does not cause a mismatch
+       # with the golden output, and tests that exercise specific configurations
+       # can explicitly ask for the encoded flag to be printed.
+       if [ ! -z "$1" ] && [ $1 -eq 1 ]; then
+               include_encoded_flag=1
+       fi
+
+       local awk_script='
                $3 ~ /hole/ {
                        print $1, $2, $3;
                        next;
@@ -126,7 +142,22 @@ _filter_fiemap_flags()
                        if (and(flags, 0x2000)) {
                                flag_str = "shared";
                                set = 1;
-                       }
+                       }'
+
+       if [ $include_encoded_flag -eq 1 ]; then
+               awk_script=$awk_script'
+                       if (and(flags, 0x8)) {
+                               if (set) {
+                                       flag_str = flag_str"|";
+                               } else {
+                                       flag_str = "";
+                               }
+                               flag_str = flag_str"encoded";
+                               set = 1;
+                       }'
+       fi
+
+       awk_script=$awk_script'
                        if (and(flags, 0x1)) {
                                if (set) {
                                        flag_str = flag_str"|";
@@ -136,8 +167,9 @@ _filter_fiemap_flags()
                                flag_str = flag_str"last";
                        }
                        print $1, $2, flag_str
-               }' |
-       _coalesce_extents
+               }'
+
+       $AWK_PROG -e "$awk_script" | _coalesce_extents
 }
 
 # Filters fiemap output to only print the