From: Filipe Manana <fdmanana@xxxxxxxx> 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. Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx> --- common/punch | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/common/punch b/common/punch index 94599c35..3b8be21a 100644 --- a/common/punch +++ b/common/punch @@ -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 -- 2.35.1