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,28 ****
--- 19,29 ----
   * CDDL HEADER END
   */
  /*
   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
   * Copyright (c) 2013 by Delphix. All rights reserved.
+  * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved.
   */
  
  #ifndef _SYS_ZAP_IMPL_H
  #define _SYS_ZAP_IMPL_H
  
*** 138,147 ****
--- 139,149 ----
  } zap_phys_t;
  
  typedef struct zap_table_phys zap_table_phys_t;
  
  typedef struct zap {
+         dmu_buf_user_t zap_dbu;
          objset_t *zap_objset;
          uint64_t zap_object;
          struct dmu_buf *zap_dbuf;
          krwlock_t zap_rwlock;
          boolean_t zap_ismicro;
*** 194,204 ****
  
  boolean_t zap_match(zap_name_t *zn, const char *matchname);
  int zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx,
      krw_t lti, boolean_t fatreader, boolean_t adding, zap_t **zapp);
  void zap_unlockdir(zap_t *zap);
! void zap_evict(dmu_buf_t *db, void *vmzap);
  zap_name_t *zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt);
  void zap_name_free(zap_name_t *zn);
  int zap_hashbits(zap_t *zap);
  uint32_t zap_maxcd(zap_t *zap);
  uint64_t zap_getflags(zap_t *zap);
--- 196,206 ----
  
  boolean_t zap_match(zap_name_t *zn, const char *matchname);
  int zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx,
      krw_t lti, boolean_t fatreader, boolean_t adding, zap_t **zapp);
  void zap_unlockdir(zap_t *zap);
! void zap_evict(void *dbu);
  zap_name_t *zap_name_alloc(zap_t *zap, const char *key, matchtype_t mt);
  void zap_name_free(zap_name_t *zn);
  int zap_hashbits(zap_t *zap);
  uint32_t zap_maxcd(zap_t *zap);
  uint64_t zap_getflags(zap_t *zap);