]> git.proxmox.com Git - mirror_zfs.git/commitdiff
ZTS: Fix nonportable use of stat in list_file_blocks
authorRyan Moeller <ryan@iXsystems.com>
Thu, 16 Jul 2020 04:26:39 +0000 (00:26 -0400)
committerGitHub <noreply@github.com>
Thu, 16 Jul 2020 04:26:39 +0000 (21:26 -0700)
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 <behlendorf1@llnl.gov>
Reviewed-by: Alek Pinchuk <apinchuk@datto.com>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10572

tests/zfs-tests/include/blkdev.shlib

index 5fda6a1bdd354ea41bcea56484db3e4a029b899b..28f439fcad25a5858d112bbce9236c9f382bd868 100644 (file)
@@ -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