mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 11:19:32 +03:00
Fix handling of errors nvlist in zfs_ioc_recv_new()
zfs_ioc_recv_impl() is changed to always allocate the 'errors' nvlist, its callers are responsible for freeing it. Signed-off-by: Gvozden Neskovic <neskovic@gmail.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #4829
This commit is contained in:
parent
81edd3e834
commit
1bf3bf0e29
@ -4054,8 +4054,8 @@ static boolean_t zfs_ioc_recv_inject_err;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On failure the 'errors' nvlist may be allocated and will contain a
|
* nvlist 'errors' is always allocated. It will contain descriptions of
|
||||||
* descriptions of the failures. It's the callers responsibilty to free.
|
* encountered errors, if any. It's the callers responsibility to free.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
zfs_ioc_recv_impl(char *tofs, char *tosnap, char *origin,
|
zfs_ioc_recv_impl(char *tofs, char *tosnap, char *origin,
|
||||||
@ -4072,7 +4072,10 @@ zfs_ioc_recv_impl(char *tofs, char *tosnap, char *origin,
|
|||||||
boolean_t first_recvd_props = B_FALSE;
|
boolean_t first_recvd_props = B_FALSE;
|
||||||
file_t *input_fp;
|
file_t *input_fp;
|
||||||
|
|
||||||
*errors = NULL;
|
*read_bytes = 0;
|
||||||
|
*errflags = 0;
|
||||||
|
*errors = fnvlist_alloc();
|
||||||
|
|
||||||
input_fp = getf(input_fd);
|
input_fp = getf(input_fd);
|
||||||
if (input_fp == NULL)
|
if (input_fp == NULL)
|
||||||
return (SET_ERROR(EBADF));
|
return (SET_ERROR(EBADF));
|
||||||
@ -4082,10 +4085,6 @@ zfs_ioc_recv_impl(char *tofs, char *tosnap, char *origin,
|
|||||||
if (error != 0)
|
if (error != 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
*read_bytes = 0;
|
|
||||||
*errflags = 0;
|
|
||||||
*errors = fnvlist_alloc();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set properties before we receive the stream so that they are applied
|
* Set properties before we receive the stream so that they are applied
|
||||||
* to the new data. Note that we must call dmu_recv_stream() if
|
* to the new data. Note that we must call dmu_recv_stream() if
|
||||||
|
Loading…
Reference in New Issue
Block a user