Author: mm
Date: Mon Jul  2 07:50:15 2012
New Revision: 237976
URL: http://svn.freebsd.org/changeset/base/237976

Log:
  Update vendor/illumos/dist to illumos-gate revision 13743:95aba6e49b9f
  
  Obtained from:        illumos

Added:
  vendor/illumos/dist/lib/libzfs_core/
  vendor/illumos/dist/lib/libzfs_core/common/
  vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.c
  vendor/illumos/dist/lib/libzfs_core/common/libzfs_core.h
Modified:
  vendor/illumos/dist/cmd/zdb/zdb.c
  vendor/illumos/dist/cmd/zfs/zfs_main.c
  vendor/illumos/dist/cmd/zhack/zhack.c
  vendor/illumos/dist/cmd/zpool/zpool_main.c
  vendor/illumos/dist/cmd/ztest/ztest.c
  vendor/illumos/dist/common/zfs/zfs_comutil.c
  vendor/illumos/dist/common/zfs/zfs_comutil.h
  vendor/illumos/dist/common/zfs/zprop_common.c
  vendor/illumos/dist/lib/libzfs/common/libzfs.h
  vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
  vendor/illumos/dist/lib/libzfs/common/libzfs_impl.h
  vendor/illumos/dist/lib/libzfs/common/libzfs_iter.c
  vendor/illumos/dist/lib/libzfs/common/libzfs_pool.c
  vendor/illumos/dist/lib/libzfs/common/libzfs_util.c
  vendor/illumos/dist/lib/libzpool/common/kernel.c
  vendor/illumos/dist/lib/libzpool/common/sys/zfs_context.h
  vendor/illumos/dist/man/man1m/zfs.1m
  vendor/illumos/dist/uts/common/fs/zfs/dmu_objset.c
  vendor/illumos/dist/uts/common/fs/zfs/dmu_send.c
  vendor/illumos/dist/uts/common/fs/zfs/dmu_tx.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_dataset.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_deleg.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_dir.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_prop.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_scan.c
  vendor/illumos/dist/uts/common/fs/zfs/dsl_synctask.c
  vendor/illumos/dist/uts/common/fs/zfs/rrwlock.c
  vendor/illumos/dist/uts/common/fs/zfs/spa.c
  vendor/illumos/dist/uts/common/fs/zfs/spa_history.c
  vendor/illumos/dist/uts/common/fs/zfs/sys/dmu.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/dmu_objset.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/dsl_dataset.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/dsl_deleg.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/dsl_prop.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/rrwlock.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/spa.h
  vendor/illumos/dist/uts/common/fs/zfs/sys/zfs_ioctl.h
  vendor/illumos/dist/uts/common/fs/zfs/zfs_ctldir.c
  vendor/illumos/dist/uts/common/fs/zfs/zfs_ioctl.c
  vendor/illumos/dist/uts/common/fs/zfs/zfs_vfsops.c
  vendor/illumos/dist/uts/common/fs/zfs/zvol.c
  vendor/illumos/dist/uts/common/sys/fs/zfs.h

Modified: vendor/illumos/dist/cmd/zdb/zdb.c
==============================================================================
--- vendor/illumos/dist/cmd/zdb/zdb.c   Mon Jul  2 07:39:55 2012        
(r237975)
+++ vendor/illumos/dist/cmd/zdb/zdb.c   Mon Jul  2 07:50:15 2012        
(r237976)
@@ -57,6 +57,7 @@
 #include <sys/arc.h>
 #include <sys/ddt.h>
 #include <sys/zfeature.h>
+#include <zfs_comutil.h>
 #undef ZFS_MAXNAMELEN
 #undef verify
 #include <libzfs.h>
@@ -204,6 +205,27 @@ dump_packed_nvlist(objset_t *os, uint64_
        nvlist_free(nv);
 }
 
+/* ARGSUSED */
+static void
+dump_history_offsets(objset_t *os, uint64_t object, void *data, size_t size)
+{
+       spa_history_phys_t *shp = data;
+
+       if (shp == NULL)
+               return;
+
+       (void) printf("\t\tpool_create_len = %llu\n",
+           (u_longlong_t)shp->sh_pool_create_len);
+       (void) printf("\t\tphys_max_off = %llu\n",
+           (u_longlong_t)shp->sh_phys_max_off);
+       (void) printf("\t\tbof = %llu\n",
+           (u_longlong_t)shp->sh_bof);
+       (void) printf("\t\teof = %llu\n",
+           (u_longlong_t)shp->sh_eof);
+       (void) printf("\t\trecords_lost = %llu\n",
+           (u_longlong_t)shp->sh_records_lost);
+}
+
 static void
 zdb_nicenum(uint64_t num, char *buf)
 {
@@ -853,21 +875,22 @@ dump_history(spa_t *spa)
        for (int i = 0; i < num; i++) {
                uint64_t time, txg, ievent;
                char *cmd, *intstr;
+               boolean_t printed = B_FALSE;
 
                if (nvlist_lookup_uint64(events[i], ZPOOL_HIST_TIME,
                    &time) != 0)
-                       continue;
+                       goto next;
                if (nvlist_lookup_string(events[i], ZPOOL_HIST_CMD,
                    &cmd) != 0) {
                        if (nvlist_lookup_uint64(events[i],
                            ZPOOL_HIST_INT_EVENT, &ievent) != 0)
-                               continue;
+                               goto next;
                        verify(nvlist_lookup_uint64(events[i],
                            ZPOOL_HIST_TXG, &txg) == 0);
                        verify(nvlist_lookup_string(events[i],
                            ZPOOL_HIST_INT_STR, &intstr) == 0);
-                       if (ievent >= LOG_END)
-                               continue;
+                       if (ievent >= ZFS_NUM_LEGACY_HISTORY_EVENTS)
+                               goto next;
 
                        (void) snprintf(internalstr,
                            sizeof (internalstr),
@@ -880,6 +903,14 @@ dump_history(spa_t *spa)
                (void) localtime_r(&tsec, &t);
                (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t);
                (void) printf("%s %s\n", tbuf, cmd);
+               printed = B_TRUE;
+
+next:
+               if (dump_opt['h'] > 1) {
+                       if (!printed)
+                               (void) printf("unrecognized record:\n");
+                       dump_nvlist(events[i], 2);
+               }
        }
 }
 
@@ -1456,7 +1487,7 @@ static object_viewer_t *object_viewer[DM
        dump_zap,               /* other ZAP                    */
        dump_zap,               /* persistent error log         */
        dump_uint8,             /* SPA history                  */
-       dump_uint64,            /* SPA history offsets          */
+       dump_history_offsets,   /* SPA history offsets          */
        dump_zap,               /* Pool properties              */
        dump_zap,               /* DSL permissions              */
        dump_acl,               /* ZFS ACL                      */

Modified: vendor/illumos/dist/cmd/zfs/zfs_main.c
==============================================================================
--- vendor/illumos/dist/cmd/zfs/zfs_main.c      Mon Jul  2 07:39:55 2012        
(r237975)
+++ vendor/illumos/dist/cmd/zfs/zfs_main.c      Mon Jul  2 07:50:15 2012        
(r237976)
@@ -56,6 +56,7 @@
 #include <time.h>
 
 #include <libzfs.h>
+#include <libzfs_core.h>
 #include <zfs_prop.h>
 #include <zfs_deleg.h>
 #include <libuutil.h>
@@ -70,6 +71,7 @@ libzfs_handle_t *g_zfs;
 
 static FILE *mnttab_file;
 static char history_str[HIS_MAX_RECORD_LEN];
+static boolean_t log_history = B_TRUE;
 
 static int zfs_do_clone(int argc, char **argv);
 static int zfs_do_create(int argc, char **argv);
@@ -259,7 +261,7 @@ get_usage(zfs_help_t idx)
                return (gettext("\tshare <-a | filesystem>\n"));
        case HELP_SNAPSHOT:
                return (gettext("\tsnapshot [-r] [-o property=value] ... "
-                   "<filesystem@snapname|volume@snapname>\n"));
+                   "<filesystem@snapname|volume@snapname> ...\n"));
        case HELP_UNMOUNT:
                return (gettext("\tunmount [-f] "
                    "<-a | filesystem|mountpoint>\n"));
@@ -888,9 +890,9 @@ typedef struct destroy_cbdata {
        nvlist_t        *cb_nvl;
 
        /* first snap in contiguous run */
-       zfs_handle_t    *cb_firstsnap;
+       char            *cb_firstsnap;
        /* previous snap in contiguous run */
-       zfs_handle_t    *cb_prevsnap;
+       char            *cb_prevsnap;
        int64_t         cb_snapused;
        char            *cb_snapspec;
 } destroy_cbdata_t;
@@ -1004,11 +1006,13 @@ destroy_print_cb(zfs_handle_t *zhp, void
 
        if (nvlist_exists(cb->cb_nvl, name)) {
                if (cb->cb_firstsnap == NULL)
-                       cb->cb_firstsnap = zfs_handle_dup(zhp);
+                       cb->cb_firstsnap = strdup(name);
                if (cb->cb_prevsnap != NULL)
-                       zfs_close(cb->cb_prevsnap);
+                       free(cb->cb_prevsnap);
                /* this snap continues the current range */
-               cb->cb_prevsnap = zfs_handle_dup(zhp);
+               cb->cb_prevsnap = strdup(name);
+               if (cb->cb_firstsnap == NULL || cb->cb_prevsnap == NULL)
+                       nomem();
                if (cb->cb_verbose) {
                        if (cb->cb_parsable) {
                                (void) printf("destroy\t%s\n", name);
@@ -1023,12 +1027,12 @@ destroy_print_cb(zfs_handle_t *zhp, void
        } else if (cb->cb_firstsnap != NULL) {
                /* end of this range */
                uint64_t used = 0;
-               err = zfs_get_snapused_int(cb->cb_firstsnap,
+               err = lzc_snaprange_space(cb->cb_firstsnap,
                    cb->cb_prevsnap, &used);
                cb->cb_snapused += used;
-               zfs_close(cb->cb_firstsnap);
+               free(cb->cb_firstsnap);
                cb->cb_firstsnap = NULL;
-               zfs_close(cb->cb_prevsnap);
+               free(cb->cb_prevsnap);
                cb->cb_prevsnap = NULL;
        }
        zfs_close(zhp);
@@ -1045,13 +1049,13 @@ destroy_print_snapshots(zfs_handle_t *fs
        if (cb->cb_firstsnap != NULL) {
                uint64_t used = 0;
                if (err == 0) {
-                       err = zfs_get_snapused_int(cb->cb_firstsnap,
+                       err = lzc_snaprange_space(cb->cb_firstsnap,
                            cb->cb_prevsnap, &used);
                }
                cb->cb_snapused += used;
-               zfs_close(cb->cb_firstsnap);
+               free(cb->cb_firstsnap);
                cb->cb_firstsnap = NULL;
-               zfs_close(cb->cb_prevsnap);
+               free(cb->cb_prevsnap);
                cb->cb_prevsnap = NULL;
        }
        return (err);
@@ -1904,9 +1908,11 @@ upgrade_set_callback(zfs_handle_t *zhp, 
                        /*
                         * If they did "zfs upgrade -a", then we could
                         * be doing ioctls to different pools.  We need
-                        * to log this history once to each pool.
+                        * to log this history once to each pool, and bypass
+                        * the normal history logging that happens in main().
                         */
-                       verify(zpool_stage_history(g_zfs, history_str) == 0);
+                       (void) zpool_log_history(g_zfs, history_str);
+                       log_history = B_FALSE;
                }
                if (zfs_prop_set(zhp, "version", verstr) == 0)
                        cb->cb_numupgraded++;
@@ -3424,6 +3430,32 @@ zfs_do_set(int argc, char **argv)
        return (ret);
 }
 
+typedef struct snap_cbdata {
+       nvlist_t *sd_nvl;
+       boolean_t sd_recursive;
+       const char *sd_snapname;
+} snap_cbdata_t;
+
+static int
+zfs_snapshot_cb(zfs_handle_t *zhp, void *arg)
+{
+       snap_cbdata_t *sd = arg;
+       char *name;
+       int rv = 0;
+       int error;
+
+       error = asprintf(&name, "%s@%s", zfs_get_name(zhp), sd->sd_snapname);
+       if (error == -1)
+               nomem();
+       fnvlist_add_boolean(sd->sd_nvl, name);
+       free(name);
+
+       if (sd->sd_recursive)
+               rv = zfs_iter_filesystems(zhp, zfs_snapshot_cb, sd);
+       zfs_close(zhp);
+       return (rv);
+}
+
 /*
  * zfs snapshot [-r] [-o prop=value] ... <fs@snap>
  *
@@ -3433,13 +3465,16 @@ zfs_do_set(int argc, char **argv)
 static int
 zfs_do_snapshot(int argc, char **argv)
 {
-       boolean_t recursive = B_FALSE;
        int ret = 0;
        char c;
        nvlist_t *props;
+       snap_cbdata_t sd = { 0 };
+       boolean_t multiple_snaps = B_FALSE;
 
        if (nvlist_alloc(&props, NV_UNIQUE_NAME, 0) != 0)
                nomem();
+       if (nvlist_alloc(&sd.sd_nvl, NV_UNIQUE_NAME, 0) != 0)
+               nomem();
 
        /* check options */
        while ((c = getopt(argc, argv, "ro:")) != -1) {
@@ -3449,7 +3484,8 @@ zfs_do_snapshot(int argc, char **argv)
                                return (1);
                        break;
                case 'r':
-                       recursive = B_TRUE;
+                       sd.sd_recursive = B_TRUE;
+                       multiple_snaps = B_TRUE;
                        break;
                case '?':
                        (void) fprintf(stderr, gettext("invalid option '%c'\n"),
@@ -3466,18 +3502,35 @@ zfs_do_snapshot(int argc, char **argv)
                (void) fprintf(stderr, gettext("missing snapshot argument\n"));
                goto usage;
        }
-       if (argc > 1) {
-               (void) fprintf(stderr, gettext("too many arguments\n"));
-               goto usage;
+
+       if (argc > 1)
+               multiple_snaps = B_TRUE;
+       for (; argc > 0; argc--, argv++) {
+               char *atp;
+               zfs_handle_t *zhp;
+
+               atp = strchr(argv[0], '@');
+               if (atp == NULL)
+                       goto usage;
+               *atp = '\0';
+               sd.sd_snapname = atp + 1;
+               zhp = zfs_open(g_zfs, argv[0],
+                   ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME);
+               if (zhp == NULL)
+                       goto usage;
+               if (zfs_snapshot_cb(zhp, &sd) != 0)
+                       goto usage;
        }
 
-       ret = zfs_snapshot(g_zfs, argv[0], recursive, props);
+       ret = zfs_snapshot_nvl(g_zfs, sd.sd_nvl, props);
+       nvlist_free(sd.sd_nvl);
        nvlist_free(props);
-       if (ret && recursive)
+       if (ret != 0 && multiple_snaps)
                (void) fprintf(stderr, gettext("no snapshots were created\n"));
        return (ret != 0);
 
 usage:
+       nvlist_free(sd.sd_nvl);
        nvlist_free(props);
        usage(B_FALSE);
        return (-1);
@@ -6479,8 +6532,7 @@ main(int argc, char **argv)
                return (1);
        }
 
-       zpool_set_history_str("zfs", argc, argv, history_str);
-       verify(zpool_stage_history(g_zfs, history_str) == 0);
+       zfs_save_arguments(argc, argv, history_str, sizeof (history_str));
 
        libzfs_print_on_error(g_zfs, B_TRUE);
 
@@ -6549,6 +6601,9 @@ main(int argc, char **argv)
 
        (void) fclose(mnttab_file);
 
+       if (ret == 0 && log_history)
+               (void) zpool_log_history(g_zfs, history_str);
+
        libzfs_fini(g_zfs);
 
        /*

Modified: vendor/illumos/dist/cmd/zhack/zhack.c
==============================================================================
--- vendor/illumos/dist/cmd/zhack/zhack.c       Mon Jul  2 07:39:55 2012        
(r237975)
+++ vendor/illumos/dist/cmd/zhack/zhack.c       Mon Jul  2 07:50:15 2012        
(r237976)
@@ -279,6 +279,9 @@ feature_enable_sync(void *arg1, void *ar
        zfeature_info_t *feature = arg2;
 
        spa_feature_enable(spa, feature, tx);
+       spa_history_log_internal(spa, "zhack enable feature", tx,
+           "name=%s can_readonly=%u",
+           feature->fi_guid, feature->fi_can_readonly);
 }
 
 static void
@@ -356,6 +359,8 @@ feature_incr_sync(void *arg1, void *arg2
        zfeature_info_t *feature = arg2;
 
        spa_feature_incr(spa, feature, tx);
+       spa_history_log_internal(spa, "zhack feature incr", tx,
+           "name=%s", feature->fi_guid);
 }
 
 static void
@@ -365,6 +370,8 @@ feature_decr_sync(void *arg1, void *arg2
        zfeature_info_t *feature = arg2;
 
        spa_feature_decr(spa, feature, tx);
+       spa_history_log_internal(spa, "zhack feature decr", tx,
+           "name=%s", feature->fi_guid);
 }
 
 static void

Modified: vendor/illumos/dist/cmd/zpool/zpool_main.c
==============================================================================
--- vendor/illumos/dist/cmd/zpool/zpool_main.c  Mon Jul  2 07:39:55 2012        
(r237975)
+++ vendor/illumos/dist/cmd/zpool/zpool_main.c  Mon Jul  2 07:50:15 2012        
(r237976)
@@ -185,9 +185,9 @@ static zpool_command_t command_table[] =
 
 #define        NCOMMAND        (sizeof (command_table) / sizeof 
(command_table[0]))
 
-zpool_command_t *current_command;
+static zpool_command_t *current_command;
 static char history_str[HIS_MAX_RECORD_LEN];
-
+static boolean_t log_history = B_TRUE;
 static uint_t timestamp_fmt = NODATE;
 
 static const char *
@@ -935,7 +935,10 @@ zpool_do_destroy(int argc, char **argv)
                return (1);
        }
 
-       ret = (zpool_destroy(zhp) != 0);
+       /* The history must be logged as part of the export */
+       log_history = B_FALSE;
+
+       ret = (zpool_destroy(zhp, history_str) != 0);
 
        zpool_close(zhp);
 
@@ -999,10 +1002,13 @@ zpool_do_export(int argc, char **argv)
                        continue;
                }
 
+               /* The history must be logged as part of the export */
+               log_history = B_FALSE;
+
                if (hardforce) {
-                       if (zpool_export_force(zhp) != 0)
+                       if (zpool_export_force(zhp, history_str) != 0)
                                ret = 1;
-               } else if (zpool_export(zhp, force) != 0) {
+               } else if (zpool_export(zhp, force, history_str) != 0) {
                        ret = 1;
                }
 
@@ -4269,6 +4275,14 @@ upgrade_cb(zpool_handle_t *zhp, void *ar
                                (void) printf(gettext("Successfully upgraded "
                                    "'%s'\n\n"), zpool_get_name(zhp));
                        }
+                       /*
+                        * If they did "zpool upgrade -a", then we could
+                        * be doing ioctls to different pools.  We need
+                        * to log this history once to each pool, and bypass
+                        * the normal history logging that happens in main().
+                        */
+                       (void) zpool_log_history(g_zfs, history_str);
+                       log_history = B_FALSE;
                }
        } else if (cbp->cb_newer && !SPA_VERSION_IS_SUPPORTED(version)) {
                assert(!cbp->cb_all);
@@ -4491,8 +4505,8 @@ zpool_do_upgrade(int argc, char **argv)
 
 typedef struct hist_cbdata {
        boolean_t first;
-       int longfmt;
-       int internal;
+       boolean_t longfmt;
+       boolean_t internal;
 } hist_cbdata_t;
 
 /*
@@ -4504,21 +4518,8 @@ get_history_one(zpool_handle_t *zhp, voi
        nvlist_t *nvhis;
        nvlist_t **records;
        uint_t numrecords;
-       char *cmdstr;
-       char *pathstr;
-       uint64_t dst_time;
-       time_t tsec;
-       struct tm t;
-       char tbuf[30];
        int ret, i;
-       uint64_t who;
-       struct passwd *pwd;
-       char *hostname;
-       char *zonename;
-       char internalstr[MAXPATHLEN];
        hist_cbdata_t *cb = (hist_cbdata_t *)data;
-       uint64_t txg;
-       uint64_t ievent;
 
        cb->first = B_FALSE;
 
@@ -4530,64 +4531,94 @@ get_history_one(zpool_handle_t *zhp, voi
        verify(nvlist_lookup_nvlist_array(nvhis, ZPOOL_HIST_RECORD,
            &records, &numrecords) == 0);
        for (i = 0; i < numrecords; i++) {
-               if (nvlist_lookup_uint64(records[i], ZPOOL_HIST_TIME,
-                   &dst_time) != 0)
-                       continue;
+               nvlist_t *rec = records[i];
+               char tbuf[30] = "";
 
-               /* is it an internal event or a standard event? */
-               if (nvlist_lookup_string(records[i], ZPOOL_HIST_CMD,
-                   &cmdstr) != 0) {
-                       if (cb->internal == 0)
+               if (nvlist_exists(rec, ZPOOL_HIST_TIME)) {
+                       time_t tsec;
+                       struct tm t;
+
+                       tsec = fnvlist_lookup_uint64(records[i],
+                           ZPOOL_HIST_TIME);
+                       (void) localtime_r(&tsec, &t);
+                       (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t);
+               }
+
+               if (nvlist_exists(rec, ZPOOL_HIST_CMD)) {
+                       (void) printf("%s %s", tbuf,
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_CMD));
+               } else if (nvlist_exists(rec, ZPOOL_HIST_INT_EVENT)) {
+                       int ievent =
+                           fnvlist_lookup_uint64(rec, ZPOOL_HIST_INT_EVENT);
+                       if (!cb->internal)
                                continue;
-
-                       if (nvlist_lookup_uint64(records[i],
-                           ZPOOL_HIST_INT_EVENT, &ievent) != 0)
+                       if (ievent >= ZFS_NUM_LEGACY_HISTORY_EVENTS) {
+                               (void) printf("%s unrecognized record:\n",
+                                   tbuf);
+                               dump_nvlist(rec, 4);
+                               continue;
+                       }
+                       (void) printf("%s [internal %s txg:%lld] %s", tbuf,
+                           zfs_history_event_names[ievent],
+                           fnvlist_lookup_uint64(rec, ZPOOL_HIST_TXG),
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_INT_STR));
+               } else if (nvlist_exists(rec, ZPOOL_HIST_INT_NAME)) {
+                       if (!cb->internal)
                                continue;
-                       verify(nvlist_lookup_uint64(records[i],
-                           ZPOOL_HIST_TXG, &txg) == 0);
-                       verify(nvlist_lookup_string(records[i],
-                           ZPOOL_HIST_INT_STR, &pathstr) == 0);
-                       if (ievent >= LOG_END)
+                       (void) printf("%s [txg:%lld] %s", tbuf,
+                           fnvlist_lookup_uint64(rec, ZPOOL_HIST_TXG),
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_INT_NAME));
+                       if (nvlist_exists(rec, ZPOOL_HIST_DSNAME)) {
+                               (void) printf(" %s (%llu)",
+                                   fnvlist_lookup_string(rec,
+                                   ZPOOL_HIST_DSNAME),
+                                   fnvlist_lookup_uint64(rec,
+                                   ZPOOL_HIST_DSID));
+                       }
+                       (void) printf(" %s", fnvlist_lookup_string(rec,
+                           ZPOOL_HIST_INT_STR));
+               } else if (nvlist_exists(rec, ZPOOL_HIST_IOCTL)) {
+                       if (!cb->internal)
                                continue;
-                       (void) snprintf(internalstr,
-                           sizeof (internalstr),
-                           "[internal %s txg:%lld] %s",
-                           zfs_history_event_names[ievent], txg,
-                           pathstr);
-                       cmdstr = internalstr;
-               }
-               tsec = dst_time;
-               (void) localtime_r(&tsec, &t);
-               (void) strftime(tbuf, sizeof (tbuf), "%F.%T", &t);
-               (void) printf("%s %s", tbuf, cmdstr);
+                       (void) printf("%s ioctl %s\n", tbuf,
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_IOCTL));
+                       if (nvlist_exists(rec, ZPOOL_HIST_INPUT_NVL)) {
+                               (void) printf("    input:\n");
+                               dump_nvlist(fnvlist_lookup_nvlist(rec,
+                                   ZPOOL_HIST_INPUT_NVL), 8);
+                       }
+                       if (nvlist_exists(rec, ZPOOL_HIST_OUTPUT_NVL)) {
+                               (void) printf("    output:\n");
+                               dump_nvlist(fnvlist_lookup_nvlist(rec,
+                                   ZPOOL_HIST_OUTPUT_NVL), 8);
+                       }
+               } else {
+                       if (!cb->internal)
+                               continue;
+                       (void) printf("%s unrecognized record:\n", tbuf);
+                       dump_nvlist(rec, 4);
+               }
 
                if (!cb->longfmt) {
                        (void) printf("\n");
                        continue;
                }
                (void) printf(" [");
-               if (nvlist_lookup_uint64(records[i],
-                   ZPOOL_HIST_WHO, &who) == 0) {
-                       pwd = getpwuid((uid_t)who);
-                       if (pwd)
-                               (void) printf("user %s on",
-                                   pwd->pw_name);
-                       else
-                               (void) printf("user %d on",
-                                   (int)who);
-               } else {
-                       (void) printf(gettext("no info]\n"));
-                       continue;
+               if (nvlist_exists(rec, ZPOOL_HIST_WHO)) {
+                       uid_t who = fnvlist_lookup_uint64(rec, ZPOOL_HIST_WHO);
+                       struct passwd *pwd = getpwuid(who);
+                       (void) printf("user %d ", (int)who);
+                       if (pwd != NULL)
+                               (void) printf("(%s) ", pwd->pw_name);
+               }
+               if (nvlist_exists(rec, ZPOOL_HIST_HOST)) {
+                       (void) printf("on %s",
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_HOST));
+               }
+               if (nvlist_exists(rec, ZPOOL_HIST_ZONE)) {
+                       (void) printf(":%s",
+                           fnvlist_lookup_string(rec, ZPOOL_HIST_ZONE));
                }
-               if (nvlist_lookup_string(records[i],
-                   ZPOOL_HIST_HOST, &hostname) == 0) {
-                       (void) printf(" %s", hostname);
-               }
-               if (nvlist_lookup_string(records[i],
-                   ZPOOL_HIST_ZONE, &zonename) == 0) {
-                       (void) printf(":%s", zonename);
-               }
-
                (void) printf("]");
                (void) printf("\n");
        }
@@ -4602,8 +4633,6 @@ get_history_one(zpool_handle_t *zhp, voi
  *
  * Displays the history of commands that modified pools.
  */
-
-
 int
 zpool_do_history(int argc, char **argv)
 {
@@ -4616,10 +4645,10 @@ zpool_do_history(int argc, char **argv)
        while ((c = getopt(argc, argv, "li")) != -1) {
                switch (c) {
                case 'l':
-                       cbdata.longfmt = 1;
+                       cbdata.longfmt = B_TRUE;
                        break;
                case 'i':
-                       cbdata.internal = 1;
+                       cbdata.internal = B_TRUE;
                        break;
                case '?':
                        (void) fprintf(stderr, gettext("invalid option '%c'\n"),
@@ -4844,8 +4873,7 @@ main(int argc, char **argv)
        if (strcmp(cmdname, "-?") == 0)
                usage(B_TRUE);
 
-       zpool_set_history_str("zpool", argc, argv, history_str);
-       verify(zpool_stage_history(g_zfs, history_str) == 0);
+       zfs_save_arguments(argc, argv, history_str, sizeof (history_str));
 
        /*
         * Run the appropriate command.
@@ -4872,6 +4900,9 @@ main(int argc, char **argv)
                usage(B_FALSE);
        }
 
+       if (ret == 0 && log_history)
+               (void) zpool_log_history(g_zfs, history_str);
+
        libzfs_fini(g_zfs);
 
        /*

Modified: vendor/illumos/dist/cmd/ztest/ztest.c
==============================================================================
--- vendor/illumos/dist/cmd/ztest/ztest.c       Mon Jul  2 07:39:55 2012        
(r237975)
+++ vendor/illumos/dist/cmd/ztest/ztest.c       Mon Jul  2 07:50:15 2012        
(r237976)
@@ -2252,7 +2252,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
         */
        nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1);
        VERIFY3U(ENOENT, ==,
-           spa_create("ztest_bad_file", nvroot, NULL, NULL, NULL));
+           spa_create("ztest_bad_file", nvroot, NULL, NULL));
        nvlist_free(nvroot);
 
        /*
@@ -2260,7 +2260,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
         */
        nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 2, 1);
        VERIFY3U(ENOENT, ==,
-           spa_create("ztest_bad_mirror", nvroot, NULL, NULL, NULL));
+           spa_create("ztest_bad_mirror", nvroot, NULL, NULL));
        nvlist_free(nvroot);
 
        /*
@@ -2269,7 +2269,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd,
         */
        (void) rw_rdlock(&ztest_name_lock);
        nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1);
-       VERIFY3U(EEXIST, ==, spa_create(zo->zo_pool, nvroot, NULL, NULL, NULL));
+       VERIFY3U(EEXIST, ==, spa_create(zo->zo_pool, nvroot, NULL, NULL));
        nvlist_free(nvroot);
        VERIFY3U(0, ==, spa_open(zo->zo_pool, &spa, FTAG));
        VERIFY3U(EBUSY, ==, spa_destroy(zo->zo_pool));
@@ -3056,8 +3056,7 @@ ztest_snapshot_create(char *osname, uint
        (void) snprintf(snapname, MAXNAMELEN, "%s@%llu", osname,
            (u_longlong_t)id);
 
-       error = dmu_objset_snapshot(osname, strchr(snapname, '@') + 1,
-           NULL, NULL, B_FALSE, B_FALSE, -1);
+       error = dmu_objset_snapshot_one(osname, strchr(snapname, '@') + 1);
        if (error == ENOSPC) {
                ztest_record_enospc(FTAG);
                return (B_FALSE);
@@ -3257,8 +3256,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_
        (void) snprintf(clone2name, MAXNAMELEN, "%s/c2_%llu", osname, id);
        (void) snprintf(snap3name, MAXNAMELEN, "%s@s3_%llu", clone1name, id);
 
-       error = dmu_objset_snapshot(osname, strchr(snap1name, '@')+1,
-           NULL, NULL, B_FALSE, B_FALSE, -1);
+       error = dmu_objset_snapshot_one(osname, strchr(snap1name, '@') + 1);
        if (error && error != EEXIST) {
                if (error == ENOSPC) {
                        ztest_record_enospc(FTAG);
@@ -3281,8 +3279,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_
                fatal(0, "dmu_objset_create(%s) = %d", clone1name, error);
        }
 
-       error = dmu_objset_snapshot(clone1name, strchr(snap2name, '@')+1,
-           NULL, NULL, B_FALSE, B_FALSE, -1);
+       error = dmu_objset_snapshot_one(clone1name, strchr(snap2name, '@') + 1);
        if (error && error != EEXIST) {
                if (error == ENOSPC) {
                        ztest_record_enospc(FTAG);
@@ -3291,8 +3288,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_
                fatal(0, "dmu_open_snapshot(%s) = %d", snap2name, error);
        }
 
-       error = dmu_objset_snapshot(clone1name, strchr(snap3name, '@')+1,
-           NULL, NULL, B_FALSE, B_FALSE, -1);
+       error = dmu_objset_snapshot_one(clone1name, strchr(snap3name, '@') + 1);
        if (error && error != EEXIST) {
                if (error == ENOSPC) {
                        ztest_record_enospc(FTAG);
@@ -4480,8 +4476,7 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, 
         * Create snapshot, clone it, mark snap for deferred destroy,
         * destroy clone, verify snap was also destroyed.
         */
-       error = dmu_objset_snapshot(osname, snapname, NULL, NULL, FALSE,
-           FALSE, -1);
+       error = dmu_objset_snapshot_one(osname, snapname);
        if (error) {
                if (error == ENOSPC) {
                        ztest_record_enospc("dmu_objset_snapshot");
@@ -4523,8 +4518,7 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, 
         * destroy a held snapshot, mark for deferred destroy,
         * release hold, verify snapshot was destroyed.
         */
-       error = dmu_objset_snapshot(osname, snapname, NULL, NULL, FALSE,
-           FALSE, -1);
+       error = dmu_objset_snapshot_one(osname, snapname);
        if (error) {
                if (error == ENOSPC) {
                        ztest_record_enospc("dmu_objset_snapshot");
@@ -5612,8 +5606,7 @@ ztest_init(ztest_shared_t *zs)
                    spa_feature_table[i].fi_uname);
                VERIFY3U(0, ==, nvlist_add_uint64(props, buf, 0));
        }
-       VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props,
-           NULL, NULL));
+       VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, NULL));
        nvlist_free(nvroot);
 
        VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG));

Modified: vendor/illumos/dist/common/zfs/zfs_comutil.c
==============================================================================
--- vendor/illumos/dist/common/zfs/zfs_comutil.c        Mon Jul  2 07:39:55 
2012        (r237975)
+++ vendor/illumos/dist/common/zfs/zfs_comutil.c        Mon Jul  2 07:50:15 
2012        (r237976)
@@ -20,6 +20,7 @@
  */
 /*
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
 /*
@@ -157,7 +158,11 @@ zfs_spa_version_map(int zpl_version)
        return (version);
 }
 
-const char *zfs_history_event_names[LOG_END] = {
+/*
+ * This is the table of legacy internal event names; it should not be modified.
+ * The internal events are now stored in the history log as strings.
+ */
+const char *zfs_history_event_names[ZFS_NUM_LEGACY_HISTORY_EVENTS] = {
        "invalid event",
        "pool create",
        "vdev add",

Modified: vendor/illumos/dist/common/zfs/zfs_comutil.h
==============================================================================
--- vendor/illumos/dist/common/zfs/zfs_comutil.h        Mon Jul  2 07:39:55 
2012        (r237975)
+++ vendor/illumos/dist/common/zfs/zfs_comutil.h        Mon Jul  2 07:50:15 
2012        (r237976)
@@ -20,6 +20,7 @@
  */
 /*
  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
 #ifndef        _ZFS_COMUTIL_H
@@ -37,7 +38,8 @@ extern void zpool_get_rewind_policy(nvli
 
 extern int zfs_zpl_version_map(int spa_version);
 extern int zfs_spa_version_map(int zpl_version);
-extern const char *zfs_history_event_names[LOG_END];
+#define        ZFS_NUM_LEGACY_HISTORY_EVENTS 41
+extern const char *zfs_history_event_names[ZFS_NUM_LEGACY_HISTORY_EVENTS];
 
 #ifdef __cplusplus
 }

Modified: vendor/illumos/dist/common/zfs/zprop_common.c
==============================================================================
--- vendor/illumos/dist/common/zfs/zprop_common.c       Mon Jul  2 07:39:55 
2012        (r237975)
+++ vendor/illumos/dist/common/zfs/zprop_common.c       Mon Jul  2 07:50:15 
2012        (r237976)
@@ -22,6 +22,9 @@
  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
+/*
+ * Copyright (c) 2012 by Delphix. All rights reserved.
+ */
 
 /*
  * Common routines used by zfs and zpool property management.
@@ -129,7 +132,8 @@ zprop_register_hidden(int prop, const ch
     zprop_attr_t attr, int objset_types, const char *colname)
 {
        zprop_register_impl(prop, name, type, 0, NULL, attr,
-           objset_types, NULL, colname, B_FALSE, B_FALSE, NULL);
+           objset_types, NULL, colname,
+           type == PROP_TYPE_NUMBER, B_FALSE, NULL);
 }
 
 

Modified: vendor/illumos/dist/lib/libzfs/common/libzfs.h
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs.h      Mon Jul  2 07:39:55 
2012        (r237975)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs.h      Mon Jul  2 07:50:15 
2012        (r237976)
@@ -54,7 +54,8 @@ extern "C" {
 /*
  * libzfs errors
  */
-enum {
+typedef enum zfs_error {
+       EZFS_SUCCESS = 0,       /* no error -- success */
        EZFS_NOMEM = 2000,      /* out of memory */
        EZFS_BADPROP,           /* invalid property value */
        EZFS_PROPREADONLY,      /* cannot set readonly property */
@@ -126,7 +127,7 @@ enum {
        EZFS_DIFFDATA,          /* bad zfs diff data */
        EZFS_POOLREADONLY,      /* pool is in read-only mode */
        EZFS_UNKNOWN
-};
+} zfs_error_t;
 
 /*
  * The following data structures are all part
@@ -182,6 +183,9 @@ extern libzfs_handle_t *zfs_get_handle(z
 
 extern void libzfs_print_on_error(libzfs_handle_t *, boolean_t);
 
+extern void zfs_save_arguments(int argc, char **, char *, int);
+extern int zpool_log_history(libzfs_handle_t *, const char *);
+
 extern int libzfs_errno(libzfs_handle_t *);
 extern const char *libzfs_error_action(libzfs_handle_t *);
 extern const char *libzfs_error_description(libzfs_handle_t *);
@@ -216,7 +220,7 @@ extern int zpool_iter(libzfs_handle_t *,
  */
 extern int zpool_create(libzfs_handle_t *, const char *, nvlist_t *,
     nvlist_t *, nvlist_t *);
-extern int zpool_destroy(zpool_handle_t *);
+extern int zpool_destroy(zpool_handle_t *, const char *);
 extern int zpool_add(zpool_handle_t *, nvlist_t *);
 
 typedef struct splitflags {
@@ -338,8 +342,8 @@ extern int zpool_get_errlog(zpool_handle
 /*
  * Import and export functions
  */
-extern int zpool_export(zpool_handle_t *, boolean_t);
-extern int zpool_export_force(zpool_handle_t *);
+extern int zpool_export(zpool_handle_t *, boolean_t, const char *);
+extern int zpool_export_force(zpool_handle_t *, const char *);
 extern int zpool_import(libzfs_handle_t *, nvlist_t *, const char *,
     char *altroot);
 extern int zpool_import_props(libzfs_handle_t *, nvlist_t *, const char *,
@@ -373,7 +377,7 @@ extern nvlist_t *zpool_find_import_cache
  */
 struct zfs_cmd;
 
-extern const char *zfs_history_event_names[LOG_END];
+extern const char *zfs_history_event_names[];
 
 extern char *zpool_vdev_name(libzfs_handle_t *, zpool_handle_t *, nvlist_t *,
     boolean_t verbose);
@@ -381,9 +385,6 @@ extern int zpool_upgrade(zpool_handle_t 
 extern int zpool_get_history(zpool_handle_t *, nvlist_t **);
 extern int zpool_history_unpack(char *, uint64_t, uint64_t *,
     nvlist_t ***, uint_t *);
-extern void zpool_set_history_str(const char *subcommand, int argc,
-    char **argv, char *history_str);
-extern int zpool_stage_history(libzfs_handle_t *, const char *);
 extern void zpool_obj_to_path(zpool_handle_t *, uint64_t, uint64_t, char *,
     size_t len);
 extern int zfs_ioctl(libzfs_handle_t *, int, struct zfs_cmd *);
@@ -436,8 +437,6 @@ extern int zfs_prop_get_written(zfs_hand
     char *propbuf, int proplen, boolean_t literal);
 extern int zfs_prop_get_feature(zfs_handle_t *zhp, const char *propname,
     char *buf, size_t len);
-extern int zfs_get_snapused_int(zfs_handle_t *firstsnap, zfs_handle_t 
*lastsnap,
-    uint64_t *usedp);
 extern uint64_t zfs_prop_get_int(zfs_handle_t *, zfs_prop_t);
 extern int zfs_prop_inherit(zfs_handle_t *, const char *, boolean_t);
 extern const char *zfs_prop_values(zfs_prop_t);
@@ -553,6 +552,8 @@ extern int zfs_destroy_snaps(zfs_handle_
 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_snapshot_nvl(libzfs_handle_t *hdl, nvlist_t *snaps,
+    nvlist_t *props);
 extern int zfs_rollback(zfs_handle_t *, zfs_handle_t *, boolean_t);
 extern int zfs_rename(zfs_handle_t *, const char *, boolean_t, boolean_t);
 

Modified: vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c
==============================================================================
--- vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c      Mon Jul  2 
07:39:55 2012        (r237975)
+++ vendor/illumos/dist/lib/libzfs/common/libzfs_dataset.c      Mon Jul  2 
07:50:15 2012        (r237976)
@@ -1407,8 +1407,7 @@ zfs_prop_set(zfs_handle_t *zhp, const ch
        libzfs_handle_t *hdl = zhp->zfs_hdl;
        nvlist_t *nvl = NULL, *realprops;
        zfs_prop_t prop;
-       boolean_t do_prefix;
-       uint64_t idx;
+       boolean_t do_prefix = B_TRUE;
        int added_resv;
 
        (void) snprintf(errbuf, sizeof (errbuf),
@@ -1447,12 +1446,17 @@ zfs_prop_set(zfs_handle_t *zhp, const ch
        }
 
        /*
-        * If the dataset's canmount property is being set to noauto,
-        * then we want to prevent unmounting & remounting it.
-        */
-       do_prefix = !((prop == ZFS_PROP_CANMOUNT) &&
-           (zprop_string_to_index(prop, propval, &idx,
-           ZFS_TYPE_DATASET) == 0) && (idx == ZFS_CANMOUNT_NOAUTO));
+        * We don't want to unmount & remount the dataset when changing
+        * its canmount property to 'on' or 'noauto'.  We only use
+        * the changelist logic to unmount when setting canmount=off.
+        */
+       if (prop == ZFS_PROP_CANMOUNT) {
+               uint64_t idx;
+               int err = zprop_string_to_index(prop, propval, &idx,
+                   ZFS_TYPE_DATASET);
+               if (err == 0 && idx != ZFS_CANMOUNT_OFF)
+                       do_prefix = B_FALSE;
+       }
 
        if (do_prefix && (ret = changelist_prefix(cl)) != 0)
                goto error;
@@ -2641,25 +2645,6 @@ zfs_prop_get_written(zfs_handle_t *zhp, 
        return (0);
 }
 
-int
-zfs_get_snapused_int(zfs_handle_t *firstsnap, zfs_handle_t *lastsnap,
-    uint64_t *usedp)
-{
-       int err;
-       zfs_cmd_t zc = { 0 };
-
-       (void) strlcpy(zc.zc_name, lastsnap->zfs_name, sizeof (zc.zc_name));
-       (void) strlcpy(zc.zc_value, firstsnap->zfs_name, sizeof (zc.zc_value));
-
-       err = ioctl(lastsnap->zfs_hdl->libzfs_fd, ZFS_IOC_SPACE_SNAPS, &zc);
-       if (err)
-               return (err);
-
-       *usedp = zc.zc_cookie;
-
-       return (0);
-}
-
 /*
  * Returns the name of the given zfs handle.
  */
@@ -2860,7 +2845,6 @@ create_parents(libzfs_handle_t *hdl, cha
         */
        for (cp = target + prefixlen + 1;
            cp = strchr(cp, '/'); *cp = '/', cp++) {
-               char *logstr;
 
                *cp = '\0';
 
@@ -2871,16 +2855,12 @@ create_parents(libzfs_handle_t *hdl, cha
                        continue;
                }
 
-               logstr = hdl->libzfs_log_str;
-               hdl->libzfs_log_str = NULL;
                if (zfs_create(hdl, target, ZFS_TYPE_FILESYSTEM,
                    NULL) != 0) {
-                       hdl->libzfs_log_str = logstr;
                        opname = dgettext(TEXT_DOMAIN, "create");
                        goto ancestorerr;
                }
 
-               hdl->libzfs_log_str = logstr;
                h = zfs_open(hdl, target, ZFS_TYPE_FILESYSTEM);
                if (h == NULL) {
                        opname = dgettext(TEXT_DOMAIN, "open");
@@ -2938,12 +2918,12 @@ int
 zfs_create(libzfs_handle_t *hdl, const char *path, zfs_type_t type,
     nvlist_t *props)
 {
-       zfs_cmd_t zc = { 0 };
        int ret;
        uint64_t size = 0;
        uint64_t blocksize = zfs_prop_default_numeric(ZFS_PROP_VOLBLOCKSIZE);
        char errbuf[1024];
        uint64_t zoned;
+       dmu_objset_type_t ost;
 
        (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
            "cannot create '%s'"), path);
@@ -2963,17 +2943,16 @@ zfs_create(libzfs_handle_t *hdl, const c
         * will return ENOENT, not EEXIST.  To prevent this from happening, we
         * first try to see if the dataset exists.
         */
-       (void) strlcpy(zc.zc_name, path, sizeof (zc.zc_name));
-       if (zfs_dataset_exists(hdl, zc.zc_name, ZFS_TYPE_DATASET)) {
+       if (zfs_dataset_exists(hdl, path, ZFS_TYPE_DATASET)) {
                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
                    "dataset already exists"));
                return (zfs_error(hdl, EZFS_EXISTS, errbuf));
        }
 
        if (type == ZFS_TYPE_VOLUME)
-               zc.zc_objset_type = DMU_OST_ZVOL;
+               ost = DMU_OST_ZVOL;
        else
-               zc.zc_objset_type = DMU_OST_ZFS;
+               ost = DMU_OST_ZFS;
 
        if (props && (props = zfs_valid_proplist(hdl, type, props,
            zoned, NULL, errbuf)) == 0)
@@ -3025,14 +3004,9 @@ zfs_create(libzfs_handle_t *hdl, const c
                }
        }
 
-       if (props && zcmd_write_src_nvlist(hdl, &zc, props) != 0)
-               return (-1);
-       nvlist_free(props);
-

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to