在 2024/7/12 09:35, fdmanana@xxxxxxxxxx 写道:
From: Filipe Manana <fdmanana@xxxxxxxx> Commit 199d0a992536df3702a0c4843d2a449d54f399c2 ("common/btrfs: introduce _require_btrfs_send_version") turned _require_btrfs_send_v2 into a generic helper to detect support for any send stream version, however it's only working for detecting kernel support, it misses detecting the support from btrfs-progs - it always checks only that it supports v2 (the send command supports the --compressed-data option). Fix that by verifying that btrfs-progs supports the requested version. Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx> --- common/btrfs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/common/btrfs b/common/btrfs index be5948db..953dc2a0 100644 --- a/common/btrfs +++ b/common/btrfs @@ -777,17 +777,30 @@ _require_btrfs_corrupt_block() _require_btrfs_send_version() { local version=$1 + local ret - # Check first if btrfs-progs supports the v2 stream. - _require_btrfs_command send --compressed-data - - # Now check the kernel support. If send_stream_version does not exists, + # Check the kernel support. If send_stream_version does not exists, # then it's a kernel that only supports v1. [ -f /sys/fs/btrfs/features/send_stream_version ] || \ _notrun "kernel does not support send stream $version" [ $(cat /sys/fs/btrfs/features/send_stream_version) -ge $version ] || \ _notrun "kernel does not support send stream $version" + + # Now check that btrfs-progs supports the requested stream version. + _scratch_mkfs &> /dev/null || \ + _fail "mkfs failed at _require_btrfs_send_version" + _scratch_mount + $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \ + $SCRATCH_MNT/snap &> /dev/null + $BTRFS_UTIL_PROG send --proto $version -f /dev/null \ + $SCRATCH_MNT/snap 2> /dev/null
IHMO we can just skip the -f option and redirect both stderr and stdout into /dev/null. Otherwise looks good to me. Reviewed-by: Qu Wenruo <wqu@xxxxxxxx> Thanks, Qu
+ ret=$? + _scratch_unmount + + if [ $ret -ne 0 ]; then + _notrun "btrfs-progs does not support send stream version $version" + fi } # Get the bytenr associated to a file extent item at a given file offset.