Introduce zpool_get_prop_literal interface
[zfs.git] / module / zcommon / zfs_prop.c
index 9d65e35..b27e4f3 100644 (file)
@@ -96,6 +96,7 @@ zfs_prop_init(void)
                { "gzip-8",     ZIO_COMPRESS_GZIP_8 },
                { "gzip-9",     ZIO_COMPRESS_GZIP_9 },
                { "zle",        ZIO_COMPRESS_ZLE },
+               { "lz4",        ZIO_COMPRESS_LZ4 },
                { NULL }
        };
 
@@ -105,6 +106,12 @@ zfs_prop_init(void)
                { NULL }
        };
 
+       static zprop_index_t snapdev_table[] = {
+               { "hidden",     ZFS_SNAPDEV_HIDDEN },
+               { "visible",    ZFS_SNAPDEV_VISIBLE },
+               { NULL }
+       };
+
        static zprop_index_t acl_inherit_table[] = {
                { "discard",    ZFS_ACL_DISCARD },
                { "noallow",    ZFS_ACL_NOALLOW },
@@ -186,6 +193,14 @@ zfs_prop_init(void)
                { NULL }
        };
 
+       static zprop_index_t xattr_table[] = {
+               { "off",        ZFS_XATTR_OFF },
+               { "on",         ZFS_XATTR_DIR },
+               { "sa",         ZFS_XATTR_SA },
+               { "dir",        ZFS_XATTR_DIR },
+               { NULL }
+       };
+
        /* inherit index properties */
        zprop_register_index(ZFS_PROP_SYNC, "sync", ZFS_SYNC_STANDARD,
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
@@ -203,11 +218,14 @@ zfs_prop_init(void)
        zprop_register_index(ZFS_PROP_COMPRESSION, "compression",
            ZIO_COMPRESS_DEFAULT, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
-           "on | off | lzjb | gzip | gzip-[1-9] | zle", "COMPRESS",
+           "on | off | lzjb | gzip | gzip-[1-9] | zle | lz4", "COMPRESS",
            compress_table);
        zprop_register_index(ZFS_PROP_SNAPDIR, "snapdir", ZFS_SNAPDIR_HIDDEN,
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM,
            "hidden | visible", "SNAPDIR", snapdir_table);
+       zprop_register_index(ZFS_PROP_SNAPDEV, "snapdev", ZFS_SNAPDEV_HIDDEN,
+           PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
+           "hidden | visible", "SNAPDEV", snapdev_table);
        zprop_register_index(ZFS_PROP_ACLINHERIT, "aclinherit",
            ZFS_ACL_RESTRICTED, PROP_INHERIT, ZFS_TYPE_FILESYSTEM,
            "discard | noallow | restricted | passthrough | passthrough-x",
@@ -226,6 +244,9 @@ zfs_prop_init(void)
        zprop_register_index(ZFS_PROP_LOGBIAS, "logbias", ZFS_LOGBIAS_LATENCY,
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
            "latency | throughput", "LOGBIAS", logbias_table);
+       zprop_register_index(ZFS_PROP_XATTR, "xattr", ZFS_XATTR_DIR,
+           PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT,
+           "on | off | dir | sa", "XATTR", xattr_table);
 
        /* inherit index (boolean) properties */
        zprop_register_index(ZFS_PROP_ATIME, "atime", 1, PROP_INHERIT,
@@ -244,12 +265,8 @@ zfs_prop_init(void)
            boolean_table);
        zprop_register_index(ZFS_PROP_ZONED, "zoned", 0, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM, "on | off", "ZONED", boolean_table);
-       zprop_register_index(ZFS_PROP_XATTR, "xattr", 1, PROP_INHERIT,
-           ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "XATTR",
-           boolean_table);
        zprop_register_index(ZFS_PROP_VSCAN, "vscan", 0, PROP_INHERIT,
-           ZFS_TYPE_FILESYSTEM, "on | off", "VSCAN",
-           boolean_table);
+           ZFS_TYPE_FILESYSTEM, "on | off", "VSCAN", boolean_table);
        zprop_register_index(ZFS_PROP_NBMAND, "nbmand", 0, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "NBMAND",
            boolean_table);
@@ -257,7 +274,7 @@ zfs_prop_init(void)
        /* default index properties */
        zprop_register_index(ZFS_PROP_VERSION, "version", 0, PROP_DEFAULT,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT,
-           "1 | 2 | 3 | 4 | current", "VERSION", version_table);
+           "1 | 2 | 3 | 4 | 5 | current", "VERSION", version_table);
        zprop_register_index(ZFS_PROP_CANMOUNT, "canmount", ZFS_CANMOUNT_ON,
            PROP_DEFAULT, ZFS_TYPE_FILESYSTEM, "on | off | noauto",
            "CANMOUNT", canmount_table);
@@ -287,6 +304,8 @@ zfs_prop_init(void)
        /* string properties */
        zprop_register_string(ZFS_PROP_ORIGIN, "origin", NULL, PROP_READONLY,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<snapshot>", "ORIGIN");
+       zprop_register_string(ZFS_PROP_CLONES, "clones", NULL, PROP_READONLY,
+           ZFS_TYPE_SNAPSHOT, "<dataset>[,...]", "CLONES");
        zprop_register_string(ZFS_PROP_MOUNTPOINT, "mountpoint", "/",
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM, "<path> | legacy | none",
            "MOUNTPOINT");
@@ -332,6 +351,8 @@ zfs_prop_init(void)
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "USEDREFRESERV");
        zprop_register_number(ZFS_PROP_USERREFS, "userrefs", 0, PROP_READONLY,
            ZFS_TYPE_SNAPSHOT, "<count>", "USERREFS");
+       zprop_register_number(ZFS_PROP_WRITTEN, "written", 0, PROP_READONLY,
+           ZFS_TYPE_DATASET, "<size>", "WRITTEN");
 
        /* default number properties */
        zprop_register_number(ZFS_PROP_QUOTA, "quota", 0, PROP_DEFAULT,
@@ -465,6 +486,18 @@ zfs_prop_userquota(const char *name)
 }
 
 /*
+ * Returns true if this is a valid written@ property.
+ * Note that after the @, any character is valid (eg, another @, for
+ * written@pool/fs@origin).
+ */
+boolean_t
+zfs_prop_written(const char *name)
+{
+       static const char *prefix = "written@";
+       return (strncmp(name, prefix, strlen(prefix)) == 0);
+}
+
+/*
  * Tables of index types, plus functions to convert between the user view
  * (strings) and internal representation (uint64_t).
  */