Print this page
5056 ZFS deadlock on db_mtx and dn_holds
Reviewed by: Will Andrews <willa@spectralogic.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/sys/spa_impl.h
          +++ new/usr/src/uts/common/fs/zfs/sys/spa_impl.h
↓ open down ↓ 14 lines elided ↑ open up ↑
  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, 2014 by Delphix. All rights reserved.
  24   24   * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
       25 + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
  25   26   */
  26   27  
  27   28  #ifndef _SYS_SPA_IMPL_H
  28   29  #define _SYS_SPA_IMPL_H
  29   30  
  30   31  #include <sys/spa.h>
  31   32  #include <sys/vdev.h>
  32   33  #include <sys/metaslab.h>
  33   34  #include <sys/dmu.h>
  34   35  #include <sys/dsl_pool.h>
↓ open down ↓ 102 lines elided ↑ open up ↑
 137  138          boolean_t       spa_is_initializing;    /* true while opening pool */
 138  139          metaslab_class_t *spa_normal_class;     /* normal data class */
 139  140          metaslab_class_t *spa_log_class;        /* intent log data class */
 140  141          uint64_t        spa_first_txg;          /* first txg after spa_open() */
 141  142          uint64_t        spa_final_txg;          /* txg of export/destroy */
 142  143          uint64_t        spa_freeze_txg;         /* freeze pool at this txg */
 143  144          uint64_t        spa_load_max_txg;       /* best initial ub_txg */
 144  145          uint64_t        spa_claim_max_txg;      /* highest claimed birth txg */
 145  146          timespec_t      spa_loaded_ts;          /* 1st successful open time */
 146  147          objset_t        *spa_meta_objset;       /* copy of dp->dp_meta_objset */
      148 +        kmutex_t        spa_evicting_os_lock;   /* Evicting objset list lock */
      149 +        list_t          spa_evicting_os_list;   /* Objsets being evicted. */
      150 +        kcondvar_t      spa_evicting_os_cv;     /* Objset Eviction Completion */
 147  151          txg_list_t      spa_vdev_txg_list;      /* per-txg dirty vdev list */
 148  152          vdev_t          *spa_root_vdev;         /* top-level vdev container */
 149  153          uint64_t        spa_config_guid;        /* config pool guid */
 150  154          uint64_t        spa_load_guid;          /* spa_load initialized guid */
 151  155          uint64_t        spa_last_synced_guid;   /* last synced guid */
 152  156          list_t          spa_config_dirty_list;  /* vdevs with dirty config */
 153  157          list_t          spa_state_dirty_list;   /* vdevs with dirty state */
 154  158          spa_aux_vdev_t  spa_spares;             /* hot spares */
 155  159          spa_aux_vdev_t  spa_l2cache;            /* L2ARC cache devices */
 156  160          nvlist_t        *spa_label_features;    /* Features for reading MOS */
↓ open down ↓ 122 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX