Print this page
4045 zfs write throttle & i/o scheduler performance work
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Christopher Siden <christopher.siden@delphix.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/dbuf.h
          +++ new/usr/src/uts/common/fs/zfs/sys/dbuf.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   * Copyright (c) 2013 by Saso Kiselkov. All rights reserved.
  25   25   */
  26   26  
  27   27  #ifndef _SYS_DBUF_H
  28   28  #define _SYS_DBUF_H
  29   29  
  30   30  #include <sys/dmu.h>
  31   31  #include <sys/spa.h>
  32   32  #include <sys/txg.h>
  33   33  #include <sys/zio.h>
↓ open down ↓ 71 lines elided ↑ open up ↑
 105  105  
 106  106          /* pointer back to our dbuf */
 107  107          struct dmu_buf_impl *dr_dbuf;
 108  108  
 109  109          /* pointer to next dirty record */
 110  110          struct dbuf_dirty_record *dr_next;
 111  111  
 112  112          /* pointer to parent dirty record */
 113  113          struct dbuf_dirty_record *dr_parent;
 114  114  
      115 +        /* How much space was changed to dsl_pool_dirty_space() for this? */
      116 +        unsigned int dr_accounted;
      117 +
 115  118          union dirty_types {
 116  119                  struct dirty_indirect {
 117  120  
 118  121                          /* protect access to list */
 119  122                          kmutex_t dr_mtx;
 120  123  
 121  124                          /* Our list of dirty children */
 122  125                          list_t dr_children;
 123  126                  } di;
 124  127                  struct dirty_leaf {
↓ open down ↓ 122 lines elided ↑ open up ↑
 247  250  void dbuf_spill_hold(struct dnode *dn, dmu_buf_impl_t **dbp, void *tag);
 248  251  
 249  252  void dbuf_rm_spill(struct dnode *dn, dmu_tx_t *tx);
 250  253  
 251  254  dmu_buf_impl_t *dbuf_hold(struct dnode *dn, uint64_t blkid, void *tag);
 252  255  dmu_buf_impl_t *dbuf_hold_level(struct dnode *dn, int level, uint64_t blkid,
 253  256      void *tag);
 254  257  int dbuf_hold_impl(struct dnode *dn, uint8_t level, uint64_t blkid, int create,
 255  258      void *tag, dmu_buf_impl_t **dbp);
 256  259  
 257      -void dbuf_prefetch(struct dnode *dn, uint64_t blkid);
      260 +void dbuf_prefetch(struct dnode *dn, uint64_t blkid, zio_priority_t prio);
 258  261  
 259  262  void dbuf_add_ref(dmu_buf_impl_t *db, void *tag);
 260  263  uint64_t dbuf_refcount(dmu_buf_impl_t *db);
 261  264  
 262  265  void dbuf_rele(dmu_buf_impl_t *db, void *tag);
 263  266  void dbuf_rele_and_unlock(dmu_buf_impl_t *db, void *tag);
 264  267  
 265  268  dmu_buf_impl_t *dbuf_find(struct dnode *dn, uint8_t level, uint64_t blkid);
 266  269  
 267  270  int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags);
↓ open down ↓ 111 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX