]> git.proxmox.com Git - mirror_zfs-debian.git/blobdiff - module/zcommon/zfs_prop.c
Imported Upstream version 0.6.5.3
[mirror_zfs-debian.git] / module / zcommon / zfs_prop.c
index b27e4f36f391afca364a3c0521fc4cb2a64b1376..aaebab444cfa409432f41117643ddc962415af5e 100644 (file)
@@ -20,7 +20,8 @@
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2011 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  */
 
 /* Portions Copyright 2010 Robert Milkowski */
@@ -112,6 +113,14 @@ zfs_prop_init(void)
                { NULL }
        };
 
+       static zprop_index_t acltype_table[] = {
+               { "off",        ZFS_ACLTYPE_OFF },
+               { "disabled",   ZFS_ACLTYPE_OFF },
+               { "noacl",      ZFS_ACLTYPE_OFF },
+               { "posixacl",   ZFS_ACLTYPE_POSIXACL },
+               { NULL }
+       };
+
        static zprop_index_t acl_inherit_table[] = {
                { "discard",    ZFS_ACL_DISCARD },
                { "noallow",    ZFS_ACL_NOALLOW },
@@ -201,7 +210,18 @@ zfs_prop_init(void)
                { NULL }
        };
 
+       static zprop_index_t redundant_metadata_table[] = {
+               { "all",        ZFS_REDUNDANT_METADATA_ALL },
+               { "most",       ZFS_REDUNDANT_METADATA_MOST },
+               { NULL }
+       };
+
        /* inherit index properties */
+       zprop_register_index(ZFS_PROP_REDUNDANT_METADATA, "redundant_metadata",
+           ZFS_REDUNDANT_METADATA_ALL,
+           PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
+           "all | most", "REDUND_MD",
+           redundant_metadata_table);
        zprop_register_index(ZFS_PROP_SYNC, "sync", ZFS_SYNC_STANDARD,
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
            "standard | always | disabled", "SYNC",
@@ -226,6 +246,9 @@ zfs_prop_init(void)
        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_ACLTYPE, "acltype", ZFS_ACLTYPE_OFF,
+           PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT,
+           "noacl | posixacl", "ACLTYPE", acltype_table);
        zprop_register_index(ZFS_PROP_ACLINHERIT, "aclinherit",
            ZFS_ACL_RESTRICTED, PROP_INHERIT, ZFS_TYPE_FILESYSTEM,
            "discard | noallow | restricted | passthrough | passthrough-x",
@@ -251,6 +274,8 @@ zfs_prop_init(void)
        /* inherit index (boolean) properties */
        zprop_register_index(ZFS_PROP_ATIME, "atime", 1, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM, "on | off", "ATIME", boolean_table);
+       zprop_register_index(ZFS_PROP_RELATIME, "relatime", 0, PROP_INHERIT,
+           ZFS_TYPE_FILESYSTEM, "on | off", "RELATIME", boolean_table);
        zprop_register_index(ZFS_PROP_DEVICES, "devices", 1, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "DEVICES",
            boolean_table);
@@ -270,6 +295,8 @@ zfs_prop_init(void)
        zprop_register_index(ZFS_PROP_NBMAND, "nbmand", 0, PROP_INHERIT,
            ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "NBMAND",
            boolean_table);
+       zprop_register_index(ZFS_PROP_OVERLAY, "overlay", 0, PROP_INHERIT,
+           ZFS_TYPE_FILESYSTEM, "on | off", "OVERLAY", boolean_table);
 
        /* default index properties */
        zprop_register_index(ZFS_PROP_VERSION, "version", 0, PROP_DEFAULT,
@@ -313,13 +340,26 @@ zfs_prop_init(void)
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM, "on | off | share(1M) options",
            "SHARENFS");
        zprop_register_string(ZFS_PROP_TYPE, "type", NULL, PROP_READONLY,
-           ZFS_TYPE_DATASET, "filesystem | volume | snapshot", "TYPE");
+           ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK,
+           "filesystem | volume | snapshot | bookmark", "TYPE");
        zprop_register_string(ZFS_PROP_SHARESMB, "sharesmb", "off",
            PROP_INHERIT, ZFS_TYPE_FILESYSTEM,
            "on | off | sharemgr(1M) options", "SHARESMB");
        zprop_register_string(ZFS_PROP_MLSLABEL, "mlslabel",
            ZFS_MLSLABEL_DEFAULT, PROP_INHERIT, ZFS_TYPE_DATASET,
            "<sensitivity label>", "MLSLABEL");
+       zprop_register_string(ZFS_PROP_SELINUX_CONTEXT, "context",
+           "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "<selinux context>",
+           "CONTEXT");
+       zprop_register_string(ZFS_PROP_SELINUX_FSCONTEXT, "fscontext",
+           "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "<selinux fscontext>",
+           "FSCONTEXT");
+       zprop_register_string(ZFS_PROP_SELINUX_DEFCONTEXT, "defcontext",
+           "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "<selinux defcontext>",
+           "DEFCONTEXT");
+       zprop_register_string(ZFS_PROP_SELINUX_ROOTCONTEXT, "rootcontext",
+           "none", PROP_DEFAULT, ZFS_TYPE_DATASET, "<selinux rootcontext>",
+           "ROOTCONTEXT");
 
        /* readonly number properties */
        zprop_register_number(ZFS_PROP_USED, "used", 0, PROP_READONLY,
@@ -353,6 +393,10 @@ zfs_prop_init(void)
            ZFS_TYPE_SNAPSHOT, "<count>", "USERREFS");
        zprop_register_number(ZFS_PROP_WRITTEN, "written", 0, PROP_READONLY,
            ZFS_TYPE_DATASET, "<size>", "WRITTEN");
+       zprop_register_number(ZFS_PROP_LOGICALUSED, "logicalused", 0,
+           PROP_READONLY, ZFS_TYPE_DATASET, "<size>", "LUSED");
+       zprop_register_number(ZFS_PROP_LOGICALREFERENCED, "logicalreferenced",
+           0, PROP_READONLY, ZFS_TYPE_DATASET, "<size>", "LREFER");
 
        /* default number properties */
        zprop_register_number(ZFS_PROP_QUOTA, "quota", 0, PROP_DEFAULT,
@@ -361,32 +405,44 @@ zfs_prop_init(void)
            PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
            "<size> | none", "RESERV");
        zprop_register_number(ZFS_PROP_VOLSIZE, "volsize", 0, PROP_DEFAULT,
-           ZFS_TYPE_VOLUME, "<size>", "VOLSIZE");
+           ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, "<size>", "VOLSIZE");
        zprop_register_number(ZFS_PROP_REFQUOTA, "refquota", 0, PROP_DEFAULT,
            ZFS_TYPE_FILESYSTEM, "<size> | none", "REFQUOTA");
        zprop_register_number(ZFS_PROP_REFRESERVATION, "refreservation", 0,
            PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
            "<size> | none", "REFRESERV");
+       zprop_register_number(ZFS_PROP_FILESYSTEM_LIMIT, "filesystem_limit",
+           UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM,
+           "<count> | none", "FSLIMIT");
+       zprop_register_number(ZFS_PROP_SNAPSHOT_LIMIT, "snapshot_limit",
+           UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
+           "<count> | none", "SSLIMIT");
+       zprop_register_number(ZFS_PROP_FILESYSTEM_COUNT, "filesystem_count",
+           UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM,
+           "<count>", "FSCOUNT");
+       zprop_register_number(ZFS_PROP_SNAPSHOT_COUNT, "snapshot_count",
+           UINT64_MAX, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
+           "<count>", "SSCOUNT");
 
        /* inherit number properties */
        zprop_register_number(ZFS_PROP_RECORDSIZE, "recordsize",
-           SPA_MAXBLOCKSIZE, PROP_INHERIT,
-           ZFS_TYPE_FILESYSTEM, "512 to 128k, power of 2", "RECSIZE");
+           SPA_OLD_MAXBLOCKSIZE, PROP_INHERIT,
+           ZFS_TYPE_FILESYSTEM, "512 to 1M, power of 2", "RECSIZE");
 
        /* hidden properties */
        zprop_register_hidden(ZFS_PROP_CREATETXG, "createtxg", PROP_TYPE_NUMBER,
-           PROP_READONLY, ZFS_TYPE_DATASET, "CREATETXG");
+           PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "CREATETXG");
        zprop_register_hidden(ZFS_PROP_NUMCLONES, "numclones", PROP_TYPE_NUMBER,
            PROP_READONLY, ZFS_TYPE_SNAPSHOT, "NUMCLONES");
        zprop_register_hidden(ZFS_PROP_NAME, "name", PROP_TYPE_STRING,
-           PROP_READONLY, ZFS_TYPE_DATASET, "NAME");
+           PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "NAME");
        zprop_register_hidden(ZFS_PROP_ISCSIOPTIONS, "iscsioptions",
            PROP_TYPE_STRING, PROP_INHERIT, ZFS_TYPE_VOLUME, "ISCSIOPTIONS");
        zprop_register_hidden(ZFS_PROP_STMF_SHAREINFO, "stmf_sbd_lu",
            PROP_TYPE_STRING, PROP_INHERIT, ZFS_TYPE_VOLUME,
            "STMF_SBD_LU");
        zprop_register_hidden(ZFS_PROP_GUID, "guid", PROP_TYPE_NUMBER,
-           PROP_READONLY, ZFS_TYPE_DATASET, "GUID");
+           PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK, "GUID");
        zprop_register_hidden(ZFS_PROP_USERACCOUNTING, "useraccounting",
            PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_DATASET,
            "USERACCOUNTING");
@@ -394,6 +450,8 @@ zfs_prop_init(void)
            PROP_READONLY, ZFS_TYPE_DATASET, "UNIQUE");
        zprop_register_hidden(ZFS_PROP_OBJSETID, "objsetid", PROP_TYPE_NUMBER,
            PROP_READONLY, ZFS_TYPE_DATASET, "OBJSETID");
+       zprop_register_hidden(ZFS_PROP_INCONSISTENT, "inconsistent",
+           PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_DATASET, "INCONSISTENT");
 
        /*
         * Property to be removed once libbe is integrated
@@ -404,7 +462,7 @@ zfs_prop_init(void)
 
        /* oddball properties */
        zprop_register_impl(ZFS_PROP_CREATION, "creation", PROP_TYPE_NUMBER, 0,
-           NULL, PROP_READONLY, ZFS_TYPE_DATASET,
+           NULL, PROP_READONLY, ZFS_TYPE_DATASET | ZFS_TYPE_BOOKMARK,
            "<date>", "CREATION", B_FALSE, B_TRUE, NULL);
 }
 
@@ -523,9 +581,9 @@ zfs_prop_random_value(zfs_prop_t prop, uint64_t seed)
  * Returns TRUE if the property applies to any of the given dataset types.
  */
 boolean_t
-zfs_prop_valid_for_type(int prop, zfs_type_t types)
+zfs_prop_valid_for_type(int prop, zfs_type_t types, boolean_t headcheck)
 {
-       return (zprop_valid_for_type(prop, types));
+       return (zprop_valid_for_type(prop, types, headcheck));
 }
 
 zprop_type_t
@@ -632,16 +690,24 @@ zfs_prop_align_right(zfs_prop_t prop)
 #endif
 
 #if defined(_KERNEL) && defined(HAVE_SPL)
+static int __init
+zcommon_init(void)
+{
+       return (0);
+}
 
-static int zcommon_init(void) { return 0; }
-static int zcommon_fini(void) { return 0; }
+static void __exit
+zcommon_fini(void)
+{
+}
 
-spl_module_init(zcommon_init);
-spl_module_exit(zcommon_fini);
+module_init(zcommon_init);
+module_exit(zcommon_fini);
 
 MODULE_DESCRIPTION("Generic ZFS support");
 MODULE_AUTHOR(ZFS_META_AUTHOR);
 MODULE_LICENSE(ZFS_META_LICENSE);
+MODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE);
 
 /* zfs dataset property functions */
 EXPORT_SYMBOL(zfs_userquota_prop_prefixes);