From 103bc5b957b0456814665947a5db7348dcd9d78a Mon Sep 17 00:00:00 2001 From: Ryan Moeller Date: Thu, 16 Jul 2020 00:26:39 -0400 Subject: [PATCH] ZTS: Fix nonportable use of stat in list_file_blocks FreeBSD stat uses -f to specify the format string rather than -c. list_file_blocks in blkdev.shlib uses stat -c %i to get a file's object ID for zdb. We already have a library function to do this portably. Use get_objnum to get the file's object ID. Take log_must off of the call to list_free_blocks in corrupt_blocks_at_level, which had masked the error. It was not good to pipe the output of log_must into the while-loop, anyway. Reviewed-by: Brian Behlendorf Reviewed-by: Alek Pinchuk Reviewed-by: John Kennedy Signed-off-by: Ryan Moeller Closes #10572 --- tests/zfs-tests/include/blkdev.shlib | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/zfs-tests/include/blkdev.shlib b/tests/zfs-tests/include/blkdev.shlib index 5fda6a1bd..28f439fca 100644 --- a/tests/zfs-tests/include/blkdev.shlib +++ b/tests/zfs-tests/include/blkdev.shlib @@ -542,7 +542,7 @@ function list_file_blocks # input_file typeset ds="$(zfs list -H -o name $input_file)" typeset pool="${ds%%/*}" - typeset inum="$(stat -c '%i' $input_file)" + typeset objnum="$(get_objnum $input_file)" # # Establish a mapping between vdev ids as shown in a DVA and the @@ -573,7 +573,7 @@ function list_file_blocks # input_file # log_must zpool sync -f typeset level path offset length - zdb -ddddd $ds $inum | awk -F: ' + zdb -ddddd $ds $objnum | awk -F: ' BEGIN { looking = 0 } /^Indirect blocks:/ { looking = 1} /^\t\tsegment / { looking = 0} @@ -602,13 +602,13 @@ function corrupt_blocks_at_level # input_file corrupt_level sysctl kern.geom.debugflags=16 fi - log_must list_file_blocks $input_file | \ - while read level path offset length; do + list_file_blocks $input_file | \ + while read level path offset length; do if [[ $level = $corrupt_level ]]; then log_must dd if=/dev/urandom of=$path bs=512 \ count=$length seek=$offset conv=notrunc fi - done + done if is_freebsd; then sysctl kern.geom.debugflags=$debugflags