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 <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: John Poduska <jpoduska@datto.com>
Closes #10978
This commit is contained in:
John Poduska 2020-10-02 20:40:46 -04:00 committed by GitHub
parent 266d1121c3
commit 5b525165e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 8 deletions

View File

@ -6431,6 +6431,8 @@ send_space_sum(objset_t *os, void *buf, int len, void *arg)
* presence indicates compressed DRR_WRITE records are permitted * presence indicates compressed DRR_WRITE records are permitted
* (optional) "rawok" -> (value ignored) * (optional) "rawok" -> (value ignored)
* presence indicates raw encrypted records should be used. * 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 * (optional) "fd" -> file descriptor to use as a cookie for progress
* tracking (int32) * tracking (int32)
* } * }
@ -6448,8 +6450,8 @@ static const zfs_ioc_key_t zfs_keys_send_space[] = {
{"rawok", DATA_TYPE_BOOLEAN, ZK_OPTIONAL}, {"rawok", DATA_TYPE_BOOLEAN, ZK_OPTIONAL},
{"fd", DATA_TYPE_INT32, ZK_OPTIONAL}, {"fd", DATA_TYPE_INT32, ZK_OPTIONAL},
{"redactbook", DATA_TYPE_STRING, ZK_OPTIONAL}, {"redactbook", DATA_TYPE_STRING, ZK_OPTIONAL},
{"resumeobj", DATA_TYPE_UINT64, ZK_OPTIONAL}, {"resume_object", DATA_TYPE_UINT64, ZK_OPTIONAL},
{"resumeoff", DATA_TYPE_UINT64, ZK_OPTIONAL}, {"resume_offset", DATA_TYPE_UINT64, ZK_OPTIONAL},
{"bytes", DATA_TYPE_UINT64, ZK_OPTIONAL}, {"bytes", DATA_TYPE_UINT64, ZK_OPTIONAL},
}; };

View File

@ -635,12 +635,14 @@ function file_check
# $1 The ZFS send command # $1 The ZFS send command
# $2 The filesystem where the streams are sent # $2 The filesystem where the streams are sent
# $3 The receive filesystem # $3 The receive filesystem
# $4 Test dry-run (optional)
# #
function resume_test function resume_test
{ {
sendcmd=$1 typeset sendcmd=$1
streamfs=$2 typeset streamfs=$2
recvfs=$3 typeset recvfs=$3
typeset dryrun=${4:-1}
stream_num=1 stream_num=1
log_must eval "$sendcmd >/$streamfs/$stream_num" log_must eval "$sendcmd >/$streamfs/$stream_num"
@ -651,6 +653,11 @@ function resume_test
stream_num=$((stream_num+1)) stream_num=$((stream_num+1))
token=$(zfs get -Hp -o value receive_resume_token $recvfs) 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" log_must eval "zfs send -t $token >/$streamfs/$stream_num"
[[ -f /$streamfs/$stream_num ]] || \ [[ -f /$streamfs/$stream_num ]] || \
log_fail "NO FILE /$streamfs/$stream_num" log_fail "NO FILE /$streamfs/$stream_num"

View File

@ -46,7 +46,7 @@ log_onexit resume_cleanup $sendfs $streamfs
test_fs_setup $sendfs $recvfs $streamfs test_fs_setup $sendfs $recvfs $streamfs
log_must zfs unmount -f $sendfs 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 file_check $sendfs $recvfs
log_pass "Verify resumability of a full ZFS send/receive with the source " \ log_pass "Verify resumability of a full ZFS send/receive with the source " \