Add "ashift" property to zpool create
[zfs.git] / cmd / zpool / zpool_main.c
index b1b71ac..b1bf5bd 100644 (file)
@@ -241,7 +241,7 @@ get_usage(zpool_help_t idx) {
                    "\tupgrade -v\n"
                    "\tupgrade [-V version] <-a | pool ...>\n"));
        case HELP_EVENTS:
-               return (gettext("\tevents [-vfc]\n"));
+               return (gettext("\tevents [-vHfc]\n"));
        case HELP_GET:
                return (gettext("\tget <\"all\" | property[,...]> "
                    "<pool> ...\n"));
@@ -488,7 +488,7 @@ zpool_do_add(int argc, char **argv)
        }
 
        /* pass off to get_vdev_spec for processing */
-       nvroot = make_root_vdev(zhp, force, !force, B_FALSE, dryrun,
+       nvroot = make_root_vdev(zhp, NULL, force, !force, B_FALSE, dryrun,
            argc, argv);
        if (nvroot == NULL) {
                zpool_close(zhp);
@@ -688,7 +688,7 @@ zpool_do_create(int argc, char **argv)
        }
 
        /* pass off to get_vdev_spec for bulk processing */
-       nvroot = make_root_vdev(NULL, force, !force, B_FALSE, dryrun,
+       nvroot = make_root_vdev(NULL, props, force, !force, B_FALSE, dryrun,
            argc - 1, argv + 1);
        if (nvroot == NULL)
                goto errout;
@@ -716,9 +716,7 @@ zpool_do_create(int argc, char **argv)
            (strcmp(mountpoint, ZFS_MOUNTPOINT_LEGACY) != 0 &&
            strcmp(mountpoint, ZFS_MOUNTPOINT_NONE) != 0)) {
                char buf[MAXPATHLEN];
-#ifdef HAVE_ZPL
                DIR *dirp;
-#endif
 
                if (mountpoint && mountpoint[0] != '/') {
                        (void) fprintf(stderr, gettext("invalid mountpoint "
@@ -743,7 +741,6 @@ zpool_do_create(int argc, char **argv)
                                    mountpoint);
                }
 
-#ifdef HAVE_ZPL
                if ((dirp = opendir(buf)) == NULL && errno != ENOENT) {
                        (void) fprintf(stderr, gettext("mountpoint '%s' : "
                            "%s\n"), buf, strerror(errno));
@@ -766,7 +763,6 @@ zpool_do_create(int argc, char **argv)
                                goto errout;
                        }
                }
-#endif /* HAVE_ZPL */
        }
 
        if (dryrun) {
@@ -797,12 +793,8 @@ zpool_do_create(int argc, char **argv)
                                            zfs_prop_to_name(
                                            ZFS_PROP_MOUNTPOINT),
                                            mountpoint) == 0);
-#ifdef HAVE_ZPL
                                if (zfs_mount(pool, NULL, 0) == 0)
                                        ret = zfs_shareall(pool);
-#else
-                               ret = 0;
-#endif /* HAVE_ZPL */
                                zfs_close(pool);
                        }
                } else if (libzfs_errno(g_zfs) == EZFS_INVALIDNAME) {
@@ -1541,7 +1533,9 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts,
 
                if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID,
                    &hostid) == 0) {
-                       if ((unsigned long)hostid != gethostid()) {
+                       unsigned long system_hostid = gethostid() & 0xffffffff;
+
+                       if ((unsigned long)hostid != system_hostid) {
                                char *hostname;
                                uint64_t timestamp;
                                time_t t;
@@ -1579,14 +1573,12 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts,
        if ((zhp = zpool_open_canfail(g_zfs, name)) == NULL)
                return (1);
 
-#if HAVE_ZPL
        if (zpool_get_state(zhp) != POOL_STATE_UNAVAIL &&
            !(flags & ZFS_IMPORT_ONLY) &&
            zpool_enable_datasets(zhp, mntopts, 0) != 0) {
                zpool_close(zhp);
                return (1);
        }
-#endif /* HAVE_ZPL */
 
        zpool_close(zhp);
        return (0);
@@ -2691,7 +2683,7 @@ zpool_do_attach_or_replace(int argc, char **argv, int replacing)
                return (1);
        }
 
-       nvroot = make_root_vdev(zhp, force, B_FALSE, replacing, B_FALSE,
+       nvroot = make_root_vdev(zhp, NULL, force, B_FALSE, replacing, B_FALSE,
            argc, argv);
        if (nvroot == NULL) {
                zpool_close(zhp);
@@ -4228,6 +4220,7 @@ zpool_do_history(int argc, char **argv)
 
 typedef struct ev_opts {
        int verbose;
+       int scripted;
        int follow;
        int clear;
 } ev_opts_t;
@@ -4342,7 +4335,7 @@ zpool_do_events_nvprint(nvlist_t *nvl, int depth)
                        printf(gettext("(embedded nvlist)\n"));
                        (void) nvpair_value_nvlist(nvp, &cnv);
                        zpool_do_events_nvprint(cnv, depth + 8);
-                       printf(gettext("%*s(end %s)\n"), depth, "", name);
+                       printf(gettext("%*s(end %s)"), depth, "", name);
                        break;
 
                case DATA_TYPE_NVLIST_ARRAY: {
@@ -4472,7 +4465,8 @@ zpool_do_events_next(ev_opts_t *opts)
         cleanup_fd = open(ZFS_DEV, O_RDWR);
         VERIFY(cleanup_fd >= 0);
 
-       (void) printf(gettext("%-30s %s\n"), "TIME", "CLASS");
+       if (!opts->scripted)
+               (void) printf(gettext("%-30s %s\n"), "TIME", "CLASS");
 
        while (1) {
                ret = zpool_events_next(g_zfs, &nvl, &dropped,
@@ -4523,11 +4517,14 @@ zpool_do_events(int argc, char **argv)
        int c;
 
        /* check options */
-       while ((c = getopt(argc, argv, "vfc")) != -1) {
+       while ((c = getopt(argc, argv, "vHfc")) != -1) {
                switch (c) {
                case 'v':
                        opts.verbose = 1;
                        break;
+               case 'H':
+                       opts.scripted = 1;
+                       break;
                case 'f':
                        opts.follow = 1;
                        break;
@@ -4712,14 +4709,6 @@ main(int argc, char **argv)
        (void) setlocale(LC_ALL, "");
        (void) textdomain(TEXT_DOMAIN);
 
-       if ((g_zfs = libzfs_init()) == NULL) {
-               (void) fprintf(stderr, gettext("internal error: failed to "
-                   "initialize ZFS library\n"));
-               return (1);
-       }
-
-       libzfs_print_on_error(g_zfs, B_TRUE);
-
        opterr = 0;
 
        /*
@@ -4735,9 +4724,15 @@ main(int argc, char **argv)
        /*
         * Special case '-?'
         */
-       if (strcmp(cmdname, "-?") == 0)
+       if ((strcmp(cmdname, "-?") == 0) ||
+            strcmp(cmdname, "--help") == 0)
                usage(B_TRUE);
 
+       if ((g_zfs = libzfs_init()) == NULL)
+               return (1);
+
+       libzfs_print_on_error(g_zfs, B_TRUE);
+
        zpool_set_history_str("zpool", argc, argv, history_str);
        verify(zpool_stage_history(g_zfs, history_str) == 0);