Illumos #2703: add mechanism to report ZFS send progress
[zfs.git] / cmd / zfs / zfs_main.c
index 9efd037..797c7a5 100644 (file)
@@ -22,7 +22,8 @@
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright 2012 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ * Copyright (c) 2012, Joyent, Inc. All rights reserved.
  */
 
 #include <assert.h>
@@ -243,9 +244,9 @@ get_usage(zfs_help_t idx)
                "snapshot>\n"
                "\treceive [-vnFu] [-d | -e] <filesystem>\n"));
        case HELP_RENAME:
-               return (gettext("\trename <filesystem|volume|snapshot> "
+               return (gettext("\trename [-f] <filesystem|volume|snapshot> "
                    "<filesystem|volume|snapshot>\n"
-                   "\trename -p <filesystem|volume> <filesystem|volume>\n"
+                   "\trename [-f] -p <filesystem|volume> <filesystem|volume>\n"
                    "\trename -r <snapshot> <snapshot>"));
        case HELP_ROLLBACK:
                return (gettext("\trollback [-rRf] <snapshot>\n"));
@@ -1066,7 +1067,7 @@ snapshot_to_nvl_cb(zfs_handle_t *zhp, void *arg)
        int err = 0;
 
        /* Check for clones. */
-       if (!cb->cb_doclones) {
+       if (!cb->cb_doclones && !cb->cb_defer_destroy) {
                cb->cb_target = zhp;
                cb->cb_first = B_TRUE;
                err = zfs_iter_dependents(zhp, B_TRUE,
@@ -3069,8 +3070,8 @@ zfs_do_list(int argc, char **argv)
 }
 
 /*
- * zfs rename <fs | snap | vol> <fs | snap | vol>
- * zfs rename -p <fs | vol> <fs | vol>
+ * zfs rename [-f] <fs | snap | vol> <fs | snap | vol>
+ * zfs rename [-f] -p <fs | vol> <fs | vol>
  * zfs rename -r <snap> <snap>
  *
  * Renames the given dataset to another of the same type.
@@ -3086,9 +3087,10 @@ zfs_do_rename(int argc, char **argv)
        int ret = 0;
        boolean_t recurse = B_FALSE;
        boolean_t parents = B_FALSE;
+       boolean_t force_unmount = B_FALSE;
 
        /* check options */
-       while ((c = getopt(argc, argv, "pr")) != -1) {
+       while ((c = getopt(argc, argv, "prf")) != -1) {
                switch (c) {
                case 'p':
                        parents = B_TRUE;
@@ -3096,6 +3098,9 @@ zfs_do_rename(int argc, char **argv)
                case 'r':
                        recurse = B_TRUE;
                        break;
+               case 'f':
+                       force_unmount = B_TRUE;
+                       break;
                case '?':
                default:
                        (void) fprintf(stderr, gettext("invalid option '%c'\n"),
@@ -3146,7 +3151,7 @@ zfs_do_rename(int argc, char **argv)
                return (1);
        }
 
-       ret = (zfs_rename(zhp, argv[1], recurse) != 0);
+       ret = (zfs_rename(zhp, argv[1], recurse, force_unmount) != 0);
 
        zfs_close(zhp);
        return (ret);
@@ -3547,6 +3552,7 @@ zfs_do_send(int argc, char **argv)
                        if (flags.verbose)
                                extraverbose = B_TRUE;
                        flags.verbose = B_TRUE;
+                       flags.progress = B_TRUE;
                        break;
                case 'D':
                        flags.dedup = B_TRUE;