zfs_ioc_rename should not leave the value of zc_name passed in via zc altered
on return. MFC after: 1 week
This commit is contained in:
parent
5d2437d56f
commit
c2f521e2b9
@ -3612,6 +3612,8 @@ zfs_ioc_rename(zfs_cmd_t *zc)
|
||||
at = strchr(zc->zc_name, '@');
|
||||
if (at != NULL) {
|
||||
/* snaps must be in same fs */
|
||||
int error;
|
||||
|
||||
if (strncmp(zc->zc_name, zc->zc_value, at - zc->zc_name + 1))
|
||||
return (SET_ERROR(EXDEV));
|
||||
*at = '\0';
|
||||
@ -3620,14 +3622,19 @@ zfs_ioc_rename(zfs_cmd_t *zc)
|
||||
#else
|
||||
if (zc->zc_objset_type == DMU_OST_ZFS && allow_mounted) {
|
||||
#endif
|
||||
int error = dmu_objset_find(zc->zc_name,
|
||||
error = dmu_objset_find(zc->zc_name,
|
||||
recursive_unmount, at + 1,
|
||||
recursive ? DS_FIND_CHILDREN : 0);
|
||||
if (error != 0)
|
||||
if (error != 0) {
|
||||
*at = '@';
|
||||
return (error);
|
||||
}
|
||||
}
|
||||
return (dsl_dataset_rename_snapshot(zc->zc_name,
|
||||
at + 1, strchr(zc->zc_value, '@') + 1, recursive));
|
||||
error = dsl_dataset_rename_snapshot(zc->zc_name,
|
||||
at + 1, strchr(zc->zc_value, '@') + 1, recursive);
|
||||
*at = '@';
|
||||
|
||||
return (error);
|
||||
} else {
|
||||
#ifdef illumos
|
||||
if (zc->zc_objset_type == DMU_OST_ZVOL)
|
||||
|
Loading…
x
Reference in New Issue
Block a user