Print this page
    
10592 misc. metaslab and vdev related ZoL bug fixes
Portions contributed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed by: Giuseppe Di Natale <guss80@gmail.com>
Reviewed by: George Melikov <mail@gmelikov.ru>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed by: Tony Hutter <hutter2@llnl.gov>
Reviewed by: Kody Kantor <kody.kantor@joyent.com>
Approved by: Dan McDonald <danmcd@joyent.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
   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   *
  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   23   * Copyright (c) 2011, 2018 by Delphix. All rights reserved.
  24   24   * Copyright (c) 2017, Intel Corporation.
  25   25   */
  26   26  
  27   27  #ifndef _SYS_METASLAB_H
  28   28  #define _SYS_METASLAB_H
  29   29  
  30   30  #include <sys/spa.h>
  31   31  #include <sys/space_map.h>
  32   32  #include <sys/txg.h>
  33   33  #include <sys/zio.h>
  34   34  #include <sys/avl.h>
  35   35  
  36   36  #ifdef  __cplusplus
  37   37  extern "C" {
  38   38  #endif
  39   39  
  40   40  
  41   41  typedef struct metaslab_ops {
  42   42          uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
  43   43  } metaslab_ops_t;
  44   44  
  
    | 
      ↓ open down ↓ | 
    44 lines elided | 
    
      ↑ open up ↑ | 
  
  45   45  
  46   46  extern metaslab_ops_t *zfs_metaslab_ops;
  47   47  
  48   48  int metaslab_init(metaslab_group_t *, uint64_t, uint64_t, uint64_t,
  49   49      metaslab_t **);
  50   50  void metaslab_fini(metaslab_t *);
  51   51  
  52   52  int metaslab_load(metaslab_t *);
  53   53  void metaslab_unload(metaslab_t *);
  54   54  
       55 +uint64_t metaslab_allocated_space(metaslab_t *);
       56 +
  55   57  void metaslab_sync(metaslab_t *, uint64_t);
  56   58  void metaslab_sync_done(metaslab_t *, uint64_t);
  57   59  void metaslab_sync_reassess(metaslab_group_t *);
  58   60  uint64_t metaslab_block_maxsize(metaslab_t *);
  59   61  
  60   62  /*
  61   63   * metaslab alloc flags
  62   64   */
  63   65  #define METASLAB_HINTBP_FAVOR           0x0
  64   66  #define METASLAB_HINTBP_AVOID           0x1
  65   67  #define METASLAB_GANG_HEADER            0x2
  66   68  #define METASLAB_GANG_CHILD             0x4
  67   69  #define METASLAB_ASYNC_ALLOC            0x8
  68   70  #define METASLAB_DONT_THROTTLE          0x10
  69   71  #define METASLAB_MUST_RESERVE           0x20
  70   72  #define METASLAB_FASTWRITE              0x40
  71   73  
  72   74  int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
  73   75      blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
  74   76      int);
  75   77  int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
  76   78      dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *, int);
  77   79  void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
  78   80  void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, boolean_t);
  79   81  void metaslab_free_dva(spa_t *, const dva_t *, boolean_t);
  80   82  void metaslab_free_impl_cb(uint64_t, vdev_t *, uint64_t, uint64_t, void *);
  81   83  void metaslab_unalloc_dva(spa_t *, const dva_t *, uint64_t);
  82   84  int metaslab_claim(spa_t *, const blkptr_t *, uint64_t);
  83   85  int metaslab_claim_impl(vdev_t *, uint64_t, uint64_t, uint64_t);
  84   86  void metaslab_check_free(spa_t *, const blkptr_t *);
  85   87  
  86   88  void metaslab_alloc_trace_init(void);
  87   89  void metaslab_alloc_trace_fini(void);
  88   90  void metaslab_trace_init(zio_alloc_list_t *);
  89   91  void metaslab_trace_fini(zio_alloc_list_t *);
  90   92  
  91   93  metaslab_class_t *metaslab_class_create(spa_t *, metaslab_ops_t *);
  92   94  void metaslab_class_destroy(metaslab_class_t *);
  93   95  int metaslab_class_validate(metaslab_class_t *);
  94   96  void metaslab_class_histogram_verify(metaslab_class_t *);
  95   97  uint64_t metaslab_class_fragmentation(metaslab_class_t *);
  96   98  uint64_t metaslab_class_expandable_space(metaslab_class_t *);
  97   99  boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, int,
  98  100      zio_t *, int);
  99  101  void metaslab_class_throttle_unreserve(metaslab_class_t *, int, int, zio_t *);
 100  102  
 101  103  uint64_t metaslab_class_get_alloc(metaslab_class_t *);
 102  104  uint64_t metaslab_class_get_space(metaslab_class_t *);
 103  105  uint64_t metaslab_class_get_dspace(metaslab_class_t *);
 104  106  uint64_t metaslab_class_get_deferred(metaslab_class_t *);
 105  107  
 106  108  metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *, int);
 107  109  void metaslab_group_destroy(metaslab_group_t *);
  
    | 
      ↓ open down ↓ | 
    43 lines elided | 
    
      ↑ open up ↑ | 
  
 108  110  void metaslab_group_activate(metaslab_group_t *);
 109  111  void metaslab_group_passivate(metaslab_group_t *);
 110  112  boolean_t metaslab_group_initialized(metaslab_group_t *);
 111  113  uint64_t metaslab_group_get_space(metaslab_group_t *);
 112  114  void metaslab_group_histogram_verify(metaslab_group_t *);
 113  115  uint64_t metaslab_group_fragmentation(metaslab_group_t *);
 114  116  void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
 115  117  void metaslab_group_alloc_decrement(spa_t *, uint64_t, void *, int, int,
 116  118      boolean_t);
 117  119  void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, void *, int);
      120 +void metaslab_recalculate_weight_and_sort(metaslab_t *);
 118  121  
 119  122  #ifdef  __cplusplus
 120  123  }
 121  124  #endif
 122  125  
 123  126  #endif  /* _SYS_METASLAB_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX