]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zcommon/zpool_prop.c
Introduce read/write kstats per dataset
[mirror_zfs.git] / module / zcommon / zpool_prop.c
index 30a64d51a812cd909c94dc8be6b2d4c2ec3a212f..2d577793753e8a06685d0a6f7a1c093727d4b8d6 100644 (file)
@@ -20,6 +20,8 @@
  */
 /*
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
+ * Copyright (c) 2012, 2018 by Delphix. All rights reserved.
  */
 
 #include <sys/zio.h>
@@ -30,9 +32,7 @@
 
 #include "zfs_prop.h"
 
-#if defined(_KERNEL)
-#include <sys/systm.h>
-#else
+#if !defined(_KERNEL)
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
@@ -69,33 +69,45 @@ zpool_prop_init(void)
            ZFS_TYPE_POOL, "<filesystem>", "BOOTFS");
        zprop_register_string(ZPOOL_PROP_CACHEFILE, "cachefile", NULL,
            PROP_DEFAULT, ZFS_TYPE_POOL, "<file> | none", "CACHEFILE");
+       zprop_register_string(ZPOOL_PROP_COMMENT, "comment", NULL,
+           PROP_DEFAULT, ZFS_TYPE_POOL, "<comment-string>", "COMMENT");
 
        /* readonly number properties */
        zprop_register_number(ZPOOL_PROP_SIZE, "size", 0, PROP_READONLY,
            ZFS_TYPE_POOL, "<size>", "SIZE");
        zprop_register_number(ZPOOL_PROP_FREE, "free", 0, PROP_READONLY,
            ZFS_TYPE_POOL, "<size>", "FREE");
+       zprop_register_number(ZPOOL_PROP_FREEING, "freeing", 0, PROP_READONLY,
+           ZFS_TYPE_POOL, "<size>", "FREEING");
+       zprop_register_number(ZPOOL_PROP_CHECKPOINT, "checkpoint", 0,
+           PROP_READONLY, ZFS_TYPE_POOL, "<size>", "CKPOINT");
+       zprop_register_number(ZPOOL_PROP_LEAKED, "leaked", 0, PROP_READONLY,
+           ZFS_TYPE_POOL, "<size>", "LEAKED");
        zprop_register_number(ZPOOL_PROP_ALLOCATED, "allocated", 0,
            PROP_READONLY, ZFS_TYPE_POOL, "<size>", "ALLOC");
+       zprop_register_number(ZPOOL_PROP_EXPANDSZ, "expandsize", 0,
+           PROP_READONLY, ZFS_TYPE_POOL, "<size>", "EXPANDSZ");
+       zprop_register_number(ZPOOL_PROP_FRAGMENTATION, "fragmentation", 0,
+           PROP_READONLY, ZFS_TYPE_POOL, "<percent>", "FRAG");
        zprop_register_number(ZPOOL_PROP_CAPACITY, "capacity", 0, PROP_READONLY,
            ZFS_TYPE_POOL, "<size>", "CAP");
        zprop_register_number(ZPOOL_PROP_GUID, "guid", 0, PROP_READONLY,
            ZFS_TYPE_POOL, "<guid>", "GUID");
+       zprop_register_number(ZPOOL_PROP_LOAD_GUID, "load_guid", 0,
+           PROP_READONLY, ZFS_TYPE_POOL, "<load_guid>", "LOAD_GUID");
        zprop_register_number(ZPOOL_PROP_HEALTH, "health", 0, PROP_READONLY,
            ZFS_TYPE_POOL, "<state>", "HEALTH");
        zprop_register_number(ZPOOL_PROP_DEDUPRATIO, "dedupratio", 0,
            PROP_READONLY, ZFS_TYPE_POOL, "<1.00x or higher if deduped>",
            "DEDUP");
 
-       /* readonly onetime number properties */
-       zprop_register_number(ZPOOL_PROP_ASHIFT, "ashift", 0, PROP_ONETIME,
-           ZFS_TYPE_POOL, "<ashift, 9-17, or 0=default>", "ASHIFT");
-
        /* default number properties */
        zprop_register_number(ZPOOL_PROP_VERSION, "version", SPA_VERSION,
            PROP_DEFAULT, ZFS_TYPE_POOL, "<version>", "VERSION");
        zprop_register_number(ZPOOL_PROP_DEDUPDITTO, "dedupditto", 0,
            PROP_DEFAULT, ZFS_TYPE_POOL, "<threshold (min 100)>", "DEDUPDITTO");
+       zprop_register_number(ZPOOL_PROP_ASHIFT, "ashift", 0, PROP_DEFAULT,
+           ZFS_TYPE_POOL, "<ashift, 9-16, or 0=default>", "ASHIFT");
 
        /* default index (boolean) properties */
        zprop_register_index(ZPOOL_PROP_DELEGATION, "delegation", 1,
@@ -110,6 +122,9 @@ zpool_prop_init(void)
            PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "EXPAND", boolean_table);
        zprop_register_index(ZPOOL_PROP_READONLY, "readonly", 0,
            PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "RDONLY", boolean_table);
+       zprop_register_index(ZPOOL_PROP_MULTIHOST, "multihost", 0,
+           PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "MULTIHOST",
+           boolean_table);
 
        /* default index properties */
        zprop_register_index(ZPOOL_PROP_FAILUREMODE, "failmode",
@@ -119,6 +134,12 @@ zpool_prop_init(void)
        /* hidden properties */
        zprop_register_hidden(ZPOOL_PROP_NAME, "name", PROP_TYPE_STRING,
            PROP_READONLY, ZFS_TYPE_POOL, "NAME");
+       zprop_register_hidden(ZPOOL_PROP_MAXBLOCKSIZE, "maxblocksize",
+           PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_POOL, "MAXBLOCKSIZE");
+       zprop_register_hidden(ZPOOL_PROP_TNAME, "tname", PROP_TYPE_STRING,
+           PROP_ONETIME, ZFS_TYPE_POOL, "TNAME");
+       zprop_register_hidden(ZPOOL_PROP_MAXDNODESIZE, "maxdnodesize",
+           PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_POOL, "MAXDNODESIZE");
 }
 
 /*
@@ -152,6 +173,12 @@ zpool_prop_readonly(zpool_prop_t prop)
        return (zpool_prop_table[prop].pd_attr == PROP_READONLY);
 }
 
+boolean_t
+zpool_prop_setonce(zpool_prop_t prop)
+{
+       return (zpool_prop_table[prop].pd_attr == PROP_ONETIME);
+}
+
 const char *
 zpool_prop_default_string(zpool_prop_t prop)
 {
@@ -164,6 +191,26 @@ zpool_prop_default_numeric(zpool_prop_t prop)
        return (zpool_prop_table[prop].pd_numdefault);
 }
 
+/*
+ * Returns true if this is a valid feature@ property.
+ */
+boolean_t
+zpool_prop_feature(const char *name)
+{
+       static const char *prefix = "feature@";
+       return (strncmp(name, prefix, strlen(prefix)) == 0);
+}
+
+/*
+ * Returns true if this is a valid unsupported@ property.
+ */
+boolean_t
+zpool_prop_unsupported(const char *name)
+{
+       static const char *prefix = "unsupported@";
+       return (strncmp(name, prefix, strlen(prefix)) == 0);
+}
+
 int
 zpool_prop_string_to_index(zpool_prop_t prop, const char *string,
     uint64_t *index)
@@ -205,7 +252,7 @@ zpool_prop_align_right(zpool_prop_t prop)
 }
 #endif
 
-#if defined(_KERNEL) && defined(HAVE_SPL)
+#if defined(_KERNEL)
 /* zpool property functions */
 EXPORT_SYMBOL(zpool_prop_init);
 EXPORT_SYMBOL(zpool_prop_get_type);
@@ -217,6 +264,8 @@ EXPORT_SYMBOL(zpool_prop_to_name);
 EXPORT_SYMBOL(zpool_prop_default_string);
 EXPORT_SYMBOL(zpool_prop_default_numeric);
 EXPORT_SYMBOL(zpool_prop_readonly);
+EXPORT_SYMBOL(zpool_prop_feature);
+EXPORT_SYMBOL(zpool_prop_unsupported);
 EXPORT_SYMBOL(zpool_prop_index_to_string);
 EXPORT_SYMBOL(zpool_prop_string_to_index);
 #endif