Print this page
    
1693 persistent 'comment' field for a zpool
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/common/zfs/zpool_prop.c
          +++ new/usr/src/common/zfs/zpool_prop.c
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  
    | 
      ↓ open down ↓ | 
    12 lines elided | 
    
      ↑ open up ↑ | 
  
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
       23 + * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
       24 + * Copyright (c) 2011 by Delphix. All rights reserved.
  23   25   */
  24   26  
  25   27  #include <sys/zio.h>
  26   28  #include <sys/spa.h>
  27   29  #include <sys/zfs_acl.h>
  28   30  #include <sys/zfs_ioctl.h>
  29   31  #include <sys/fs/zfs.h>
  30   32  
  31   33  #include "zfs_prop.h"
  32   34  
  33   35  #if defined(_KERNEL)
  34   36  #include <sys/systm.h>
  35   37  #else
  36   38  #include <stdlib.h>
  37   39  #include <string.h>
  38   40  #include <ctype.h>
  39   41  #endif
  40   42  
  41   43  static zprop_desc_t zpool_prop_table[ZPOOL_NUM_PROPS];
  42   44  
  43   45  zprop_desc_t *
  44   46  zpool_prop_get_table(void)
  45   47  {
  46   48          return (zpool_prop_table);
  47   49  }
  48   50  
  49   51  void
  50   52  zpool_prop_init(void)
  51   53  {
  52   54          static zprop_index_t boolean_table[] = {
  53   55                  { "off",        0},
  54   56                  { "on",         1},
  55   57                  { NULL }
  56   58          };
  57   59  
  58   60          static zprop_index_t failuremode_table[] = {
  59   61                  { "wait",       ZIO_FAILURE_MODE_WAIT },
  60   62                  { "continue",   ZIO_FAILURE_MODE_CONTINUE },
  61   63                  { "panic",      ZIO_FAILURE_MODE_PANIC },
  
    | 
      ↓ open down ↓ | 
    29 lines elided | 
    
      ↑ open up ↑ | 
  
  62   64                  { NULL }
  63   65          };
  64   66  
  65   67          /* string properties */
  66   68          zprop_register_string(ZPOOL_PROP_ALTROOT, "altroot", NULL, PROP_DEFAULT,
  67   69              ZFS_TYPE_POOL, "<path>", "ALTROOT");
  68   70          zprop_register_string(ZPOOL_PROP_BOOTFS, "bootfs", NULL, PROP_DEFAULT,
  69   71              ZFS_TYPE_POOL, "<filesystem>", "BOOTFS");
  70   72          zprop_register_string(ZPOOL_PROP_CACHEFILE, "cachefile", NULL,
  71   73              PROP_DEFAULT, ZFS_TYPE_POOL, "<file> | none", "CACHEFILE");
       74 +        zprop_register_string(ZPOOL_PROP_COMMENT, "comment", NULL,
       75 +            PROP_DEFAULT, ZFS_TYPE_POOL, "<comment-string>", "COMMENT");
  72   76  
  73   77          /* readonly number properties */
  74   78          zprop_register_number(ZPOOL_PROP_SIZE, "size", 0, PROP_READONLY,
  75   79              ZFS_TYPE_POOL, "<size>", "SIZE");
  76   80          zprop_register_number(ZPOOL_PROP_FREE, "free", 0, PROP_READONLY,
  77   81              ZFS_TYPE_POOL, "<size>", "FREE");
  78   82          zprop_register_number(ZPOOL_PROP_ALLOCATED, "allocated", 0,
  79   83              PROP_READONLY, ZFS_TYPE_POOL, "<size>", "ALLOC");
  80   84          zprop_register_number(ZPOOL_PROP_CAPACITY, "capacity", 0, PROP_READONLY,
  81   85              ZFS_TYPE_POOL, "<size>", "CAP");
  82   86          zprop_register_number(ZPOOL_PROP_GUID, "guid", 0, PROP_READONLY,
  83   87              ZFS_TYPE_POOL, "<guid>", "GUID");
  84   88          zprop_register_number(ZPOOL_PROP_HEALTH, "health", 0, PROP_READONLY,
  85   89              ZFS_TYPE_POOL, "<state>", "HEALTH");
  86   90          zprop_register_number(ZPOOL_PROP_DEDUPRATIO, "dedupratio", 0,
  87   91              PROP_READONLY, ZFS_TYPE_POOL, "<1.00x or higher if deduped>",
  88   92              "DEDUP");
  89   93  
  90   94          /* default number properties */
  91   95          zprop_register_number(ZPOOL_PROP_VERSION, "version", SPA_VERSION,
  92   96              PROP_DEFAULT, ZFS_TYPE_POOL, "<version>", "VERSION");
  93   97          zprop_register_number(ZPOOL_PROP_DEDUPDITTO, "dedupditto", 0,
  94   98              PROP_DEFAULT, ZFS_TYPE_POOL, "<threshold (min 100)>", "DEDUPDITTO");
  95   99  
  96  100          /* default index (boolean) properties */
  97  101          zprop_register_index(ZPOOL_PROP_DELEGATION, "delegation", 1,
  98  102              PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "DELEGATION",
  99  103              boolean_table);
 100  104          zprop_register_index(ZPOOL_PROP_AUTOREPLACE, "autoreplace", 0,
 101  105              PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "REPLACE", boolean_table);
 102  106          zprop_register_index(ZPOOL_PROP_LISTSNAPS, "listsnapshots", 0,
 103  107              PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "LISTSNAPS",
 104  108              boolean_table);
 105  109          zprop_register_index(ZPOOL_PROP_AUTOEXPAND, "autoexpand", 0,
 106  110              PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "EXPAND", boolean_table);
 107  111          zprop_register_index(ZPOOL_PROP_READONLY, "readonly", 0,
 108  112              PROP_DEFAULT, ZFS_TYPE_POOL, "on | off", "RDONLY", boolean_table);
 109  113  
 110  114          /* default index properties */
 111  115          zprop_register_index(ZPOOL_PROP_FAILUREMODE, "failmode",
 112  116              ZIO_FAILURE_MODE_WAIT, PROP_DEFAULT, ZFS_TYPE_POOL,
 113  117              "wait | continue | panic", "FAILMODE", failuremode_table);
 114  118  
 115  119          /* hidden properties */
 116  120          zprop_register_hidden(ZPOOL_PROP_NAME, "name", PROP_TYPE_STRING,
 117  121              PROP_READONLY, ZFS_TYPE_POOL, "NAME");
 118  122  }
 119  123  
 120  124  /*
 121  125   * Given a property name and its type, returns the corresponding property ID.
 122  126   */
 123  127  zpool_prop_t
 124  128  zpool_name_to_prop(const char *propname)
 125  129  {
 126  130          return (zprop_name_to_prop(propname, ZFS_TYPE_POOL));
 127  131  }
 128  132  
 129  133  /*
 130  134   * Given a pool property ID, returns the corresponding name.
 131  135   * Assuming the pool propety ID is valid.
 132  136   */
 133  137  const char *
 134  138  zpool_prop_to_name(zpool_prop_t prop)
 135  139  {
 136  140          return (zpool_prop_table[prop].pd_name);
 137  141  }
 138  142  
 139  143  zprop_type_t
 140  144  zpool_prop_get_type(zpool_prop_t prop)
 141  145  {
 142  146          return (zpool_prop_table[prop].pd_proptype);
 143  147  }
 144  148  
 145  149  boolean_t
 146  150  zpool_prop_readonly(zpool_prop_t prop)
 147  151  {
 148  152          return (zpool_prop_table[prop].pd_attr == PROP_READONLY);
 149  153  }
 150  154  
 151  155  const char *
 152  156  zpool_prop_default_string(zpool_prop_t prop)
 153  157  {
 154  158          return (zpool_prop_table[prop].pd_strdefault);
 155  159  }
 156  160  
 157  161  uint64_t
 158  162  zpool_prop_default_numeric(zpool_prop_t prop)
 159  163  {
 160  164          return (zpool_prop_table[prop].pd_numdefault);
 161  165  }
 162  166  
 163  167  int
 164  168  zpool_prop_string_to_index(zpool_prop_t prop, const char *string,
 165  169      uint64_t *index)
 166  170  {
 167  171          return (zprop_string_to_index(prop, string, index, ZFS_TYPE_POOL));
 168  172  }
 169  173  
 170  174  int
 171  175  zpool_prop_index_to_string(zpool_prop_t prop, uint64_t index,
 172  176      const char **string)
 173  177  {
 174  178          return (zprop_index_to_string(prop, index, string, ZFS_TYPE_POOL));
 175  179  }
 176  180  
 177  181  uint64_t
 178  182  zpool_prop_random_value(zpool_prop_t prop, uint64_t seed)
 179  183  {
 180  184          return (zprop_random_value(prop, seed, ZFS_TYPE_POOL));
 181  185  }
 182  186  
 183  187  #ifndef _KERNEL
 184  188  
 185  189  const char *
 186  190  zpool_prop_values(zpool_prop_t prop)
 187  191  {
 188  192          return (zpool_prop_table[prop].pd_values);
 189  193  }
 190  194  
 191  195  const char *
 192  196  zpool_prop_column_name(zpool_prop_t prop)
 193  197  {
 194  198          return (zpool_prop_table[prop].pd_colname);
 195  199  }
 196  200  
 197  201  boolean_t
 198  202  zpool_prop_align_right(zpool_prop_t prop)
 199  203  {
 200  204          return (zpool_prop_table[prop].pd_rightalign);
 201  205  }
 202  206  #endif
  
    | 
      ↓ open down ↓ | 
    121 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX