Print this page
4101 metaslab_debug should allow for fine-grained control
4102 space_maps should store more information about themselves
4103 space map object blocksize should be increased
4104 ::spa_space no longer works
4105 removing a mirrored log device results in a leaked object
4106 asynchronously load metaslab
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Sebastien Roy <seb@delphix.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/metaslab.h
          +++ new/usr/src/uts/common/fs/zfs/sys/metaslab.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) 2012 by Delphix. All rights reserved.
       23 + * Copyright (c) 2013 by Delphix. All rights reserved.
  24   24   */
  25   25  
  26   26  #ifndef _SYS_METASLAB_H
  27   27  #define _SYS_METASLAB_H
  28   28  
  29   29  #include <sys/spa.h>
  30   30  #include <sys/space_map.h>
  31   31  #include <sys/txg.h>
  32   32  #include <sys/zio.h>
  33   33  #include <sys/avl.h>
  34   34  
  35   35  #ifdef  __cplusplus
  36   36  extern "C" {
  37   37  #endif
  38   38  
  39      -extern space_map_ops_t *zfs_metaslab_ops;
       39 +typedef struct metaslab_ops {
       40 +        uint64_t (*msop_alloc)(metaslab_t *msp, uint64_t size);
       41 +        boolean_t (*msop_fragmented)(metaslab_t *msp);
       42 +} metaslab_ops_t;
  40   43  
  41      -extern metaslab_t *metaslab_init(metaslab_group_t *mg, space_map_obj_t *smo,
  42      -    uint64_t start, uint64_t size, uint64_t txg);
  43      -extern void metaslab_fini(metaslab_t *msp);
  44      -extern void metaslab_sync(metaslab_t *msp, uint64_t txg);
  45      -extern void metaslab_sync_done(metaslab_t *msp, uint64_t txg);
  46      -extern void metaslab_sync_reassess(metaslab_group_t *mg);
       44 +extern metaslab_ops_t *zfs_metaslab_ops;
  47   45  
       46 +metaslab_t *metaslab_init(metaslab_group_t *mg, uint64_t id,
       47 +    uint64_t object, uint64_t txg);
       48 +void metaslab_fini(metaslab_t *msp);
       49 +
       50 +void metaslab_load_wait(metaslab_t *msp);
       51 +int metaslab_load(metaslab_t *msp);
       52 +void metaslab_unload(metaslab_t *msp);
       53 +
       54 +void metaslab_sync(metaslab_t *msp, uint64_t txg);
       55 +void metaslab_sync_done(metaslab_t *msp, uint64_t txg);
       56 +void metaslab_sync_reassess(metaslab_group_t *mg);
       57 +uint64_t metaslab_block_maxsize(metaslab_t *msp);
       58 +
  48   59  #define METASLAB_HINTBP_FAVOR   0x0
  49   60  #define METASLAB_HINTBP_AVOID   0x1
  50   61  #define METASLAB_GANG_HEADER    0x2
  51   62  #define METASLAB_GANG_CHILD     0x4
  52   63  #define METASLAB_GANG_AVOID     0x8
  53   64  
  54      -extern int metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
       65 +int metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
  55   66      blkptr_t *bp, int ncopies, uint64_t txg, blkptr_t *hintbp, int flags);
  56      -extern void metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg,
  57      -    boolean_t now);
  58      -extern int metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg);
  59      -extern void metaslab_check_free(spa_t *spa, const blkptr_t *bp);
       67 +void metaslab_free(spa_t *spa, const blkptr_t *bp, uint64_t txg, boolean_t now);
       68 +int metaslab_claim(spa_t *spa, const blkptr_t *bp, uint64_t txg);
       69 +void metaslab_check_free(spa_t *spa, const blkptr_t *bp);
  60   70  
  61      -extern metaslab_class_t *metaslab_class_create(spa_t *spa,
  62      -    space_map_ops_t *ops);
  63      -extern void metaslab_class_destroy(metaslab_class_t *mc);
  64      -extern int metaslab_class_validate(metaslab_class_t *mc);
       71 +metaslab_class_t *metaslab_class_create(spa_t *spa, metaslab_ops_t *ops);
       72 +void metaslab_class_destroy(metaslab_class_t *mc);
       73 +int metaslab_class_validate(metaslab_class_t *mc);
  65   74  
  66      -extern void metaslab_class_space_update(metaslab_class_t *mc,
       75 +void metaslab_class_space_update(metaslab_class_t *mc,
  67   76      int64_t alloc_delta, int64_t defer_delta,
  68   77      int64_t space_delta, int64_t dspace_delta);
  69      -extern uint64_t metaslab_class_get_alloc(metaslab_class_t *mc);
  70      -extern uint64_t metaslab_class_get_space(metaslab_class_t *mc);
  71      -extern uint64_t metaslab_class_get_dspace(metaslab_class_t *mc);
  72      -extern uint64_t metaslab_class_get_deferred(metaslab_class_t *mc);
       78 +uint64_t metaslab_class_get_alloc(metaslab_class_t *mc);
       79 +uint64_t metaslab_class_get_space(metaslab_class_t *mc);
       80 +uint64_t metaslab_class_get_dspace(metaslab_class_t *mc);
       81 +uint64_t metaslab_class_get_deferred(metaslab_class_t *mc);
  73   82  
  74      -extern metaslab_group_t *metaslab_group_create(metaslab_class_t *mc,
  75      -    vdev_t *vd);
  76      -extern void metaslab_group_destroy(metaslab_group_t *mg);
  77      -extern void metaslab_group_activate(metaslab_group_t *mg);
  78      -extern void metaslab_group_passivate(metaslab_group_t *mg);
       83 +metaslab_group_t *metaslab_group_create(metaslab_class_t *mc, vdev_t *vd);
       84 +void metaslab_group_destroy(metaslab_group_t *mg);
       85 +void metaslab_group_activate(metaslab_group_t *mg);
       86 +void metaslab_group_passivate(metaslab_group_t *mg);
  79   87  
  80   88  #ifdef  __cplusplus
  81   89  }
  82   90  #endif
  83   91  
  84   92  #endif  /* _SYS_METASLAB_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX