Print this page
2619 asynchronous destruction of ZFS file systems
2747 SPA versioning with zfs feature flags
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <gwilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/spa.h
          +++ new/usr/src/uts/common/fs/zfs/sys/spa.h
↓ 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) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23      - * Copyright (c) 2011 by Delphix. All rights reserved.
       23 + * Copyright (c) 2012 by Delphix. All rights reserved.
  24   24   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  25   25   */
  26   26  
  27   27  #ifndef _SYS_SPA_H
  28   28  #define _SYS_SPA_H
  29   29  
  30   30  #include <sys/avl.h>
  31   31  #include <sys/zfs_context.h>
  32   32  #include <sys/nvpair.h>
  33   33  #include <sys/sysmacros.h>
↓ open down ↓ 53 lines elided ↑ open up ↑
  87   87  #define SPA_MINBLOCKSHIFT       9
  88   88  #define SPA_MAXBLOCKSHIFT       17
  89   89  #define SPA_MINBLOCKSIZE        (1ULL << SPA_MINBLOCKSHIFT)
  90   90  #define SPA_MAXBLOCKSIZE        (1ULL << SPA_MAXBLOCKSHIFT)
  91   91  
  92   92  #define SPA_BLOCKSIZES          (SPA_MAXBLOCKSHIFT - SPA_MINBLOCKSHIFT + 1)
  93   93  
  94   94  /*
  95   95   * Size of block to hold the configuration data (a packed nvlist)
  96   96   */
  97      -#define SPA_CONFIG_BLOCKSIZE    (1 << 14)
       97 +#define SPA_CONFIG_BLOCKSIZE    (1ULL << 14)
  98   98  
  99   99  /*
 100  100   * The DVA size encodings for LSIZE and PSIZE support blocks up to 32MB.
 101  101   * The ASIZE encoding should be at least 64 times larger (6 more bits)
 102  102   * to support up to 4-way RAID-Z mirror mode with worst-case gang block
 103  103   * overhead, three DVAs per bp, plus one more bit in case we do anything
 104  104   * else that expands the ASIZE.
 105  105   */
 106  106  #define SPA_LSIZEBITS           16      /* LSIZE up to 32M (2^16 * 512) */
 107  107  #define SPA_PSIZEBITS           16      /* PSIZE up to 32M (2^16 * 512) */
↓ open down ↓ 147 lines elided ↑ open up ↑
 255  255  {                                               \
 256  256          (bp)->blk_birth = (logical);            \
 257  257          (bp)->blk_phys_birth = ((logical) == (physical) ? 0 : (physical)); \
 258  258  }
 259  259  
 260  260  #define BP_GET_ASIZE(bp)        \
 261  261          (DVA_GET_ASIZE(&(bp)->blk_dva[0]) + DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \
 262  262                  DVA_GET_ASIZE(&(bp)->blk_dva[2]))
 263  263  
 264  264  #define BP_GET_UCSIZE(bp) \
 265      -        ((BP_GET_LEVEL(bp) > 0 || dmu_ot[BP_GET_TYPE(bp)].ot_metadata) ? \
      265 +        ((BP_GET_LEVEL(bp) > 0 || DMU_OT_IS_METADATA(BP_GET_TYPE(bp))) ? \
 266  266          BP_GET_PSIZE(bp) : BP_GET_LSIZE(bp))
 267  267  
 268  268  #define BP_GET_NDVAS(bp)        \
 269  269          (!!DVA_GET_ASIZE(&(bp)->blk_dva[0]) + \
 270  270          !!DVA_GET_ASIZE(&(bp)->blk_dva[1]) + \
 271  271          !!DVA_GET_ASIZE(&(bp)->blk_dva[2]))
 272  272  
 273  273  #define BP_COUNT_GANG(bp)       \
 274  274          (DVA_GET_GANG(&(bp)->blk_dva[0]) + \
 275  275          DVA_GET_GANG(&(bp)->blk_dva[1]) + \
↓ open down ↓ 120 lines elided ↑ open up ↑
 396  396                      (u_longlong_t)bp->blk_cksum.zc_word[1],             \
 397  397                      (u_longlong_t)bp->blk_cksum.zc_word[2],             \
 398  398                      (u_longlong_t)bp->blk_cksum.zc_word[3]);            \
 399  399          }                                                               \
 400  400          ASSERT(len < size);                                             \
 401  401  }
 402  402  
 403  403  #include <sys/dmu.h>
 404  404  
 405  405  #define BP_GET_BUFC_TYPE(bp)                                            \
 406      -        (((BP_GET_LEVEL(bp) > 0) || (dmu_ot[BP_GET_TYPE(bp)].ot_metadata)) ? \
 407      -        ARC_BUFC_METADATA : ARC_BUFC_DATA);
      406 +        (((BP_GET_LEVEL(bp) > 0) || (DMU_OT_IS_METADATA(BP_GET_TYPE(bp)))) ? \
      407 +        ARC_BUFC_METADATA : ARC_BUFC_DATA)
 408  408  
 409  409  typedef enum spa_import_type {
 410  410          SPA_IMPORT_EXISTING,
 411  411          SPA_IMPORT_ASSEMBLE
 412  412  } spa_import_type_t;
 413  413  
 414  414  /* state manipulation functions */
 415  415  extern int spa_open(const char *pool, spa_t **, void *tag);
 416  416  extern int spa_open_rewind(const char *pool, spa_t **, void *tag,
 417  417      nvlist_t *policy, nvlist_t **config);
 418      -extern int spa_get_stats(const char *pool, nvlist_t **config,
 419      -    char *altroot, size_t buflen);
      418 +extern int spa_get_stats(const char *pool, nvlist_t **config, char *altroot,
      419 +    size_t buflen);
 420  420  extern int spa_create(const char *pool, nvlist_t *config, nvlist_t *props,
 421  421      const char *history_str, nvlist_t *zplprops);
 422  422  extern int spa_import_rootpool(char *devpath, char *devid);
 423  423  extern int spa_import(const char *pool, nvlist_t *config, nvlist_t *props,
 424  424      uint64_t flags);
 425  425  extern nvlist_t *spa_tryimport(nvlist_t *tryconfig);
 426  426  extern int spa_destroy(char *pool);
 427  427  extern int spa_export(char *pool, nvlist_t **oldconfig, boolean_t force,
 428  428      boolean_t hardforce);
 429  429  extern int spa_reset(char *pool);
↓ open down ↓ 136 lines elided ↑ open up ↑
 566  566  extern spa_log_state_t spa_get_log_state(spa_t *spa);
 567  567  extern void spa_set_log_state(spa_t *spa, spa_log_state_t state);
 568  568  extern int spa_offline_log(spa_t *spa);
 569  569  
 570  570  /* Log claim callback */
 571  571  extern void spa_claim_notify(zio_t *zio);
 572  572  
 573  573  /* Accessor functions */
 574  574  extern boolean_t spa_shutting_down(spa_t *spa);
 575  575  extern struct dsl_pool *spa_get_dsl(spa_t *spa);
      576 +extern boolean_t spa_is_initializing(spa_t *spa);
 576  577  extern blkptr_t *spa_get_rootblkptr(spa_t *spa);
 577  578  extern void spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp);
 578  579  extern void spa_altroot(spa_t *, char *, size_t);
 579  580  extern int spa_sync_pass(spa_t *spa);
 580  581  extern char *spa_name(spa_t *spa);
 581  582  extern uint64_t spa_guid(spa_t *spa);
 582  583  extern uint64_t spa_load_guid(spa_t *spa);
 583  584  extern uint64_t spa_last_synced_txg(spa_t *spa);
 584  585  extern uint64_t spa_first_txg(spa_t *spa);
 585  586  extern uint64_t spa_syncing_txg(spa_t *spa);
↓ open down ↓ 11 lines elided ↑ open up ↑
 597  598  extern int spa_max_replication(spa_t *spa);
 598  599  extern int spa_prev_software_version(spa_t *spa);
 599  600  extern int spa_busy(void);
 600  601  extern uint8_t spa_get_failmode(spa_t *spa);
 601  602  extern boolean_t spa_suspended(spa_t *spa);
 602  603  extern uint64_t spa_bootfs(spa_t *spa);
 603  604  extern uint64_t spa_delegation(spa_t *spa);
 604  605  extern objset_t *spa_meta_objset(spa_t *spa);
 605  606  
 606  607  /* Miscellaneous support routines */
      608 +extern void spa_activate_mos_feature(spa_t *spa, const char *feature);
      609 +extern void spa_deactivate_mos_feature(spa_t *spa, const char *feature);
 607  610  extern int spa_rename(const char *oldname, const char *newname);
 608  611  extern spa_t *spa_by_guid(uint64_t pool_guid, uint64_t device_guid);
 609  612  extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid);
 610  613  extern char *spa_strdup(const char *);
 611  614  extern void spa_strfree(char *);
 612  615  extern uint64_t spa_get_random(uint64_t range);
 613  616  extern uint64_t spa_generate_guid(spa_t *spa);
 614  617  extern void sprintf_blkptr(char *buf, const blkptr_t *bp);
 615  618  extern void spa_freeze(spa_t *spa);
 616  619  extern int spa_change_guid(spa_t *spa);
↓ open down ↓ 101 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX