aboutsummaryrefslogtreecommitdiff
path: root/lib/libzfs/common/libzfs_sendrecv.c
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2018-12-26 07:57:21 +0000
committerAndriy Gapon <avg@FreeBSD.org>2018-12-26 07:57:21 +0000
commit48114cb5bef6d2b4383107fbabd77fd0e52c3dee (patch)
tree71aa5fd62878eda001bfe2e28065cbb3d018a30e /lib/libzfs/common/libzfs_sendrecv.c
parent4cabda1b4daa904600d6699312955b40e2e2e5ab (diff)
downloadsrc-48114cb5bef6d2b4383107fbabd77fd0e52c3dee.tar.gz
src-48114cb5bef6d2b4383107fbabd77fd0e52c3dee.zip
9630 add lzc_rename and lzc_destroy to libzfs_core
illumos/illumos-gate@049ba636fa37a2892809192fc671bff9158a01cd https://github.com/illumos/illumos-gate/commit/049ba636fa37a2892809192fc671bff9158a01cd https://www.illumos.org/issues/9630 Rename and destroy are very useful operations that deserve to be in libzfs_core. And they are not hard to implement too. Reviewed by: Andy Stormont <astormont@racktopsystems.com> Reviewed by: Matt Ahrens <matt@delphix.com> Reviewed by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com> Approved by: Dan McDonald <danmcd@joyent.com> Author: Andriy Gapon <avg@FreeBSD.org>
Notes
Notes: svn path=/vendor-sys/illumos/dist/; revision=342469
Diffstat (limited to 'lib/libzfs/common/libzfs_sendrecv.c')
-rw-r--r--lib/libzfs/common/libzfs_sendrecv.c35
1 files changed, 14 insertions, 21 deletions
diff --git a/lib/libzfs/common/libzfs_sendrecv.c b/lib/libzfs/common/libzfs_sendrecv.c
index d3002aec290a..e56aa7f7c167 100644
--- a/lib/libzfs/common/libzfs_sendrecv.c
+++ b/lib/libzfs/common/libzfs_sendrecv.c
@@ -2133,7 +2133,6 @@ recv_rename(libzfs_handle_t *hdl, const char *name, const char *tryname,
int baselen, char *newname, recvflags_t *flags)
{
static int seq;
- zfs_cmd_t zc = { 0 };
int err;
prop_changelist_t *clp;
zfs_handle_t *zhp;
@@ -2150,19 +2149,13 @@ recv_rename(libzfs_handle_t *hdl, const char *name, const char *tryname,
if (err)
return (err);
- zc.zc_objset_type = DMU_OST_ZFS;
- (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name));
-
if (tryname) {
(void) strcpy(newname, tryname);
-
- (void) strlcpy(zc.zc_value, tryname, sizeof (zc.zc_value));
-
if (flags->verbose) {
(void) printf("attempting rename %s to %s\n",
- zc.zc_name, zc.zc_value);
+ name, newname);
}
- err = ioctl(hdl->libzfs_fd, ZFS_IOC_RENAME, &zc);
+ err = lzc_rename(name, newname);
if (err == 0)
changelist_rename(clp, name, tryname);
} else {
@@ -2174,13 +2167,11 @@ recv_rename(libzfs_handle_t *hdl, const char *name, const char *tryname,
(void) snprintf(newname, ZFS_MAX_DATASET_NAME_LEN,
"%.*srecv-%u-%u", baselen, name, getpid(), seq);
- (void) strlcpy(zc.zc_value, newname, sizeof (zc.zc_value));
-
if (flags->verbose) {
(void) printf("failed - trying rename %s to %s\n",
- zc.zc_name, zc.zc_value);
+ name, newname);
}
- err = ioctl(hdl->libzfs_fd, ZFS_IOC_RENAME, &zc);
+ err = lzc_rename(name, newname);
if (err == 0)
changelist_rename(clp, name, newname);
if (err && flags->verbose) {
@@ -2205,7 +2196,6 @@ static int
recv_destroy(libzfs_handle_t *hdl, const char *name, int baselen,
char *newname, recvflags_t *flags)
{
- zfs_cmd_t zc = { 0 };
int err = 0;
prop_changelist_t *clp;
zfs_handle_t *zhp;
@@ -2228,17 +2218,20 @@ recv_destroy(libzfs_handle_t *hdl, const char *name, int baselen,
if (err)
return (err);
- zc.zc_objset_type = DMU_OST_ZFS;
- zc.zc_defer_destroy = defer;
- (void) strlcpy(zc.zc_name, name, sizeof (zc.zc_name));
-
if (flags->verbose)
- (void) printf("attempting destroy %s\n", zc.zc_name);
- err = ioctl(hdl->libzfs_fd, ZFS_IOC_DESTROY, &zc);
+ (void) printf("attempting destroy %s\n", name);
+ if (zhp->zfs_type == ZFS_TYPE_SNAPSHOT) {
+ nvlist_t *nv = fnvlist_alloc();
+ fnvlist_add_boolean(nv, name);
+ err = lzc_destroy_snaps(nv, defer, NULL);
+ fnvlist_free(nv);
+ } else {
+ err = lzc_destroy(name);
+ }
if (err == 0) {
if (flags->verbose)
(void) printf("success\n");
- changelist_remove(clp, zc.zc_name);
+ changelist_remove(clp, name);
}
(void) changelist_postfix(clp);