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.h
          +++ new/usr/src/uts/common/fs/zfs/sys/spa.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_H
  28   29  #define _SYS_SPA_H
  29   30  
  30   31  #include <sys/avl.h>
  31   32  #include <sys/zfs_context.h>
  32   33  #include <sys/nvpair.h>
  33   34  #include <sys/sysmacros.h>
  34   35  #include <sys/types.h>
↓ open down ↓ 640 lines elided ↑ open up ↑
 675  676  
 676  677  /* Namespace manipulation */
 677  678  extern spa_t *spa_lookup(const char *name);
 678  679  extern spa_t *spa_add(const char *name, nvlist_t *config, const char *altroot);
 679  680  extern void spa_remove(spa_t *spa);
 680  681  extern spa_t *spa_next(spa_t *prev);
 681  682  
 682  683  /* Refcount functions */
 683  684  extern void spa_open_ref(spa_t *spa, void *tag);
 684  685  extern void spa_close(spa_t *spa, void *tag);
      686 +extern void spa_async_close(spa_t *spa, void *tag);
 685  687  extern boolean_t spa_refcount_zero(spa_t *spa);
 686  688  
 687  689  #define SCL_NONE        0x00
 688  690  #define SCL_CONFIG      0x01
 689  691  #define SCL_STATE       0x02
 690  692  #define SCL_L2ARC       0x04            /* hack until L2ARC 2.0 */
 691  693  #define SCL_ALLOC       0x08
 692  694  #define SCL_ZIO         0x10
 693  695  #define SCL_FREE        0x20
 694  696  #define SCL_VDEV        0x40
↓ open down ↓ 52 lines elided ↑ open up ↑
 747  749  extern spa_load_state_t spa_load_state(spa_t *spa);
 748  750  extern uint64_t spa_freeze_txg(spa_t *spa);
 749  751  extern uint64_t spa_get_asize(spa_t *spa, uint64_t lsize);
 750  752  extern uint64_t spa_get_dspace(spa_t *spa);
 751  753  extern uint64_t spa_get_slop_space(spa_t *spa);
 752  754  extern void spa_update_dspace(spa_t *spa);
 753  755  extern uint64_t spa_version(spa_t *spa);
 754  756  extern boolean_t spa_deflate(spa_t *spa);
 755  757  extern metaslab_class_t *spa_normal_class(spa_t *spa);
 756  758  extern metaslab_class_t *spa_log_class(spa_t *spa);
      759 +extern void spa_evicting_os_register(spa_t *, objset_t *os);
      760 +extern void spa_evicting_os_deregister(spa_t *, objset_t *os);
      761 +extern void spa_evicting_os_wait(spa_t *spa);
 757  762  extern int spa_max_replication(spa_t *spa);
 758  763  extern int spa_prev_software_version(spa_t *spa);
 759  764  extern int spa_busy(void);
 760  765  extern uint8_t spa_get_failmode(spa_t *spa);
 761  766  extern boolean_t spa_suspended(spa_t *spa);
 762  767  extern uint64_t spa_bootfs(spa_t *spa);
 763  768  extern uint64_t spa_delegation(spa_t *spa);
 764  769  extern objset_t *spa_meta_objset(spa_t *spa);
 765  770  extern uint64_t spa_deadman_synctime(spa_t *spa);
 766  771  
↓ open down ↓ 107 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX