author | Matthew Ahrens <Matthew.Ahrens@Sun.COM> |
Sat, 18 Apr 2009 13:41:47 -0700 | |
changeset 9396 | f41cf682d0d3 |
parent 8053 | 271f44d3de11 |
child 9643 | ffd8e7765f02 |
permissions | -rw-r--r-- |
789 | 1 |
/* |
2 |
* CDDL HEADER START |
|
3 |
* |
|
4 |
* The contents of this file are subject to the terms of the |
|
1638
52000886673f
6399899 change the default value of snapdir property to "hidden"
lling
parents:
1356
diff
changeset
|
5 |
* Common Development and Distribution License (the "License"). |
52000886673f
6399899 change the default value of snapdir property to "hidden"
lling
parents:
1356
diff
changeset
|
6 |
* You may not use this file except in compliance with the License. |
789 | 7 |
* |
8 |
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
|
9 |
* or http://www.opensolaris.org/os/licensing. |
|
10 |
* See the License for the specific language governing permissions |
|
11 |
* and limitations under the License. |
|
12 |
* |
|
13 |
* When distributing Covered Code, include this CDDL HEADER in each |
|
14 |
* file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
|
15 |
* If applicable, add the following below this CDDL HEADER, with the |
|
16 |
* fields enclosed by brackets "[]" replaced with your own identifying |
|
17 |
* information: Portions Copyright [yyyy] [name of copyright owner] |
|
18 |
* |
|
19 |
* CDDL HEADER END |
|
20 |
*/ |
|
21 |
/* |
|
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
22 |
* Copyright 2009 Sun Microsystems, Inc. All rights reserved. |
789 | 23 |
* Use is subject to license terms. |
24 |
*/ |
|
25 |
||
26 |
#include <sys/zio.h> |
|
27 |
#include <sys/spa.h> |
|
5498
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
28 |
#include <sys/u8_textprep.h> |
789 | 29 |
#include <sys/zfs_acl.h> |
30 |
#include <sys/zfs_ioctl.h> |
|
4577 | 31 |
#include <sys/zfs_znode.h> |
789 | 32 |
|
33 |
#include "zfs_prop.h" |
|
4543 | 34 |
#include "zfs_deleg.h" |
789 | 35 |
|
36 |
#if defined(_KERNEL) |
|
37 |
#include <sys/systm.h> |
|
38 |
#else |
|
39 |
#include <stdlib.h> |
|
40 |
#include <string.h> |
|
41 |
#include <ctype.h> |
|
42 |
#endif |
|
43 |
||
5094 | 44 |
static zprop_desc_t zfs_prop_table[ZFS_NUM_PROPS]; |
4787 | 45 |
|
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
46 |
/* Note this is indexed by zfs_userquota_prop_t, keep the order the same */ |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
47 |
const char *zfs_userquota_prop_prefixes[] = { |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
48 |
"userused@", |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
49 |
"userquota@", |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
50 |
"groupused@", |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
51 |
"groupquota@" |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
52 |
}; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
53 |
|
5094 | 54 |
zprop_desc_t * |
55 |
zfs_prop_get_table(void) |
|
4787 | 56 |
{ |
5094 | 57 |
return (zfs_prop_table); |
4787 | 58 |
} |
59 |
||
60 |
void |
|
61 |
zfs_prop_init(void) |
|
62 |
{ |
|
5094 | 63 |
static zprop_index_t checksum_table[] = { |
4787 | 64 |
{ "on", ZIO_CHECKSUM_ON }, |
65 |
{ "off", ZIO_CHECKSUM_OFF }, |
|
66 |
{ "fletcher2", ZIO_CHECKSUM_FLETCHER_2 }, |
|
67 |
{ "fletcher4", ZIO_CHECKSUM_FLETCHER_4 }, |
|
68 |
{ "sha256", ZIO_CHECKSUM_SHA256 }, |
|
69 |
{ NULL } |
|
70 |
}; |
|
71 |
||
5094 | 72 |
static zprop_index_t compress_table[] = { |
4787 | 73 |
{ "on", ZIO_COMPRESS_ON }, |
74 |
{ "off", ZIO_COMPRESS_OFF }, |
|
75 |
{ "lzjb", ZIO_COMPRESS_LZJB }, |
|
76 |
{ "gzip", ZIO_COMPRESS_GZIP_6 }, /* gzip default */ |
|
77 |
{ "gzip-1", ZIO_COMPRESS_GZIP_1 }, |
|
78 |
{ "gzip-2", ZIO_COMPRESS_GZIP_2 }, |
|
79 |
{ "gzip-3", ZIO_COMPRESS_GZIP_3 }, |
|
80 |
{ "gzip-4", ZIO_COMPRESS_GZIP_4 }, |
|
81 |
{ "gzip-5", ZIO_COMPRESS_GZIP_5 }, |
|
82 |
{ "gzip-6", ZIO_COMPRESS_GZIP_6 }, |
|
83 |
{ "gzip-7", ZIO_COMPRESS_GZIP_7 }, |
|
84 |
{ "gzip-8", ZIO_COMPRESS_GZIP_8 }, |
|
85 |
{ "gzip-9", ZIO_COMPRESS_GZIP_9 }, |
|
86 |
{ NULL } |
|
87 |
}; |
|
88 |
||
5094 | 89 |
static zprop_index_t snapdir_table[] = { |
4787 | 90 |
{ "hidden", ZFS_SNAPDIR_HIDDEN }, |
91 |
{ "visible", ZFS_SNAPDIR_VISIBLE }, |
|
92 |
{ NULL } |
|
93 |
}; |
|
94 |
||
5094 | 95 |
static zprop_index_t acl_mode_table[] = { |
4787 | 96 |
{ "discard", ZFS_ACL_DISCARD }, |
97 |
{ "groupmask", ZFS_ACL_GROUPMASK }, |
|
98 |
{ "passthrough", ZFS_ACL_PASSTHROUGH }, |
|
99 |
{ NULL } |
|
100 |
}; |
|
101 |
||
5094 | 102 |
static zprop_index_t acl_inherit_table[] = { |
4787 | 103 |
{ "discard", ZFS_ACL_DISCARD }, |
104 |
{ "noallow", ZFS_ACL_NOALLOW }, |
|
6385
5437941ec5a1
PSARC/2008/231 New ZFS "passthrough" ACL inheritance rules
marks
parents:
6168
diff
changeset
|
105 |
{ "restricted", ZFS_ACL_RESTRICTED }, |
4787 | 106 |
{ "passthrough", ZFS_ACL_PASSTHROUGH }, |
6385
5437941ec5a1
PSARC/2008/231 New ZFS "passthrough" ACL inheritance rules
marks
parents:
6168
diff
changeset
|
107 |
{ "secure", ZFS_ACL_RESTRICTED }, /* bkwrd compatability */ |
8053
271f44d3de11
PSARC/2008/659 New ZFS "passthrough-x" ACL inheritance rules
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents:
7390
diff
changeset
|
108 |
{ "passthrough-x", ZFS_ACL_PASSTHROUGH_X }, |
4787 | 109 |
{ NULL } |
110 |
}; |
|
111 |
||
5331 | 112 |
static zprop_index_t case_table[] = { |
113 |
{ "sensitive", ZFS_CASE_SENSITIVE }, |
|
114 |
{ "insensitive", ZFS_CASE_INSENSITIVE }, |
|
115 |
{ "mixed", ZFS_CASE_MIXED }, |
|
116 |
{ NULL } |
|
117 |
}; |
|
118 |
||
5094 | 119 |
static zprop_index_t copies_table[] = { |
4787 | 120 |
{ "1", 1 }, |
121 |
{ "2", 2 }, |
|
122 |
{ "3", 3 }, |
|
123 |
{ NULL } |
|
124 |
}; |
|
125 |
||
5498
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
126 |
/* |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
127 |
* Use the unique flags we have to send to u8_strcmp() and/or |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
128 |
* u8_textprep() to represent the various normalization property |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
129 |
* values. |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
130 |
*/ |
5331 | 131 |
static zprop_index_t normalize_table[] = { |
5498
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
132 |
{ "none", 0 }, |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
133 |
{ "formD", U8_TEXTPREP_NFD }, |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
134 |
{ "formKC", U8_TEXTPREP_NFKC }, |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
135 |
{ "formC", U8_TEXTPREP_NFC }, |
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
136 |
{ "formKD", U8_TEXTPREP_NFKD }, |
5331 | 137 |
{ NULL } |
138 |
}; |
|
139 |
||
5094 | 140 |
static zprop_index_t version_table[] = { |
4787 | 141 |
{ "1", 1 }, |
142 |
{ "2", 2 }, |
|
5331 | 143 |
{ "3", 3 }, |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
144 |
{ "4", 4 }, |
4787 | 145 |
{ "current", ZPL_VERSION }, |
146 |
{ NULL } |
|
147 |
}; |
|
148 |
||
5094 | 149 |
static zprop_index_t boolean_table[] = { |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
150 |
{ "off", 0 }, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
151 |
{ "on", 1 }, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
152 |
{ NULL } |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
153 |
}; |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
154 |
|
6168
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
155 |
static zprop_index_t canmount_table[] = { |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
156 |
{ "off", ZFS_CANMOUNT_OFF }, |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
157 |
{ "on", ZFS_CANMOUNT_ON }, |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
158 |
{ "noauto", ZFS_CANMOUNT_NOAUTO }, |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
159 |
{ NULL } |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
160 |
}; |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
161 |
|
7237
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
162 |
static zprop_index_t cache_table[] = { |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
163 |
{ "none", ZFS_CACHE_NONE }, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
164 |
{ "metadata", ZFS_CACHE_METADATA }, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
165 |
{ "all", ZFS_CACHE_ALL }, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
166 |
{ NULL } |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
167 |
}; |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
168 |
|
4787 | 169 |
/* inherit index properties */ |
170 |
register_index(ZFS_PROP_CHECKSUM, "checksum", ZIO_CHECKSUM_DEFAULT, |
|
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
171 |
PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, |
4787 | 172 |
"on | off | fletcher2 | fletcher4 | sha256", "CHECKSUM", |
173 |
checksum_table); |
|
174 |
register_index(ZFS_PROP_COMPRESSION, "compression", |
|
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
175 |
ZIO_COMPRESS_DEFAULT, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
176 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, |
4787 | 177 |
"on | off | lzjb | gzip | gzip-[1-9]", "COMPRESS", compress_table); |
178 |
register_index(ZFS_PROP_SNAPDIR, "snapdir", ZFS_SNAPDIR_HIDDEN, |
|
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
179 |
PROP_INHERIT, ZFS_TYPE_FILESYSTEM, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
180 |
"hidden | visible", "SNAPDIR", snapdir_table); |
4787 | 181 |
register_index(ZFS_PROP_ACLMODE, "aclmode", ZFS_ACL_GROUPMASK, |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
182 |
PROP_INHERIT, ZFS_TYPE_FILESYSTEM, |
5094 | 183 |
"discard | groupmask | passthrough", "ACLMODE", acl_mode_table); |
6385
5437941ec5a1
PSARC/2008/231 New ZFS "passthrough" ACL inheritance rules
marks
parents:
6168
diff
changeset
|
184 |
register_index(ZFS_PROP_ACLINHERIT, "aclinherit", ZFS_ACL_RESTRICTED, |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
185 |
PROP_INHERIT, ZFS_TYPE_FILESYSTEM, |
8053
271f44d3de11
PSARC/2008/659 New ZFS "passthrough-x" ACL inheritance rules
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents:
7390
diff
changeset
|
186 |
"discard | noallow | restricted | passthrough | passthrough-x", |
6385
5437941ec5a1
PSARC/2008/231 New ZFS "passthrough" ACL inheritance rules
marks
parents:
6168
diff
changeset
|
187 |
"ACLINHERIT", acl_inherit_table); |
4787 | 188 |
register_index(ZFS_PROP_COPIES, "copies", 1, |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
189 |
PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, |
4787 | 190 |
"1 | 2 | 3", "COPIES", copies_table); |
7237
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
191 |
register_index(ZFS_PROP_PRIMARYCACHE, "primarycache", |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
192 |
ZFS_CACHE_ALL, PROP_INHERIT, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
193 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
194 |
"all | none | metadata", "PRIMARYCACHE", cache_table); |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
195 |
register_index(ZFS_PROP_SECONDARYCACHE, "secondarycache", |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
196 |
ZFS_CACHE_ALL, PROP_INHERIT, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
197 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, |
f47d41541b14
PSARC 2008/393 zfs primarycache and secondarycache properties
ek110237
parents:
6690
diff
changeset
|
198 |
"all | none | metadata", "SECONDARYCACHE", cache_table); |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
199 |
|
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
200 |
/* inherit index (boolean) properties */ |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
201 |
register_index(ZFS_PROP_ATIME, "atime", 1, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
202 |
ZFS_TYPE_FILESYSTEM, "on | off", "ATIME", boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
203 |
register_index(ZFS_PROP_DEVICES, "devices", 1, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
204 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "DEVICES", |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
205 |
boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
206 |
register_index(ZFS_PROP_EXEC, "exec", 1, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
207 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "EXEC", |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
208 |
boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
209 |
register_index(ZFS_PROP_SETUID, "setuid", 1, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
210 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "SETUID", |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
211 |
boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
212 |
register_index(ZFS_PROP_READONLY, "readonly", 0, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
213 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "on | off", "RDONLY", |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
214 |
boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
215 |
register_index(ZFS_PROP_ZONED, "zoned", 0, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
216 |
ZFS_TYPE_FILESYSTEM, "on | off", "ZONED", boolean_table); |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
217 |
register_index(ZFS_PROP_XATTR, "xattr", 1, PROP_INHERIT, |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
218 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "XATTR", |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
219 |
boolean_table); |
5331 | 220 |
register_index(ZFS_PROP_VSCAN, "vscan", 0, PROP_INHERIT, |
221 |
ZFS_TYPE_FILESYSTEM, "on | off", "VSCAN", |
|
222 |
boolean_table); |
|
223 |
register_index(ZFS_PROP_NBMAND, "nbmand", 0, PROP_INHERIT, |
|
224 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "NBMAND", |
|
225 |
boolean_table); |
|
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
226 |
|
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
227 |
/* default index properties */ |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
228 |
register_index(ZFS_PROP_VERSION, "version", 0, PROP_DEFAULT, |
2597 | 229 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
230 |
"1 | 2 | 3 | 4 | current", "VERSION", version_table); |
6168
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
231 |
register_index(ZFS_PROP_CANMOUNT, "canmount", ZFS_CANMOUNT_ON, |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
232 |
PROP_DEFAULT, ZFS_TYPE_FILESYSTEM, "on | off | noauto", |
51c045dcc498
PSARC 2008/168 Support for ZFS property value canmount=noauto
hs24103
parents:
5498
diff
changeset
|
233 |
"CANMOUNT", canmount_table); |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
234 |
|
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
235 |
/* readonly index (boolean) properties */ |
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
236 |
register_index(ZFS_PROP_MOUNTED, "mounted", 0, PROP_READONLY, |
5094 | 237 |
ZFS_TYPE_FILESYSTEM, "yes | no", "MOUNTED", boolean_table); |
4849
3a61e0a9a953
6536043 arc_byteswap_func_t and dmu_byteswap_func_t are redundant
ahrens
parents:
4787
diff
changeset
|
238 |
|
5331 | 239 |
/* set once index properties */ |
5498
334b476844ca
6622831 normalization properties are not preserved by "zfs send"
timh
parents:
5378
diff
changeset
|
240 |
register_index(ZFS_PROP_NORMALIZE, "normalization", 0, |
5331 | 241 |
PROP_ONETIME, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, |
242 |
"none | formC | formD | formKC | formKD", "NORMALIZATION", |
|
243 |
normalize_table); |
|
244 |
register_index(ZFS_PROP_CASE, "casesensitivity", ZFS_CASE_SENSITIVE, |
|
245 |
PROP_ONETIME, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, |
|
246 |
"sensitive | insensitive | mixed", "CASE", case_table); |
|
247 |
||
248 |
/* set once index (boolean) properties */ |
|
249 |
register_index(ZFS_PROP_UTF8ONLY, "utf8only", 0, PROP_ONETIME, |
|
250 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, |
|
251 |
"on | off", "UTF8ONLY", boolean_table); |
|
252 |
||
4787 | 253 |
/* string properties */ |
254 |
register_string(ZFS_PROP_ORIGIN, "origin", NULL, PROP_READONLY, |
|
255 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<snapshot>", "ORIGIN"); |
|
256 |
register_string(ZFS_PROP_MOUNTPOINT, "mountpoint", "/", PROP_INHERIT, |
|
257 |
ZFS_TYPE_FILESYSTEM, "<path> | legacy | none", "MOUNTPOINT"); |
|
258 |
register_string(ZFS_PROP_SHARENFS, "sharenfs", "off", PROP_INHERIT, |
|
259 |
ZFS_TYPE_FILESYSTEM, "on | off | share(1M) options", "SHARENFS"); |
|
260 |
register_string(ZFS_PROP_SHAREISCSI, "shareiscsi", "off", PROP_INHERIT, |
|
5094 | 261 |
ZFS_TYPE_DATASET, "on | off | type=<type>", "SHAREISCSI"); |
4787 | 262 |
register_string(ZFS_PROP_TYPE, "type", NULL, PROP_READONLY, |
5094 | 263 |
ZFS_TYPE_DATASET, "filesystem | volume | snapshot", "TYPE"); |
5331 | 264 |
register_string(ZFS_PROP_SHARESMB, "sharesmb", "off", PROP_INHERIT, |
265 |
ZFS_TYPE_FILESYSTEM, "on | off | sharemgr(1M) options", "SHARESMB"); |
|
4787 | 266 |
|
267 |
/* readonly number properties */ |
|
268 |
register_number(ZFS_PROP_USED, "used", 0, PROP_READONLY, |
|
5094 | 269 |
ZFS_TYPE_DATASET, "<size>", "USED"); |
4787 | 270 |
register_number(ZFS_PROP_AVAILABLE, "available", 0, PROP_READONLY, |
5094 | 271 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "AVAIL"); |
4787 | 272 |
register_number(ZFS_PROP_REFERENCED, "referenced", 0, PROP_READONLY, |
5094 | 273 |
ZFS_TYPE_DATASET, "<size>", "REFER"); |
4787 | 274 |
register_number(ZFS_PROP_COMPRESSRATIO, "compressratio", 0, |
5094 | 275 |
PROP_READONLY, ZFS_TYPE_DATASET, |
4787 | 276 |
"<1.00x or higher if compressed>", "RATIO"); |
277 |
register_number(ZFS_PROP_VOLBLOCKSIZE, "volblocksize", 8192, |
|
5331 | 278 |
PROP_ONETIME, |
279 |
ZFS_TYPE_VOLUME, "512 to 128k, power of 2", "VOLBLOCK"); |
|
7390
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
280 |
register_number(ZFS_PROP_USEDSNAP, "usedbysnapshots", 0, PROP_READONLY, |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
281 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "USEDSNAP"); |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
282 |
register_number(ZFS_PROP_USEDDS, "usedbydataset", 0, PROP_READONLY, |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
283 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "USEDDS"); |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
284 |
register_number(ZFS_PROP_USEDCHILD, "usedbychildren", 0, PROP_READONLY, |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
285 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "USEDCHILD"); |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
286 |
register_number(ZFS_PROP_USEDREFRESERV, "usedbyrefreservation", 0, |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
287 |
PROP_READONLY, |
6d408f0a5fbd
PSARC/2008/518 ZFS space accounting enhancements
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
7237
diff
changeset
|
288 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size>", "USEDREFRESERV"); |
4787 | 289 |
|
290 |
/* default number properties */ |
|
291 |
register_number(ZFS_PROP_QUOTA, "quota", 0, PROP_DEFAULT, |
|
292 |
ZFS_TYPE_FILESYSTEM, "<size> | none", "QUOTA"); |
|
293 |
register_number(ZFS_PROP_RESERVATION, "reservation", 0, PROP_DEFAULT, |
|
294 |
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size> | none", "RESERV"); |
|
295 |
register_number(ZFS_PROP_VOLSIZE, "volsize", 0, PROP_DEFAULT, |
|
296 |
ZFS_TYPE_VOLUME, "<size>", "VOLSIZE"); |
|
5378
111aa1baa84a
PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents:
5331
diff
changeset
|
297 |
register_number(ZFS_PROP_REFQUOTA, "refquota", 0, PROP_DEFAULT, |
111aa1baa84a
PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents:
5331
diff
changeset
|
298 |
ZFS_TYPE_FILESYSTEM, "<size> | none", "REFQUOTA"); |
111aa1baa84a
PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents:
5331
diff
changeset
|
299 |
register_number(ZFS_PROP_REFRESERVATION, "refreservation", 0, |
111aa1baa84a
PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents:
5331
diff
changeset
|
300 |
PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, |
111aa1baa84a
PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents:
5331
diff
changeset
|
301 |
"<size> | none", "REFRESERV"); |
4787 | 302 |
|
303 |
/* inherit number properties */ |
|
304 |
register_number(ZFS_PROP_RECORDSIZE, "recordsize", SPA_MAXBLOCKSIZE, |
|
305 |
PROP_INHERIT, |
|
306 |
ZFS_TYPE_FILESYSTEM, "512 to 128k, power of 2", "RECSIZE"); |
|
307 |
||
308 |
/* hidden properties */ |
|
309 |
register_hidden(ZFS_PROP_CREATETXG, "createtxg", PROP_TYPE_NUMBER, |
|
5094 | 310 |
PROP_READONLY, ZFS_TYPE_DATASET, NULL); |
4787 | 311 |
register_hidden(ZFS_PROP_NUMCLONES, "numclones", PROP_TYPE_NUMBER, |
312 |
PROP_READONLY, ZFS_TYPE_SNAPSHOT, NULL); |
|
313 |
register_hidden(ZFS_PROP_NAME, "name", PROP_TYPE_STRING, |
|
5094 | 314 |
PROP_READONLY, ZFS_TYPE_DATASET, "NAME"); |
4787 | 315 |
register_hidden(ZFS_PROP_ISCSIOPTIONS, "iscsioptions", PROP_TYPE_STRING, |
316 |
PROP_INHERIT, ZFS_TYPE_VOLUME, "ISCSIOPTIONS"); |
|
6643
3a34b0dbb107
6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents:
6385
diff
changeset
|
317 |
register_hidden(ZFS_PROP_GUID, "guid", PROP_TYPE_NUMBER, PROP_READONLY, |
3a34b0dbb107
6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents:
6385
diff
changeset
|
318 |
ZFS_TYPE_DATASET, "GUID"); |
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
319 |
register_hidden(ZFS_PROP_USERACCOUNTING, "useraccounting", |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
320 |
PROP_TYPE_NUMBER, PROP_READONLY, ZFS_TYPE_DATASET, NULL); |
4787 | 321 |
|
322 |
/* oddball properties */ |
|
323 |
register_impl(ZFS_PROP_CREATION, "creation", PROP_TYPE_NUMBER, 0, NULL, |
|
5094 | 324 |
PROP_READONLY, ZFS_TYPE_DATASET, |
4787 | 325 |
"<date>", "CREATION", B_FALSE, B_TRUE, NULL); |
326 |
} |
|
327 |
||
3912 | 328 |
boolean_t |
5094 | 329 |
zfs_prop_delegatable(zfs_prop_t prop) |
3912 | 330 |
{ |
5094 | 331 |
zprop_desc_t *pd = &zfs_prop_table[prop]; |
332 |
return (pd->pd_attr != PROP_READONLY); |
|
3912 | 333 |
} |
334 |
||
335 |
/* |
|
336 |
* Given a zfs dataset property name, returns the corresponding property ID. |
|
789 | 337 |
*/ |
338 |
zfs_prop_t |
|
339 |
zfs_name_to_prop(const char *propname) |
|
340 |
{ |
|
5094 | 341 |
return (zprop_name_to_prop(propname, ZFS_TYPE_DATASET)); |
3912 | 342 |
} |
789 | 343 |
|
344 |
/* |
|
2676 | 345 |
* For user property names, we allow all lowercase alphanumeric characters, plus |
346 |
* a few useful punctuation characters. |
|
347 |
*/ |
|
348 |
static int |
|
349 |
valid_char(char c) |
|
350 |
{ |
|
351 |
return ((c >= 'a' && c <= 'z') || |
|
352 |
(c >= '0' && c <= '9') || |
|
353 |
c == '-' || c == '_' || c == '.' || c == ':'); |
|
354 |
} |
|
355 |
||
356 |
/* |
|
357 |
* Returns true if this is a valid user-defined property (one with a ':'). |
|
358 |
*/ |
|
359 |
boolean_t |
|
360 |
zfs_prop_user(const char *name) |
|
361 |
{ |
|
362 |
int i; |
|
363 |
char c; |
|
364 |
boolean_t foundsep = B_FALSE; |
|
365 |
||
366 |
for (i = 0; i < strlen(name); i++) { |
|
367 |
c = name[i]; |
|
368 |
if (!valid_char(c)) |
|
369 |
return (B_FALSE); |
|
370 |
if (c == ':') |
|
371 |
foundsep = B_TRUE; |
|
372 |
} |
|
373 |
||
374 |
if (!foundsep) |
|
375 |
return (B_FALSE); |
|
376 |
||
377 |
return (B_TRUE); |
|
378 |
} |
|
379 |
||
380 |
/* |
|
9396
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
381 |
* Returns true if this is a valid userspace-type property (one with a '@'). |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
382 |
* Note that after the @, any character is valid (eg, another @, for SID |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
383 |
* user@domain). |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
384 |
*/ |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
385 |
boolean_t |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
386 |
zfs_prop_userquota(const char *name) |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
387 |
{ |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
388 |
zfs_userquota_prop_t prop; |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
389 |
|
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
390 |
for (prop = 0; prop < ZFS_NUM_USERQUOTA_PROPS; prop++) { |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
391 |
if (strncmp(name, zfs_userquota_prop_prefixes[prop], |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
392 |
strlen(zfs_userquota_prop_prefixes[prop])) == 0) { |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
393 |
return (B_TRUE); |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
394 |
} |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
395 |
} |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
396 |
|
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
397 |
return (B_FALSE); |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
398 |
} |
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
399 |
|
f41cf682d0d3
PSARC/2009/204 ZFS user/group quotas & space accounting
Matthew Ahrens <Matthew.Ahrens@Sun.COM>
parents:
8053
diff
changeset
|
400 |
/* |
5094 | 401 |
* Tables of index types, plus functions to convert between the user view |
402 |
* (strings) and internal representation (uint64_t). |
|
403 |
*/ |
|
404 |
int |
|
405 |
zfs_prop_string_to_index(zfs_prop_t prop, const char *string, uint64_t *index) |
|
406 |
{ |
|
407 |
return (zprop_string_to_index(prop, string, index, ZFS_TYPE_DATASET)); |
|
408 |
} |
|
409 |
||
410 |
int |
|
411 |
zfs_prop_index_to_string(zfs_prop_t prop, uint64_t index, const char **string) |
|
412 |
{ |
|
413 |
return (zprop_index_to_string(prop, index, string, ZFS_TYPE_DATASET)); |
|
414 |
} |
|
415 |
||
416 |
/* |
|
417 |
* Returns TRUE if the property applies to any of the given dataset types. |
|
789 | 418 |
*/ |
6690
19b5b95523e1
6695219 Running 'zfs get all' on a snapshot should not display the user properties
gw25295
parents:
6643
diff
changeset
|
419 |
boolean_t |
5094 | 420 |
zfs_prop_valid_for_type(int prop, zfs_type_t types) |
421 |
{ |
|
422 |
return (zprop_valid_for_type(prop, types)); |
|
423 |
} |
|
424 |
||
425 |
zprop_type_t |
|
426 |
zfs_prop_get_type(zfs_prop_t prop) |
|
789 | 427 |
{ |
5094 | 428 |
return (zfs_prop_table[prop].pd_proptype); |
429 |
} |
|
430 |
||
431 |
/* |
|
432 |
* Returns TRUE if the property is readonly. |
|
433 |
*/ |
|
434 |
boolean_t |
|
435 |
zfs_prop_readonly(zfs_prop_t prop) |
|
436 |
{ |
|
5331 | 437 |
return (zfs_prop_table[prop].pd_attr == PROP_READONLY || |
438 |
zfs_prop_table[prop].pd_attr == PROP_ONETIME); |
|
439 |
} |
|
440 |
||
441 |
/* |
|
442 |
* Returns TRUE if the property is only allowed to be set once. |
|
443 |
*/ |
|
444 |
boolean_t |
|
445 |
zfs_prop_setonce(zfs_prop_t prop) |
|
446 |
{ |
|
447 |
return (zfs_prop_table[prop].pd_attr == PROP_ONETIME); |
|
789 | 448 |
} |
449 |
||
4451 | 450 |
const char * |
5094 | 451 |
zfs_prop_default_string(zfs_prop_t prop) |
4451 | 452 |
{ |
453 |
return (zfs_prop_table[prop].pd_strdefault); |
|
454 |
} |
|
455 |
||
789 | 456 |
uint64_t |
457 |
zfs_prop_default_numeric(zfs_prop_t prop) |
|
458 |
{ |
|
459 |
return (zfs_prop_table[prop].pd_numdefault); |
|
460 |
} |
|
461 |
||
462 |
/* |
|
3912 | 463 |
* Given a dataset property ID, returns the corresponding name. |
4451 | 464 |
* Assuming the zfs dataset property ID is valid. |
789 | 465 |
*/ |
466 |
const char * |
|
467 |
zfs_prop_to_name(zfs_prop_t prop) |
|
468 |
{ |
|
469 |
return (zfs_prop_table[prop].pd_name); |
|
470 |
} |
|
471 |
||
472 |
/* |
|
473 |
* Returns TRUE if the property is inheritable. |
|
474 |
*/ |
|
5094 | 475 |
boolean_t |
789 | 476 |
zfs_prop_inheritable(zfs_prop_t prop) |
477 |
{ |
|
5331 | 478 |
return (zfs_prop_table[prop].pd_attr == PROP_INHERIT || |
479 |
zfs_prop_table[prop].pd_attr == PROP_ONETIME); |
|
2676 | 480 |
} |
481 |
||
2717
ed589a32259d
6469385 zfs_set_prop_nvlist range checking is busted
eschrock
parents:
2676
diff
changeset
|
482 |
#ifndef _KERNEL |
ed589a32259d
6469385 zfs_set_prop_nvlist range checking is busted
eschrock
parents:
2676
diff
changeset
|
483 |
|
789 | 484 |
/* |
3912 | 485 |
* Returns a string describing the set of acceptable values for the given |
486 |
* zfs property, or NULL if it cannot be set. |
|
789 | 487 |
*/ |
3912 | 488 |
const char * |
489 |
zfs_prop_values(zfs_prop_t prop) |
|
789 | 490 |
{ |
491 |
return (zfs_prop_table[prop].pd_values); |
|
492 |
} |
|
493 |
||
494 |
/* |
|
495 |
* Returns TRUE if this property is a string type. Note that index types |
|
496 |
* (compression, checksum) are treated as strings in userland, even though they |
|
497 |
* are stored numerically on disk. |
|
498 |
*/ |
|
499 |
int |
|
500 |
zfs_prop_is_string(zfs_prop_t prop) |
|
501 |
{ |
|
4787 | 502 |
return (zfs_prop_table[prop].pd_proptype == PROP_TYPE_STRING || |
503 |
zfs_prop_table[prop].pd_proptype == PROP_TYPE_INDEX); |
|
789 | 504 |
} |
505 |
||
506 |
/* |
|
507 |
* Returns the column header for the given property. Used only in |
|
508 |
* 'zfs list -o', but centralized here with the other property information. |
|
509 |
*/ |
|
510 |
const char * |
|
511 |
zfs_prop_column_name(zfs_prop_t prop) |
|
512 |
{ |
|
513 |
return (zfs_prop_table[prop].pd_colname); |
|
514 |
} |
|
515 |
||
516 |
/* |
|
2676 | 517 |
* Returns whether the given property should be displayed right-justified for |
518 |
* 'zfs list'. |
|
789 | 519 |
*/ |
2676 | 520 |
boolean_t |
521 |
zfs_prop_align_right(zfs_prop_t prop) |
|
789 | 522 |
{ |
2676 | 523 |
return (zfs_prop_table[prop].pd_rightalign); |
789 | 524 |
} |
5331 | 525 |
|
789 | 526 |
#endif |