fi
 }
 
+# do not run on zoned file systems
+_require_scratch_non_zoned()
+{
+       if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ]; then
+               _require_non_zoned_device $SCRATCH_RTDEV
+
+               if echo "$MKFS_OPTIONS" | grep -q 'zoned=1'; then
+                       _notrun "Not supported on zoned file systems"
+               fi
+       fi
+}
+
 # Decide if a mount filesystem has metadata directory trees.
 _xfs_mount_has_metadir() {
        local mount="$1"
 
 _require_check_dmesg
 _require_scratch_nocheck
 _require_scratch_xfs_crc
-
 # zoned requires metadir and doesn't support old features
-_require_non_zoned_device $SCRATCH_RTDEV
+_require_scratch_non_zoned
 
 # Does repair know how to add a particular feature to a filesystem?
 check_repair_upgrade()
 
 
 _require_realtime
 _require_scratch
-
-# no extsize support on zoned file systems
-_require_non_zoned_device $SCRATCH_RTDEV
+# no support for rtextsize > 1 on zoned file systems
+_require_scratch_non_zoned
 
 # Check mkfs.xfs option parsing with regards to rtinherit.  XFS doesn't require
 # the realtime volume to be present to set rtinherit, so it's safe to call the
 
 . ./common/filter
 
 _require_scratch
-
-# zoned RT devices don't support rtextsize
-_require_non_zoned_device $SCRATCH_RTDEV
+# no support for rtextsize > 1 on zoned file systems
+_require_scratch_non_zoned
 
 echo "Format and mount"
 _scratch_mkfs -r extsize=7b | _filter_mkfs > $seqres.full 2>$tmp.mkfs
 
 _require_scratch
 _require_realtime
 _require_no_large_scratch_dev
-_require_non_zoned_device $SCRATCH_RTDEV # no growfs support for zoned rt devices
+# growfs on zoned file systems only works on zone boundaries
+_require_scratch_non_zoned
 _scratch_unmount 2>/dev/null
 
 _fill()