From f16bfd40003c206854f3f422bb3cbe844a61abee Mon Sep 17 00:00:00 2001 From: John Poduska Date: Fri, 2 Oct 2020 20:40:46 -0400 Subject: [PATCH] Mismatched nvlist names in zfs_keys_send_space This causes "zfs send -vt ..." to fail with: cannot resume send: Unknown error 1030 It turns out that some of the name/value pairs in the verification list for zfs_ioc_send_space(), zfs_keys_send_space, had the wrong name, so the ioctl got kicked out in zfs_check_input_nvpairs(). Update the names accordingly. Reviewed-by: Brian Behlendorf Reviewed-by: Ryan Moeller Signed-off-by: John Poduska Closes #10978 --- module/zfs/zfs_ioctl.c | 10 ++++++---- tests/zfs-tests/tests/functional/rsend/rsend.kshlib | 13 ++++++++++--- .../tests/functional/rsend/rsend_024_pos.ksh | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index eff66b32fcb1..d2550750cb7e 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -6429,8 +6429,10 @@ send_space_sum(objset_t *os, void *buf, int len, void *arg) * presence indicates DRR_WRITE_EMBEDDED records are permitted * (optional) "compressok" -> (value ignored) * presence indicates compressed DRR_WRITE records are permitted - * (optional) "rawok" -> (value ignored) + * (optional) "rawok" -> (value ignored) * presence indicates raw encrypted records should be used. + * (optional) "resume_object" and "resume_offset" -> (uint64) + * if present, resume send stream from specified object and offset. * (optional) "fd" -> file descriptor to use as a cookie for progress * tracking (int32) * } @@ -6448,9 +6450,9 @@ static const zfs_ioc_key_t zfs_keys_send_space[] = { {"rawok", DATA_TYPE_BOOLEAN, ZK_OPTIONAL}, {"fd", DATA_TYPE_INT32, ZK_OPTIONAL}, {"redactbook", DATA_TYPE_STRING, ZK_OPTIONAL}, - {"resumeobj", DATA_TYPE_UINT64, ZK_OPTIONAL}, - {"resumeoff", DATA_TYPE_UINT64, ZK_OPTIONAL}, - {"bytes", DATA_TYPE_UINT64, ZK_OPTIONAL}, + {"resume_object", DATA_TYPE_UINT64, ZK_OPTIONAL}, + {"resume_offset", DATA_TYPE_UINT64, ZK_OPTIONAL}, + {"bytes", DATA_TYPE_UINT64, ZK_OPTIONAL}, }; static int diff --git a/tests/zfs-tests/tests/functional/rsend/rsend.kshlib b/tests/zfs-tests/tests/functional/rsend/rsend.kshlib index c82b0f008e32..26755e87d0a5 100644 --- a/tests/zfs-tests/tests/functional/rsend/rsend.kshlib +++ b/tests/zfs-tests/tests/functional/rsend/rsend.kshlib @@ -635,12 +635,14 @@ function file_check # $1 The ZFS send command # $2 The filesystem where the streams are sent # $3 The receive filesystem +# $4 Test dry-run (optional) # function resume_test { - sendcmd=$1 - streamfs=$2 - recvfs=$3 + typeset sendcmd=$1 + typeset streamfs=$2 + typeset recvfs=$3 + typeset dryrun=${4:-1} stream_num=1 log_must eval "$sendcmd >/$streamfs/$stream_num" @@ -651,6 +653,11 @@ function resume_test stream_num=$((stream_num+1)) token=$(zfs get -Hp -o value receive_resume_token $recvfs) + + # Do a dry-run + [ $dryrun -ne 0 ] && \ + log_must eval "zfs send -nvt $token > /dev/null" + log_must eval "zfs send -t $token >/$streamfs/$stream_num" [[ -f /$streamfs/$stream_num ]] || \ log_fail "NO FILE /$streamfs/$stream_num" diff --git a/tests/zfs-tests/tests/functional/rsend/rsend_024_pos.ksh b/tests/zfs-tests/tests/functional/rsend/rsend_024_pos.ksh index 2d9fb01af10f..c44985ae8c1d 100755 --- a/tests/zfs-tests/tests/functional/rsend/rsend_024_pos.ksh +++ b/tests/zfs-tests/tests/functional/rsend/rsend_024_pos.ksh @@ -46,7 +46,7 @@ log_onexit resume_cleanup $sendfs $streamfs test_fs_setup $sendfs $recvfs $streamfs log_must zfs unmount -f $sendfs -resume_test "zfs send $sendfs" $streamfs $recvfs +resume_test "zfs send $sendfs" $streamfs $recvfs 0 file_check $sendfs $recvfs log_pass "Verify resumability of a full ZFS send/receive with the source " \