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/dsl_deadlist.c
          +++ new/usr/src/uts/common/fs/zfs/dsl_deadlist.c
↓ open down ↓ 13 lines elided ↑ open up ↑
  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) 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright (c) 2012 by Delphix. All rights reserved.
       24 + * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
  24   25   */
  25   26  
  26   27  #include <sys/dsl_dataset.h>
  27   28  #include <sys/dmu.h>
  28   29  #include <sys/refcount.h>
  29   30  #include <sys/zap.h>
  30   31  #include <sys/zfs_context.h>
  31   32  #include <sys/dsl_pool.h>
  32   33  
  33   34  /*
↓ open down ↓ 78 lines elided ↑ open up ↑
 112  113          dl->dl_phys = dl->dl_dbuf->db_data;
 113  114          dl->dl_havetree = B_FALSE;
 114  115  }
 115  116  
 116  117  void
 117  118  dsl_deadlist_close(dsl_deadlist_t *dl)
 118  119  {
 119  120          void *cookie = NULL;
 120  121          dsl_deadlist_entry_t *dle;
 121  122  
      123 +        dl->dl_os = NULL;
      124 +
 122  125          if (dl->dl_oldfmt) {
 123  126                  dl->dl_oldfmt = B_FALSE;
 124  127                  bpobj_close(&dl->dl_bpobj);
 125  128                  return;
 126  129          }
 127  130  
 128  131          if (dl->dl_havetree) {
 129  132                  while ((dle = avl_destroy_nodes(&dl->dl_tree, &cookie))
 130  133                      != NULL) {
 131  134                          bpobj_close(&dle->dle_bpobj);
↓ open down ↓ 404 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX