Print this page
    
NEX-8972 Async-delete side-effect that may cause unmount EBUSY
Reviewed by: Alek Pinchuk <alek@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-3762 Appliance crashes with a NULL pointer dereference during a zpool export when a zfs_vn_rele_taskq thread attempts to check a bogus rwlock from rw_write_held
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/fs/zfs/sys/zfs_dir.h
          +++ new/usr/src/uts/common/fs/zfs/sys/zfs_dir.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  
    | 
      ↓ 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 2010 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
       24 + * Copyright 2016 Nexenta Systems Inc. All rights reserved.
  24   25   */
  25   26  
  26   27  #ifndef _SYS_FS_ZFS_DIR_H
  27   28  #define _SYS_FS_ZFS_DIR_H
  28   29  
  29   30  #include <sys/pathname.h>
  30   31  #include <sys/dmu.h>
  31   32  #include <sys/zfs_znode.h>
  32   33  
  33   34  #ifdef  __cplusplus
  34   35  extern "C" {
  35   36  #endif
  36   37  
  37   38  /* zfs_dirent_lock() flags */
  38   39  #define ZNEW            0x0001          /* entry should not exist */
  39   40  #define ZEXISTS         0x0002          /* entry should exist */
  40   41  #define ZSHARED         0x0004          /* shared access (zfs_dirlook()) */
  41   42  #define ZXATTR          0x0008          /* we want the xattr dir */
  42   43  #define ZRENAMING       0x0010          /* znode is being renamed */
  43   44  #define ZCILOOK         0x0020          /* case-insensitive lookup requested */
  44   45  #define ZCIEXACT        0x0040          /* c-i requires c-s match (rename) */
  45   46  #define ZHAVELOCK       0x0080          /* z_name_lock is already held */
  46   47  
  47   48  /* mknode flags */
  48   49  #define IS_ROOT_NODE    0x01            /* create a root node */
  49   50  #define IS_XATTR        0x02            /* create an extended attribute node */
  50   51  
  51   52  extern int zfs_dirent_lock(zfs_dirlock_t **, znode_t *, char *, znode_t **,
  52   53      int, int *, pathname_t *);
  53   54  extern void zfs_dirent_unlock(zfs_dirlock_t *);
  54   55  extern int zfs_link_create(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int);
  55   56  extern int zfs_link_destroy(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int,
  
    | 
      ↓ open down ↓ | 
    22 lines elided | 
    
      ↑ open up ↑ | 
  
  56   57      boolean_t *);
  57   58  extern int zfs_dirlook(znode_t *, char *, vnode_t **, int, int *,
  58   59      pathname_t *);
  59   60  extern void zfs_mknode(znode_t *, vattr_t *, dmu_tx_t *, cred_t *,
  60   61      uint_t, znode_t **, zfs_acl_ids_t *);
  61   62  extern void zfs_rmnode(znode_t *);
  62   63  extern void zfs_dl_name_switch(zfs_dirlock_t *dl, char *new, char **old);
  63   64  extern boolean_t zfs_dirempty(znode_t *);
  64   65  extern void zfs_unlinked_add(znode_t *, dmu_tx_t *);
  65   66  extern void zfs_unlinked_drain(zfsvfs_t *zfsvfs);
       67 +extern void zfs_unlinked_drain_stop_wait(zfsvfs_t *zfsvfs);
  66   68  extern int zfs_sticky_remove_access(znode_t *, znode_t *, cred_t *cr);
  67   69  extern int zfs_get_xattrdir(znode_t *, vnode_t **, cred_t *, int);
  68   70  extern int zfs_make_xattrdir(znode_t *, vattr_t *, vnode_t **, cred_t *);
  69   71  
  70   72  #ifdef  __cplusplus
  71   73  }
  72   74  #endif
  73   75  
  74   76  #endif  /* _SYS_FS_ZFS_DIR_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX