[PATCH V2 13/16] Filter fiemap output by FS block size

Chandan Rajendra
2018-09-06T13:13:12Z

When testing FS instances of block size other than 4k, the output of
fiemap command will not match those in *.out files. This commit adds
an optional "block size" argument to _filter_fiemap() which prints
fiemap output in units of block size.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
---
common/punch | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/common/punch b/common/punch
index 8088b01..0fc7729 100644
--- a/common/punch
+++ b/common/punch
@@ -165,7 +165,11 @@ _test_punch() {

_coalesce_extents()
{
- awk -F: '
+ block_size=$1
+
+ [[ -z $block_size ]] && block_size=512
+
+ awk -v block_size="$block_size" -F: '
{
range = $2;
type = $3;
@@ -176,19 +180,24 @@ _coalesce_extents()

if (type != prev_type) {
if (prev_type != "")
- printf("%u]:%s\n", low - 1, prev_type);
- printf("%u: [%u..", out_count++, low);
+ printf("%u]:%s\n", (low * 512 / block_size) - 1,
+ prev_type);
+ printf("%u: [%u..", out_count++,
+ (low * 512) / block_size);
prev_type = type;
}
}
END {
if (prev_type != "")
- printf("%u]:%s\n", high, prev_type);
+ printf("%u]:%s\n", ((high + 1) * 512 / block_size) - 1,
+ prev_type);
}'
}

_filter_fiemap()
{
+ block_size=$1
+
$AWK_PROG '
$3 ~ /hole/ {
print $1, $2, $3;
@@ -201,7 +210,7 @@ _filter_fiemap()
$5 ~ /0x[[:xdigit:]]+/ {
print $1, $2, "data";
}' |
- _coalesce_extents
+ _coalesce_extents $block_size
}

_filter_fiemap_flags()
--
2.9.5