Rebase master to b121
[zfs.git] / lib / libzfs / libzfs_util.c
index 259f5fd..4da0fb4 100644 (file)
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -210,6 +210,14 @@ libzfs_error_description(libzfs_handle_t *hdl)
        case EZFS_ACTIVE_SPARE:
                return (dgettext(TEXT_DOMAIN, "pool has active shared spare "
                    "device"));
+       case EZFS_UNPLAYED_LOGS:
+               return (dgettext(TEXT_DOMAIN, "log device has unplayed intent "
+                   "logs"));
+       case EZFS_REFTAG_RELE:
+               return (dgettext(TEXT_DOMAIN, "no such tag on this dataset"));
+       case EZFS_REFTAG_HOLD:
+               return (dgettext(TEXT_DOMAIN, "tag already exists on this "
+                   "dataset"));
        case EZFS_UNKNOWN:
                return (dgettext(TEXT_DOMAIN, "unknown error"));
        default:
@@ -364,6 +372,11 @@ zfs_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...)
        case ENOTSUP:
                zfs_verror(hdl, EZFS_BADVERSION, fmt, ap);
                break;
+       case EAGAIN:
+               zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+                   "pool I/O is currently suspended"));
+               zfs_verror(hdl, EZFS_POOLUNAVAIL, fmt, ap);
+               break;
        default:
                zfs_error_aux(hdl, strerror(errno));
                zfs_verror(hdl, EZFS_UNKNOWN, fmt, ap);
@@ -437,6 +450,11 @@ zpool_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...)
        case EDQUOT:
                zfs_verror(hdl, EZFS_NOSPC, fmt, ap);
                return (-1);
+       case EAGAIN:
+               zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+                   "pool I/O is currently suspended"));
+               zfs_verror(hdl, EZFS_POOLUNAVAIL, fmt, ap);
+               break;
 
        default:
                zfs_error_aux(hdl, strerror(error));
@@ -575,6 +593,7 @@ libzfs_init(void)
 
        zfs_prop_init();
        zpool_prop_init();
+       libzfs_mnttab_init(hdl);
 
        return (hdl);
 }
@@ -592,6 +611,7 @@ libzfs_fini(libzfs_handle_t *hdl)
                (void) free(hdl->libzfs_log_str);
        zpool_free_handles(hdl);
        namespace_clear(hdl);
+       libzfs_mnttab_fini(hdl);
        free(hdl);
 }
 
@@ -1209,7 +1229,7 @@ addlist(libzfs_handle_t *hdl, char *propname, zprop_list_t **listp,
         * dataset property,
         */
        if (prop == ZPROP_INVAL && (type == ZFS_TYPE_POOL ||
-           !zfs_prop_user(propname))) {
+           (!zfs_prop_user(propname) && !zfs_prop_userquota(propname)))) {
                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
                    "invalid property '%s'"), propname);
                return (zfs_error(hdl, EZFS_BADPROP,