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>

@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
  */
 
 #ifndef _SYS_DNODE_H
 #define _SYS_DNODE_H
 

@@ -253,10 +254,11 @@
         zrlock_t dnh_zrlock;
         dnode_t *dnh_dnode;
 } dnode_handle_t;
 
 typedef struct dnode_children {
+        dmu_buf_user_t dnc_dbu;         /* User evict data */
         size_t dnc_count;               /* number of children */
         dnode_handle_t dnc_children[];  /* sized dynamically */
 } dnode_children_t;
 
 typedef struct free_range {

@@ -263,11 +265,11 @@
         avl_node_t fr_node;
         uint64_t fr_blkid;
         uint64_t fr_nblks;
 } free_range_t;
 
-dnode_t *dnode_special_open(struct objset *dd, dnode_phys_t *dnp,
+void dnode_special_open(struct objset *dd, dnode_phys_t *dnp,
     uint64_t object, dnode_handle_t *dnh);
 void dnode_special_close(dnode_handle_t *dnh);
 
 void dnode_setbonuslen(dnode_t *dn, int newsize, dmu_tx_t *tx);
 void dnode_setbonus_type(dnode_t *dn, dmu_object_type_t, dmu_tx_t *tx);