usr/src/common/zfs/zfs_prop.c
author ahrens
Thu, 02 Aug 2007 21:23:46 -0700
changeset 4787 602d3f97842c
parent 4597 cd30043e9dc2
child 4849 3a61e0a9a953
permissions -rw-r--r--
6393351 unique_* could be improved 6553348 assertion failed: ab->b_flags & (1 << 3) at line 2572 of arc.c 6582408 ::arc should accept -k/-m/-g to print in kilo/mega/giga-bytes 6582438 should have generic reader-priority rwlock for spa_config locks 6582441 zfs_cmd_t should only be used to pass arguments to/from userland 6582456 property code is overdue for some spring cleaning 6588564 zpl unmount lock should use regular rwlock
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     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
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
3377
a2fa338530c1 6393525 vdev_reopen() should verify that it's still the same device
eschrock
parents: 3234
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
#include <sys/zio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#include <sys/spa.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
#include <sys/zfs_acl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#include <sys/zfs_ioctl.h>
4577
ed36b0e652bc PSARC/2007/328 zfs upgrade
ahrens
parents: 4543
diff changeset
    32
#include <sys/zfs_znode.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include "zfs_prop.h"
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
    35
#include "zfs_deleg.h"
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#if defined(_KERNEL)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
#include <sys/systm.h>
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
    39
#include <util/qsort.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
#else
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
#include <stdlib.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
#include <string.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
#include <ctype.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
typedef enum {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    47
	PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    48
	PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    49
	PROP_INHERIT
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    50
} prop_attr_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    51
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    52
typedef struct zfs_index {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    53
	const char *name;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    54
	uint64_t index;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    55
} zfs_index_t;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    56
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
typedef struct {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    58
	const char *pd_name;		/* human-readable property name */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    59
	zfs_proptype_t pd_proptype;	/* string, boolean, index, number */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    60
	const char *pd_strdefault;	/* default for strings */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    61
	uint64_t pd_numdefault;		/* for boolean / index / number */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    62
	prop_attr_t pd_attr;		/* default, readonly, inherit */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    63
	int pd_types;			/* bitfield of valid dataset types */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    64
					/* fs | vol | snap; or pool */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    65
	const char *pd_values;		/* string telling acceptable values */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    66
	const char *pd_colname;		/* column header for "zfs list" */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    67
	boolean_t pd_rightalign;	/* column alignment for "zfs list" */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    68
	boolean_t pd_visible;		/* do we list this property with the */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    69
					/* "zfs get" help message */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    70
	const zfs_index_t *pd_table;	/* for index properties, a table */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    71
					/* defining the possible values */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    72
} prop_desc_t;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    73
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    74
static prop_desc_t zfs_prop_table[ZFS_NUM_PROPS];
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    75
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    76
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    77
register_impl(zfs_prop_t prop, const char *name, zfs_proptype_t type,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    78
    uint64_t numdefault, const char *strdefault, prop_attr_t attr,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    79
    int objset_types, const char *values, const char *colname,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    80
    boolean_t rightalign, boolean_t visible, const zfs_index_t *table)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    81
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    82
	prop_desc_t *pd = &zfs_prop_table[prop];
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    83
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    84
	ASSERT(pd->pd_name == NULL || pd->pd_name == name);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    85
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    86
	pd->pd_name = name;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    87
	pd->pd_proptype = type;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    88
	pd->pd_numdefault = numdefault;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    89
	pd->pd_strdefault = strdefault;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    90
	pd->pd_attr = attr;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    91
	pd->pd_types = objset_types;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    92
	pd->pd_values = values;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    93
	pd->pd_colname = colname;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    94
	pd->pd_rightalign = rightalign;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    95
	pd->pd_visible = visible;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    96
	pd->pd_table = table;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    97
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    98
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
    99
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   100
register_string(zfs_prop_t prop, const char *name, const char *def,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   101
    prop_attr_t attr, int objset_types, const char *values,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   102
    const char *colname)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   103
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   104
	register_impl(prop, name, PROP_TYPE_STRING, 0, def, attr,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   105
	    objset_types, values, colname, B_FALSE, B_TRUE, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   106
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   107
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   108
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   109
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   110
register_number(zfs_prop_t prop, const char *name, uint64_t def,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   111
    prop_attr_t attr, int objset_types, const char *values, const char *colname)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   112
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   113
	register_impl(prop, name, PROP_TYPE_NUMBER, def, NULL, attr,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   114
	    objset_types, values, colname, B_TRUE, B_TRUE, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   115
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   116
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   117
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   118
register_boolean(zfs_prop_t prop, const char *name, uint64_t def,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   119
    prop_attr_t attr, int objset_types, const char *values, const char *colname)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   120
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   121
	register_impl(prop, name, PROP_TYPE_BOOLEAN, def, NULL, attr,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   122
	    objset_types, values, colname, B_TRUE, B_TRUE, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   123
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   124
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   125
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   126
register_index(zfs_prop_t prop, const char *name, uint64_t def,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   127
    int objset_types, const char *values, const char *colname,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   128
    const zfs_index_t *table)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   129
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   130
	register_impl(prop, name, PROP_TYPE_INDEX, def, NULL, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   131
	    objset_types, values, colname, B_TRUE, B_TRUE, table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   132
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   133
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   134
static void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   135
register_hidden(zfs_prop_t prop, const char *name, zfs_proptype_t type,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   136
    prop_attr_t attr, int objset_types, const char *colname)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   137
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   138
	register_impl(prop, name, type, 0, NULL, attr,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   139
	    objset_types, NULL, colname, B_FALSE, B_FALSE, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   140
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   141
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   142
void
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   143
zfs_prop_init(void)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   144
{
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   145
	static zfs_index_t checksum_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   146
		{ "on",		ZIO_CHECKSUM_ON },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   147
		{ "off",	ZIO_CHECKSUM_OFF },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   148
		{ "fletcher2",	ZIO_CHECKSUM_FLETCHER_2 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   149
		{ "fletcher4",	ZIO_CHECKSUM_FLETCHER_4 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   150
		{ "sha256",	ZIO_CHECKSUM_SHA256 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   151
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   152
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   153
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   154
	static zfs_index_t compress_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   155
		{ "on",		ZIO_COMPRESS_ON },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   156
		{ "off",	ZIO_COMPRESS_OFF },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   157
		{ "lzjb",	ZIO_COMPRESS_LZJB },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   158
		{ "gzip",	ZIO_COMPRESS_GZIP_6 },	/* gzip default */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   159
		{ "gzip-1",	ZIO_COMPRESS_GZIP_1 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   160
		{ "gzip-2",	ZIO_COMPRESS_GZIP_2 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   161
		{ "gzip-3",	ZIO_COMPRESS_GZIP_3 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   162
		{ "gzip-4",	ZIO_COMPRESS_GZIP_4 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   163
		{ "gzip-5",	ZIO_COMPRESS_GZIP_5 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   164
		{ "gzip-6",	ZIO_COMPRESS_GZIP_6 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   165
		{ "gzip-7",	ZIO_COMPRESS_GZIP_7 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   166
		{ "gzip-8",	ZIO_COMPRESS_GZIP_8 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   167
		{ "gzip-9",	ZIO_COMPRESS_GZIP_9 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   168
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   169
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   170
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   171
	static zfs_index_t snapdir_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   172
		{ "hidden",	ZFS_SNAPDIR_HIDDEN },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   173
		{ "visible",	ZFS_SNAPDIR_VISIBLE },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   174
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   175
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   176
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   177
	static zfs_index_t acl_mode_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   178
		{ "discard",	ZFS_ACL_DISCARD },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   179
		{ "groupmask",	ZFS_ACL_GROUPMASK },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   180
		{ "passthrough", ZFS_ACL_PASSTHROUGH },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   181
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   182
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   183
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   184
	static zfs_index_t acl_inherit_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   185
		{ "discard",	ZFS_ACL_DISCARD },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   186
		{ "noallow",	ZFS_ACL_NOALLOW },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   187
		{ "secure",	ZFS_ACL_SECURE },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   188
		{ "passthrough", ZFS_ACL_PASSTHROUGH },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   189
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   190
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   191
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   192
	static zfs_index_t copies_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   193
		{ "1",		1 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   194
		{ "2",		2 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   195
		{ "3",		3 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   196
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   197
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   198
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   199
	static zfs_index_t version_table[] = {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   200
		{ "1",		1 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   201
		{ "2",		2 },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   202
		{ "current",	ZPL_VERSION },
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   203
		{ NULL }
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   204
	};
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   205
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   206
	/* inherit index properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   207
	register_index(ZFS_PROP_CHECKSUM, "checksum", ZIO_CHECKSUM_DEFAULT,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   208
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   209
	    "on | off | fletcher2 | fletcher4 | sha256", "CHECKSUM",
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   210
	    checksum_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   211
	register_index(ZFS_PROP_COMPRESSION, "compression",
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   212
	    ZIO_COMPRESS_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   213
	    "on | off | lzjb | gzip | gzip-[1-9]", "COMPRESS", compress_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   214
	register_index(ZFS_PROP_SNAPDIR, "snapdir", ZFS_SNAPDIR_HIDDEN,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   215
	    ZFS_TYPE_FILESYSTEM, "hidden | visible", "SNAPDIR", snapdir_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   216
	register_index(ZFS_PROP_ACLMODE, "aclmode", ZFS_ACL_GROUPMASK,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   217
	    ZFS_TYPE_FILESYSTEM, "discard | groupmask | passthrough", "ACLMODE",
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   218
	    acl_mode_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   219
	register_index(ZFS_PROP_ACLINHERIT, "aclinherit", ZFS_ACL_SECURE,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   220
	    ZFS_TYPE_FILESYSTEM,
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   221
	    "discard | noallow | secure | passthrough", "ACLINHERIT",
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   222
	    acl_inherit_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   223
	register_index(ZFS_PROP_COPIES, "copies", 1,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   224
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   225
	    "1 | 2 | 3", "COPIES", copies_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   226
	register_index(ZFS_PROP_VERSION, "version", 0,
2597
21c0f93f2513 6349987 lzjb.c lived longer than expected?
nd150628
parents: 2474
diff changeset
   227
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT,
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   228
	    "1 | 2 | current", "VERSION", version_table);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   229
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   230
	/* string properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   231
	register_string(ZFS_PROP_ORIGIN, "origin", NULL, PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   232
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<snapshot>", "ORIGIN");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   233
	register_string(ZPOOL_PROP_BOOTFS, "bootfs", NULL, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   234
	    ZFS_TYPE_POOL, "<filesystem>", "BOOTFS");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   235
	register_string(ZFS_PROP_MOUNTPOINT, "mountpoint", "/", PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   236
	    ZFS_TYPE_FILESYSTEM, "<path> | legacy | none", "MOUNTPOINT");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   237
	register_string(ZFS_PROP_SHARENFS, "sharenfs", "off", PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   238
	    ZFS_TYPE_FILESYSTEM, "on | off | share(1M) options", "SHARENFS");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   239
	register_string(ZFS_PROP_SHAREISCSI, "shareiscsi", "off", PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   240
	    ZFS_TYPE_ANY, "on | off | type=<type>", "SHAREISCSI");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   241
	register_string(ZFS_PROP_TYPE, "type", NULL, PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   242
	    ZFS_TYPE_ANY, "filesystem | volume | snapshot", "TYPE");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   243
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   244
	/* readonly number properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   245
	register_number(ZFS_PROP_USED, "used", 0, PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   246
	    ZFS_TYPE_ANY, "<size>", "USED");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   247
	register_number(ZFS_PROP_AVAILABLE, "available", 0, PROP_READONLY,
874
e972cd30680f 6347421 Trying to set volblocksize on existing volume gives an unexpected error
eschrock
parents: 866
diff changeset
   248
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   249
	    "<size>", "AVAIL");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   250
	register_number(ZFS_PROP_REFERENCED, "referenced", 0, PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   251
	    ZFS_TYPE_ANY, "<size>", "REFER");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   252
	register_number(ZFS_PROP_COMPRESSRATIO, "compressratio", 0,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   253
	    PROP_READONLY, ZFS_TYPE_ANY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   254
	    "<1.00x or higher if compressed>", "RATIO");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   255
	register_number(ZFS_PROP_VOLBLOCKSIZE, "volblocksize", 8192,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   256
	    PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   257
	    ZFS_TYPE_VOLUME, "512 to 128k, power of 2",	"VOLBLOCK");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   258
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   259
	/* default number properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   260
	register_number(ZFS_PROP_QUOTA, "quota", 0, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   261
	    ZFS_TYPE_FILESYSTEM, "<size> | none", "QUOTA");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   262
	register_number(ZFS_PROP_RESERVATION, "reservation", 0, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   263
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size> | none", "RESERV");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   264
	register_number(ZFS_PROP_VOLSIZE, "volsize", 0, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   265
	    ZFS_TYPE_VOLUME, "<size>", "VOLSIZE");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   266
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   267
	/* inherit number properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   268
	register_number(ZFS_PROP_RECORDSIZE, "recordsize", SPA_MAXBLOCKSIZE,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   269
	    PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   270
	    ZFS_TYPE_FILESYSTEM, "512 to 128k, power of 2", "RECSIZE");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   271
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   272
	/* readonly boolean properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   273
	register_boolean(ZFS_PROP_MOUNTED, "mounted", 0, PROP_READONLY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   274
	    ZFS_TYPE_FILESYSTEM, "yes | no | -", "MOUNTED");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   275
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   276
	/* default boolean properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   277
	register_boolean(ZFS_PROP_CANMOUNT, "canmount", 1, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   278
	    ZFS_TYPE_FILESYSTEM, "on | off", "CANMOUNT");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   279
	register_boolean(ZPOOL_PROP_DELEGATION, "delegation", 1, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   280
	    ZFS_TYPE_POOL, "on | off", "DELEGATION");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   281
	register_boolean(ZPOOL_PROP_AUTOREPLACE, "autoreplace", 0, PROP_DEFAULT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   282
	    ZFS_TYPE_POOL, "on | off", "REPLACE");
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   283
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   284
	/* inherit boolean properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   285
	register_boolean(ZFS_PROP_ATIME, "atime", 1, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   286
	    ZFS_TYPE_FILESYSTEM, "on | off", "ATIME");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   287
	register_boolean(ZFS_PROP_DEVICES, "devices", 1, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   288
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "DEVICES");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   289
	register_boolean(ZFS_PROP_EXEC, "exec", 1, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   290
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "EXEC");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   291
	register_boolean(ZFS_PROP_SETUID, "setuid", 1, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   292
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "SETUID");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   293
	register_boolean(ZFS_PROP_READONLY, "readonly", 0, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   294
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "on | off", "RDONLY");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   295
	register_boolean(ZFS_PROP_ZONED, "zoned", 0, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   296
	    ZFS_TYPE_FILESYSTEM, "on | off", "ZONED");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   297
	register_boolean(ZFS_PROP_XATTR, "xattr", 1, PROP_INHERIT,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   298
	    ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT, "on | off", "XATTR");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   299
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   300
	/* hidden properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   301
	register_hidden(ZFS_PROP_CREATETXG, "createtxg", PROP_TYPE_NUMBER,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   302
	    PROP_READONLY, ZFS_TYPE_ANY, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   303
	register_hidden(ZFS_PROP_NUMCLONES, "numclones", PROP_TYPE_NUMBER,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   304
	    PROP_READONLY, ZFS_TYPE_SNAPSHOT, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   305
	register_hidden(ZFS_PROP_NAME, "name", PROP_TYPE_STRING,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   306
	    PROP_READONLY, ZFS_TYPE_ANY, "NAME");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   307
	register_hidden(ZFS_PROP_ISCSIOPTIONS, "iscsioptions", PROP_TYPE_STRING,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   308
	    PROP_INHERIT, ZFS_TYPE_VOLUME, "ISCSIOPTIONS");
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   309
	register_hidden(ZPOOL_PROP_NAME, "zpoolname", PROP_TYPE_STRING,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   310
	    PROP_READONLY, ZFS_TYPE_POOL, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   311
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   312
	/* oddball properties */
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   313
	register_impl(ZFS_PROP_CREATION, "creation", PROP_TYPE_NUMBER, 0, NULL,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   314
	    PROP_READONLY, ZFS_TYPE_ANY,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   315
	    "<date>", "CREATION", B_FALSE, B_TRUE, NULL);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   316
}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   317
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   318
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   319
/*
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   320
 * Returns TRUE if the property applies to any of the given dataset types.
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   321
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   322
int
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   323
zfs_prop_valid_for_type(zfs_prop_t prop, int types)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   324
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   325
	return ((zfs_prop_table[prop].pd_types & types) != 0);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   326
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   327
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   328
/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   329
 * Determine if the specified property is visible or not.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   330
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   331
boolean_t
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   332
zfs_prop_is_visible(zfs_prop_t prop)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   333
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   334
	if (prop < 0)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   335
		return (B_FALSE);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   336
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   337
	return (zfs_prop_table[prop].pd_visible);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   338
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   339
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   340
/*
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   341
 * A comparison function we can use to order indexes into the
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   342
 * zfs_prop_table[]
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   343
 */
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   344
static int
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   345
zfs_prop_compare(const void *arg1, const void *arg2)
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   346
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   347
	const zfs_prop_t *p1 = arg1;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   348
	const zfs_prop_t *p2 = arg2;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   349
	boolean_t p1ro, p2ro;
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   350
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   351
	p1ro = (zfs_prop_table[*p1].pd_attr == PROP_READONLY);
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   352
	p2ro = (zfs_prop_table[*p2].pd_attr == PROP_READONLY);
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   353
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   354
	if (p1ro == p2ro) {
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   355
		return (strcmp(zfs_prop_table[*p1].pd_name,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   356
		    zfs_prop_table[*p2].pd_name));
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   357
	}
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   358
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   359
	return (p1ro ? -1 : 1);
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   360
}
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   361
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   362
/*
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   363
 * Iterate over all properties, calling back into the specified function
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   364
 * for each property. We will continue to iterate until we either
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   365
 * reach the end or the callback function something other than
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   366
 * ZFS_PROP_CONT.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   367
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   368
zfs_prop_t
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   369
zfs_prop_iter_common(zfs_prop_f func, void *cb, zfs_type_t type,
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   370
    boolean_t show_all, boolean_t ordered)
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   371
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   372
	int i;
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   373
	zfs_prop_t order[ZFS_NUM_PROPS];
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   374
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   375
	for (int j = 0; j < ZFS_NUM_PROPS; j++)
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   376
		order[j] = j;
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   377
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   378
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   379
	if (ordered) {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   380
		qsort((void *)order, ZFS_NUM_PROPS, sizeof (zfs_prop_t),
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   381
		    zfs_prop_compare);
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   382
	}
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   383
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   384
	for (i = 0; i < ZFS_NUM_PROPS; i++) {
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   385
		if (zfs_prop_valid_for_type(order[i], type) &&
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   386
		    (zfs_prop_is_visible(order[i]) || show_all)) {
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   387
			if (func(order[i], cb) != ZFS_PROP_CONT)
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   388
				return (order[i]);
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   389
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   390
	}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   391
	return (ZFS_PROP_CONT);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   392
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   393
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   394
zfs_prop_t
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   395
zfs_prop_iter(zfs_prop_f func, void *cb)
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   396
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   397
	return (zfs_prop_iter_common(func, cb, ZFS_TYPE_ANY, B_FALSE, B_FALSE));
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   398
}
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   399
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   400
zfs_prop_t
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   401
zfs_prop_iter_ordered(zfs_prop_f func, void *cb)
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   402
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   403
	return (zfs_prop_iter_common(func, cb, ZFS_TYPE_ANY, B_FALSE, B_TRUE));
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   404
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   405
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   406
zpool_prop_t
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   407
zpool_prop_iter(zpool_prop_f func, void *cb)
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   408
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   409
	return (zfs_prop_iter_common(func, cb, ZFS_TYPE_POOL, B_FALSE,
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   410
	    B_FALSE));
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   411
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   412
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   413
zfs_proptype_t
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   414
zfs_prop_get_type(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   415
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   416
	return (zfs_prop_table[prop].pd_proptype);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   417
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   418
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   419
zfs_proptype_t
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   420
zpool_prop_get_type(zfs_prop_t prop)
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   421
{
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   422
	return (zfs_prop_table[prop].pd_proptype);
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   423
}
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   424
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   425
static boolean_t
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   426
propname_match(const char *p, zfs_prop_t prop, size_t len)
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   427
{
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   428
	const char *propname = zfs_prop_table[prop].pd_name;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   429
#ifndef _KERNEL
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   430
	const char *colname = zfs_prop_table[prop].pd_colname;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   431
	int c;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   432
2474
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 1638
diff changeset
   433
	if (colname == NULL)
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   434
		return (B_FALSE);
2474
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 1638
diff changeset
   435
#endif
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 1638
diff changeset
   436
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   437
	if (len == strlen(propname) &&
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   438
	    strncmp(p, propname, len) == 0)
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   439
		return (B_TRUE);
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   440
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   441
#ifndef _KERNEL
2474
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 1638
diff changeset
   442
	if (len != strlen(colname))
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   443
		return (B_FALSE);
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   444
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   445
	for (c = 0; c < len; c++)
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   446
		if (p[c] != tolower(colname[c]))
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   447
			break;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   448
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   449
	return (colname[c] == '\0');
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   450
#else
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   451
	return (B_FALSE);
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   452
#endif
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   453
}
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   454
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   455
zfs_prop_t
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   456
zfs_name_to_prop_cb(zfs_prop_t prop, void *cb_data)
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   457
{
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   458
	const char *propname = cb_data;
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   459
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   460
	if (propname_match(propname, prop, strlen(propname)))
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   461
		return (prop);
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   462
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   463
	return (ZFS_PROP_CONT);
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 3377
diff changeset
   464
}
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 914
diff changeset
   465
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   466
/*
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   467
 * Given a property name and its type, returns the corresponding property ID.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   468
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   469
zfs_prop_t
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   470
zfs_name_to_prop_common(const char *propname, zfs_type_t type)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   471
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   472
	zfs_prop_t prop;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   473
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   474
	prop = zfs_prop_iter_common(zfs_name_to_prop_cb, (void *)propname,
4597
cd30043e9dc2 6509186 "zfs set" should list properties in alphabetical order
timf
parents: 4577
diff changeset
   475
	    type, B_TRUE, B_FALSE);
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   476
	return (prop == ZFS_PROP_CONT ? ZFS_PROP_INVAL : prop);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   477
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   478
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   479
/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   480
 * Given a zfs dataset property name, returns the corresponding property ID.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   481
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   482
zfs_prop_t
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   483
zfs_name_to_prop(const char *propname)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   484
{
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   485
	return (zfs_name_to_prop_common(propname, ZFS_TYPE_ANY));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   486
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   487
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   488
/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   489
 * Given a pool property name, returns the corresponding property ID.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   490
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   491
zpool_prop_t
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   492
zpool_name_to_prop(const char *propname)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   493
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   494
	return (zfs_name_to_prop_common(propname, ZFS_TYPE_POOL));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   495
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   496
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   497
boolean_t
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   498
zfs_prop_delegatable(zfs_prop_t prop)
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   499
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   500
	prop_desc_t *pd = &zfs_prop_table[prop];
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   501
	return (pd->pd_attr != PROP_READONLY && pd->pd_types != ZFS_TYPE_POOL);
4543
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   502
}
12bb2876a62e PSARC/2006/465 ZFS Delegated Administration
marks
parents: 4451
diff changeset
   503
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   504
/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   505
 * For user property names, we allow all lowercase alphanumeric characters, plus
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   506
 * a few useful punctuation characters.
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   507
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   508
static int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   509
valid_char(char c)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   510
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   511
	return ((c >= 'a' && c <= 'z') ||
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   512
	    (c >= '0' && c <= '9') ||
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   513
	    c == '-' || c == '_' || c == '.' || c == ':');
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   514
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   515
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   516
/*
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   517
 * Returns true if this is a valid user-defined property (one with a ':').
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   518
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   519
boolean_t
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   520
zfs_prop_user(const char *name)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   521
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   522
	int i;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   523
	char c;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   524
	boolean_t foundsep = B_FALSE;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   525
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   526
	for (i = 0; i < strlen(name); i++) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   527
		c = name[i];
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   528
		if (!valid_char(c))
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   529
			return (B_FALSE);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   530
		if (c == ':')
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   531
			foundsep = B_TRUE;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   532
	}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   533
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   534
	if (!foundsep)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   535
		return (B_FALSE);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   536
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   537
	return (B_TRUE);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   538
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   539
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   540
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   541
 * Return the default value for the given property.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   542
 */
1356
e021b5e4aa0e 6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents: 1162
diff changeset
   543
const char *
e021b5e4aa0e 6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents: 1162
diff changeset
   544
zfs_prop_default_string(zfs_prop_t prop)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   545
{
1356
e021b5e4aa0e 6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents: 1162
diff changeset
   546
	return (zfs_prop_table[prop].pd_strdefault);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   547
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   548
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   549
const char *
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   550
zpool_prop_default_string(zpool_prop_t prop)
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   551
{
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   552
	return (zfs_prop_table[prop].pd_strdefault);
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   553
}
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   554
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   555
uint64_t
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   556
zfs_prop_default_numeric(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   557
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   558
	return (zfs_prop_table[prop].pd_numdefault);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   559
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   560
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   561
uint64_t
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   562
zpool_prop_default_numeric(zpool_prop_t prop)
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   563
{
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   564
	return (zfs_prop_table[prop].pd_numdefault);
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   565
}
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   566
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   567
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   568
 * Returns TRUE if the property is readonly.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   569
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   570
int
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   571
zfs_prop_readonly(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   572
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   573
	return (zfs_prop_table[prop].pd_attr == PROP_READONLY);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   574
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   575
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   576
/*
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   577
 * Given a dataset property ID, returns the corresponding name.
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   578
 * Assuming the zfs dataset property ID is valid.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   579
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   580
const char *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   581
zfs_prop_to_name(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   582
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   583
	return (zfs_prop_table[prop].pd_name);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   584
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   585
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   586
/*
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   587
 * Given a pool property ID, returns the corresponding name.
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 3912
diff changeset
   588
 * Assuming the pool property ID is valid.
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   589
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   590
const char *
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   591
zpool_prop_to_name(zpool_prop_t prop)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   592
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   593
	return (zfs_prop_table[prop].pd_name);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   594
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   595
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   596
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   597
 * Returns TRUE if the property is inheritable.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   598
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   599
int
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   600
zfs_prop_inheritable(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   601
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   602
	return (zfs_prop_table[prop].pd_attr == PROP_INHERIT);
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   603
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   604
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   605
/*
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   606
 * Tables of index types, plus functions to convert between the user view
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   607
 * (strings) and internal representation (uint64_t).
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   608
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   609
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   610
zfs_prop_string_to_index(zfs_prop_t prop, const char *string, uint64_t *index)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   611
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   612
	const zfs_index_t *table;
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   613
	int i;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   614
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   615
	if ((table = zfs_prop_table[prop].pd_table) == NULL)
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   616
		return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   617
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   618
	for (i = 0; table[i].name != NULL; i++) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   619
		if (strcmp(string, table[i].name) == 0) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   620
			*index = table[i].index;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   621
			return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   622
		}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   623
	}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   624
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   625
	return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   626
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   627
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   628
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   629
zfs_prop_index_to_string(zfs_prop_t prop, uint64_t index, const char **string)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   630
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   631
	const zfs_index_t *table;
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   632
	int i;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   633
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   634
	if ((table = zfs_prop_table[prop].pd_table) == NULL)
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   635
		return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   636
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   637
	for (i = 0; table[i].name != NULL; i++) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   638
		if (table[i].index == index) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   639
			*string = table[i].name;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   640
			return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   641
		}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   642
	}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   643
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   644
	return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   645
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   646
2717
ed589a32259d 6469385 zfs_set_prop_nvlist range checking is busted
eschrock
parents: 2676
diff changeset
   647
#ifndef _KERNEL
ed589a32259d 6469385 zfs_set_prop_nvlist range checking is busted
eschrock
parents: 2676
diff changeset
   648
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   649
/*
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   650
 * Returns a string describing the set of acceptable values for the given
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   651
 * zfs property, or NULL if it cannot be set.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   652
 */
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   653
const char *
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   654
zfs_prop_values(zfs_prop_t prop)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   655
{
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   656
	if (zfs_prop_table[prop].pd_types == ZFS_TYPE_POOL)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   657
		return (NULL);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   658
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   659
	return (zfs_prop_table[prop].pd_values);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   660
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   661
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   662
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   663
 * Returns a string describing the set of acceptable values for the given
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   664
 * zpool property, or NULL if it cannot be set.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   665
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   666
const char *
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   667
zpool_prop_values(zfs_prop_t prop)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   668
{
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   669
	if (zfs_prop_table[prop].pd_types != ZFS_TYPE_POOL)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   670
		return (NULL);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3886
diff changeset
   671
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   672
	return (zfs_prop_table[prop].pd_values);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   673
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   674
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   675
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   676
 * Returns TRUE if this property is a string type.  Note that index types
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   677
 * (compression, checksum) are treated as strings in userland, even though they
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   678
 * are stored numerically on disk.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   679
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   680
int
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   681
zfs_prop_is_string(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   682
{
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   683
	return (zfs_prop_table[prop].pd_proptype == PROP_TYPE_STRING ||
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   684
	    zfs_prop_table[prop].pd_proptype == PROP_TYPE_INDEX);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   685
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   686
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   687
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   688
 * Returns the column header for the given property.  Used only in
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   689
 * 'zfs list -o', but centralized here with the other property information.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   690
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   691
const char *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   692
zfs_prop_column_name(zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   693
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   694
	return (zfs_prop_table[prop].pd_colname);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   695
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   696
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   697
/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   698
 * Returns whether the given property should be displayed right-justified for
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   699
 * 'zfs list'.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   700
 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   701
boolean_t
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   702
zfs_prop_align_right(zfs_prop_t prop)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   703
{
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   704
	return (zfs_prop_table[prop].pd_rightalign);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   705
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   706
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   707
/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   708
 * Determines the minimum width for the column, and indicates whether it's fixed
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   709
 * or not.  Only string columns are non-fixed.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   710
 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   711
size_t
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   712
zfs_prop_width(zfs_prop_t prop, boolean_t *fixed)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   713
{
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   714
	prop_desc_t *pd = &zfs_prop_table[prop];
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   715
	const zfs_index_t *idx;
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   716
	size_t ret;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   717
	int i;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   718
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   719
	*fixed = B_TRUE;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   720
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   721
	/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   722
	 * Start with the width of the column name.
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   723
	 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   724
	ret = strlen(pd->pd_colname);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   725
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   726
	/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   727
	 * For fixed-width values, make sure the width is large enough to hold
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   728
	 * any possible value.
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   729
	 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   730
	switch (pd->pd_proptype) {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   731
	case PROP_TYPE_NUMBER:
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   732
		/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   733
		 * The maximum length of a human-readable number is 5 characters
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   734
		 * ("20.4M", for example).
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   735
		 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   736
		if (ret < 5)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   737
			ret = 5;
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   738
		/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   739
		 * 'creation' is handled specially because it's a number
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   740
		 * internally, but displayed as a date string.
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   741
		 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   742
		if (prop == ZFS_PROP_CREATION)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   743
			*fixed = B_FALSE;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   744
		break;
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   745
	case PROP_TYPE_BOOLEAN:
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   746
		/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   747
		 * The maximum length of a boolean value is 3 characters, for
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   748
		 * "off".
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   749
		 */
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   750
		if (ret < 3)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   751
			ret = 3;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   752
		break;
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   753
	case PROP_TYPE_INDEX:
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   754
		idx = zfs_prop_table[prop].pd_table;
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   755
		for (i = 0; idx[i].name != NULL; i++) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   756
			if (strlen(idx[i].name) > ret)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   757
				ret = strlen(idx[i].name);
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   758
		}
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   759
		break;
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   760
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 4597
diff changeset
   761
	case PROP_TYPE_STRING:
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   762
		*fixed = B_FALSE;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   763
		break;
866
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   764
	}
08bb8e0ae066 comments
eschrock
parents: 849
diff changeset
   765
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2597
diff changeset
   766
	return (ret);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   767
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   768
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   769
#endif