diff options
author | Eric Schrock <Eric.Schrock@delphix.com> | 2012-04-27 11:14:46 -0700 |
---|---|---|
committer | Eric Schrock <Eric.Schrock@delphix.com> | 2012-04-27 11:14:46 -0700 |
commit | 6a9cb0ea17f11529b1bb8ca31944abd37736b99e (patch) | |
tree | c0efe885d4921bc461e7da8edb7e825c38ad5c34 /usr/src/lib | |
parent | 7d7551bcfe5ded1738ddbe3268520996a32023b4 (diff) | |
download | illumos-joyent-6a9cb0ea17f11529b1bb8ca31944abd37736b99e.tar.gz |
2635 'zfs rename -f' to perform force unmount
Reviewed by: Matt Ahrens <matt@delphix.com>
Reviewed by: George Wilson <George.Wilson@delphix.com>
Reviewed by: Bill Pijewski <wdp@joyent.com>
Reviewed by: Richard Elling <richard.elling@richardelling.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/libbe/common/be_rename.c | 3 | ||||
-rw-r--r-- | usr/src/lib/libzfs/common/libzfs.h | 2 | ||||
-rw-r--r-- | usr/src/lib/libzfs/common/libzfs_dataset.c | 6 |
3 files changed, 7 insertions, 4 deletions
diff --git a/usr/src/lib/libbe/common/be_rename.c b/usr/src/lib/libbe/common/be_rename.c index 1439424d13..dee131834c 100644 --- a/usr/src/lib/libbe/common/be_rename.c +++ b/usr/src/lib/libbe/common/be_rename.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #include <assert.h> @@ -175,7 +176,7 @@ be_rename(nvlist_t *be_attrs) } /* Rename of BE's root dataset. */ - if (zfs_rename(zhp, bt.nbe_root_ds, B_FALSE) != 0) { + if (zfs_rename(zhp, bt.nbe_root_ds, B_FALSE, B_FALSE) != 0) { be_print_err(gettext("be_rename: failed to " "rename dataset (%s): %s\n"), bt.obe_root_ds, libzfs_error_description(g_zfs)); diff --git a/usr/src/lib/libzfs/common/libzfs.h b/usr/src/lib/libzfs/common/libzfs.h index 4fa1f441f3..ccdbf9b4e2 100644 --- a/usr/src/lib/libzfs/common/libzfs.h +++ b/usr/src/lib/libzfs/common/libzfs.h @@ -531,7 +531,7 @@ extern int zfs_destroy_snaps_nvl(zfs_handle_t *, nvlist_t *, boolean_t); extern int zfs_clone(zfs_handle_t *, const char *, nvlist_t *); extern int zfs_snapshot(libzfs_handle_t *, const char *, boolean_t, nvlist_t *); extern int zfs_rollback(zfs_handle_t *, zfs_handle_t *, boolean_t); -extern int zfs_rename(zfs_handle_t *, const char *, boolean_t); +extern int zfs_rename(zfs_handle_t *, const char *, boolean_t, boolean_t); typedef struct sendflags { /* print informational messages (ie, -v was specified) */ diff --git a/usr/src/lib/libzfs/common/libzfs_dataset.c b/usr/src/lib/libzfs/common/libzfs_dataset.c index 86b24bb7e1..43d71a465e 100644 --- a/usr/src/lib/libzfs/common/libzfs_dataset.c +++ b/usr/src/lib/libzfs/common/libzfs_dataset.c @@ -3546,7 +3546,8 @@ zfs_rollback(zfs_handle_t *zhp, zfs_handle_t *snap, boolean_t force) * Renames the given dataset. */ int -zfs_rename(zfs_handle_t *zhp, const char *target, boolean_t recursive) +zfs_rename(zfs_handle_t *zhp, const char *target, boolean_t recursive, + boolean_t force_unmount) { int ret; zfs_cmd_t zc = { 0 }; @@ -3658,7 +3659,8 @@ zfs_rename(zfs_handle_t *zhp, const char *target, boolean_t recursive) } } else { - if ((cl = changelist_gather(zhp, ZFS_PROP_NAME, 0, 0)) == NULL) + if ((cl = changelist_gather(zhp, ZFS_PROP_NAME, 0, + force_unmount ? MS_FORCE : 0)) == NULL) return (-1); if (changelist_haszonedchild(cl)) { |