Illumos #1862 incremental zfs receive fails for sparse file > 8PB
[zfs.git] / module / zcommon / zfs_prop.c
index 9d65e35..0a0c25b 100644 (file)
@@ -186,6 +186,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,
@@ -226,6 +234,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 +255,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 +264,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 +294,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 +341,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 +476,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).
  */