]> git.proxmox.com Git - mirror_zfs.git/blobdiff - cmd/zfs/zfs_main.c
Illumos 4951 - ZFS administrative commands should use reserved space
[mirror_zfs.git] / cmd / zfs / zfs_main.c
index 521ce3c2bbe945d9ac66b0754d199d856335740d..50ac59fba74766034aa5def8ae29c9efafd75ae1 100644 (file)
@@ -21,7 +21,7 @@
 
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
  * Copyright (c) 2012, Joyent, Inc. All rights reserved.
  * Copyright (c) 2013 Steven Hartland.  All rights reserved.
  * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
@@ -258,9 +258,9 @@ get_usage(zfs_help_t idx)
        case HELP_ROLLBACK:
                return (gettext("\trollback [-rRf] <snapshot>\n"));
        case HELP_SEND:
-               return (gettext("\tsend [-DnPpRrv] [-[iI] snapshot] "
+               return (gettext("\tsend [-DnPpRrve] [-[iI] snapshot] "
                    "<snapshot>\n"
-                   "\tsend [-i snapshot|bookmark] "
+                   "\tsend [-e] [-i snapshot|bookmark] "
                    "<filesystem|volume|snapshot>\n"));
        case HELP_SET:
                return (gettext("\tset <property=value> "
@@ -1903,9 +1903,13 @@ zfs_do_inherit(int argc, char **argv)
                        if (prop == ZFS_PROP_QUOTA ||
                            prop == ZFS_PROP_RESERVATION ||
                            prop == ZFS_PROP_REFQUOTA ||
-                           prop == ZFS_PROP_REFRESERVATION)
+                           prop == ZFS_PROP_REFRESERVATION) {
                                (void) fprintf(stderr, gettext("use 'zfs set "
                                    "%s=none' to clear\n"), propname);
+                               (void) fprintf(stderr, gettext("use 'zfs "
+                                   "inherit -S %s' to revert to received "
+                                   "value\n"), propname);
+                       }
                        return (1);
                }
                if (received && (prop == ZFS_PROP_VOLSIZE ||
@@ -3338,6 +3342,8 @@ rollback_check_dependent(zfs_handle_t *zhp, void *data)
        zfs_close(zhp);
        return (0);
 }
+
+
 /*
  * Report any snapshots more recent than the one specified.  Used when '-r' is
  * not specified.  We reuse this same callback for the snapshot dependents - if
@@ -3677,7 +3683,7 @@ zfs_do_send(int argc, char **argv)
        boolean_t extraverbose = B_FALSE;
 
        /* check options */
-       while ((c = getopt(argc, argv, ":i:I:RDpvnP")) != -1) {
+       while ((c = getopt(argc, argv, ":i:I:RDpvnPe")) != -1) {
                switch (c) {
                case 'i':
                        if (fromname)
@@ -3712,6 +3718,9 @@ zfs_do_send(int argc, char **argv)
                case 'n':
                        flags.dryrun = B_TRUE;
                        break;
+               case 'e':
+                       flags.embed_data = B_TRUE;
+                       break;
                case ':':
                        (void) fprintf(stderr, gettext("missing argument for "
                            "'%c' option\n"), optopt);
@@ -3750,6 +3759,7 @@ zfs_do_send(int argc, char **argv)
        if (strchr(argv[0], '@') == NULL ||
            (fromname && strchr(fromname, '#') != NULL)) {
                char frombuf[ZFS_MAXNAMELEN];
+               enum lzc_send_flags lzc_flags = 0;
 
                if (flags.replicate || flags.doall || flags.props ||
                    flags.dedup || flags.dryrun || flags.verbose ||
@@ -3764,6 +3774,9 @@ zfs_do_send(int argc, char **argv)
                if (zhp == NULL)
                        return (1);
 
+               if (flags.embed_data)
+                       lzc_flags |= LZC_SEND_FLAG_EMBED_DATA;
+
                if (fromname != NULL &&
                    (fromname[0] == '#' || fromname[0] == '@')) {
                        /*
@@ -3777,7 +3790,7 @@ zfs_do_send(int argc, char **argv)
                        (void) strlcat(frombuf, fromname, sizeof (frombuf));
                        fromname = frombuf;
                }
-               err = zfs_send_one(zhp, fromname, STDOUT_FILENO);
+               err = zfs_send_one(zhp, fromname, STDOUT_FILENO, lzc_flags);
                zfs_close(zhp);
                return (err != 0);
        }
@@ -6623,6 +6636,9 @@ zfs_do_bookmark(int argc, char **argv)
                case ENOTSUP:
                        err_msg = "bookmark feature not enabled";
                        break;
+               case ENOSPC:
+                       err_msg = "out of space";
+                       break;
                default:
                        err_msg = "unknown error";
                        break;
@@ -6631,7 +6647,7 @@ zfs_do_bookmark(int argc, char **argv)
                    dgettext(TEXT_DOMAIN, err_msg));
        }
 
-       return (ret);
+       return (ret != 0);
 
 usage:
        usage(B_FALSE);
@@ -6648,6 +6664,8 @@ main(int argc, char **argv)
        (void) setlocale(LC_ALL, "");
        (void) textdomain(TEXT_DOMAIN);
 
+       dprintf_setup(&argc, argv);
+
        opterr = 0;
 
        /*