Print this page
    
NEX-5428 Backout the 5.0 changes
NEX-2937 Continuous write_same starves all other commands
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
NEX-3217 Panic running benchmark at ESX VM
NEX-3204 Panic doing FC rescan from ESXi 5.5u1 with VAAI enabled
        Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
        Reviewed by: Tony Nguyen <tony.nguyen@nexenta.com>
NEX-3023 Panics and hangs when using write_same and compare_and_write
Review by: Bayard Bell <bayard.bell@nexenta.com>
Review by: Rick McNeal <rick.mcneal@nexenta.com>
Review by: Jean McCormack <jean.mccormack@nexenta.com>
Approved by: Jean McCormack <jean.mccormack@nexenta.com>
Related bug: NEX-2723 Kernel panic in xfer_completion code for write_same (0x93) and compare_and_write (0x89)
SUP-765 When a Windows Clustered Shared Volume is placed on a pool under Nexenta HA Cluster control the clustered shared disk looses its PGR3 reservation to the presented zvol.
Reviewed by: Bayard Bell <bayard.bell@nexenta.com>
Reviewed by: Tony Nguyen <tony.nguyen@nexenta.com>
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
NEX-988 itask_lu_[read|write]_time was inadvertently removed by the Illumos 3862 fix
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/lpif.h
          +++ new/usr/src/uts/common/sys/lpif.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 (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   * Copyright (c) 2013 by Delphix. All rights reserved.
       24 + * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  24   25   */
  25   26  #ifndef _LPIF_H
  26   27  #define _LPIF_H
  27   28  
  28   29  /*
  29   30   * Definitions for stmf LUs and lu providers.
  30   31   */
  31   32  
  32   33  #include <sys/stmf_defines.h>
  33   34  #include <sys/stmf.h>
  34   35  
  35   36  #ifdef  __cplusplus
  36   37  extern "C" {
  37   38  #endif
  38   39  
  39   40  #define LPIF_REV_1      0x00010000
  40   41  #define LPIF_REV_2      0x00020000
  41   42  
  42   43  typedef struct stmf_lu {
  43   44          void                    *lu_stmf_private;
  44   45          void                    *lu_provider_private;
  45   46  
  46   47          struct scsi_devid_desc  *lu_id;
  47   48          char                    *lu_alias;      /* optional */
  48   49          struct stmf_lu_provider *lu_lp;
  49   50          uint32_t                lu_abort_timeout;       /* In seconds */
  50   51  
  51   52          /* SAM Device Server Class */
  52   53          stmf_status_t           (*lu_task_alloc)(struct scsi_task *task);
  53   54          void                    (*lu_new_task)(struct scsi_task *task,
  54   55                  struct stmf_data_buf *initial_dbuf);
  55   56          void                    (*lu_dbuf_xfer_done)(struct scsi_task *task,
  56   57                  struct stmf_data_buf *dbuf);
  57   58          /*
  58   59           * If completion confirmation is not requested, status xfer done
  59   60           * is called after the transport has confirmed that status has been
  60   61           * sent. If completion confirmation is requested then the HBA will
  61   62           * request a completion confirmation from the host and upon receiving
  62   63           * the same, this entry point will be called.
  63   64           */
  64   65          void                    (*lu_send_status_done)(struct scsi_task *task);
  65   66          void                    (*lu_task_free)(struct scsi_task *task);
  66   67          stmf_status_t           (*lu_abort)(struct stmf_lu *lu,
  67   68                  int abort_cmd, void *arg, uint32_t flags);
  68   69          void                    (*lu_task_poll)(struct scsi_task *task);
  
    | 
      ↓ open down ↓ | 
    35 lines elided | 
    
      ↑ open up ↑ | 
  
  69   70          void                    (*lu_ctl)(struct stmf_lu *lu, int cmd,
  70   71                                                                  void *arg);
  71   72          stmf_status_t           (*lu_info)(uint32_t cmd, struct stmf_lu *lu,
  72   73                  void *arg, uint8_t *buf, uint32_t *bufsizep);
  73   74          void                    (*lu_event_handler)(struct stmf_lu *lu,
  74   75                  int eventid, void *arg, uint32_t flags);
  75   76          void                    *lu_proxy_reg_arg;
  76   77          uint32_t                lu_proxy_reg_arg_len;
  77   78          void                    (*lu_dbuf_free)(struct scsi_task *task,
  78   79                  struct stmf_data_buf *dbuf);
       80 +        void                    (*lu_task_done)(struct scsi_task *task);
  79   81  } stmf_lu_t;
  80   82  
  81   83  /*
  82   84   * Abort cmd
  83   85   */
  84   86  #define STMF_LU_ABORT_TASK              1
  85   87  #define STMF_LU_RESET_STATE             2
  86   88  #define STMF_LU_ITL_HANDLE_REMOVED      3
       89 +#define STMF_LU_SET_ABORT               4
  87   90  
  88   91  /*
  89   92   * Asymmetric access state
  90   93   */
  91   94  #define STMF_LU_ACTIVE                  0
  92   95  #define STMF_LU_STANDBY                 1
  93   96  
  94   97  /*
  95   98   * proxy register msg types
  96   99   */
  97  100  #define STMF_MSG_LU_REGISTER            0
  98  101  #define STMF_MSG_LU_ACTIVE              1
  99  102  #define STMF_MSG_LU_DEREGISTER          2
 100  103  
 101  104  
 102  105  #define STMF_PROXY_READ                 1
 103  106  #define STMF_PROXY_WRITE                2
 104  107  
 105  108  /*
 106  109   * Reasons for itl handle removal. Passed in flags.
 107  110   */
 108  111  #define STMF_ITL_REASON_MASK            0x0f
 109  112  #define STMF_ITL_REASON_UNKNOWN         0x0
 110  113  #define STMF_ITL_REASON_DEREG_REQUEST   0x1
 111  114  #define STMF_ITL_REASON_USER_REQUEST    0x2
 112  115  #define STMF_ITL_REASON_IT_NEXUS_LOSS   0x3
 113  116  
 114  117  typedef struct stmf_lu_provider {
 115  118          void                    *lp_stmf_private;
 116  119          void                    *lp_private;
 117  120  
 118  121          uint32_t                lp_lpif_rev;    /* Currently LPIF_REV_2 */
 119  122          int                     lp_instance;
 120  123          char                    *lp_name;
 121  124          void                    (*lp_cb)(struct stmf_lu_provider *lp,
 122  125              int cmd, void *arg, uint32_t flags);
 123  126          uint8_t                 lp_alua_support;
 124  127          stmf_status_t           (*lp_proxy_msg)(uint8_t *luid,
  
    | 
      ↓ open down ↓ | 
    28 lines elided | 
    
      ↑ open up ↑ | 
  
 125  128              void *proxy_reg_arg, uint32_t proxy_reg_arg_len, uint32_t type);
 126  129  } stmf_lu_provider_t;
 127  130  
 128  131  stmf_status_t stmf_deregister_lu_provider(stmf_lu_provider_t *lp);
 129  132  stmf_status_t stmf_register_lu_provider(stmf_lu_provider_t *lp);
 130  133  stmf_status_t stmf_register_lu(stmf_lu_t *lup);
 131  134  stmf_status_t stmf_deregister_lu(stmf_lu_t *lup);
 132  135  stmf_status_t stmf_set_lu_access(stmf_lu_t *lup, uint8_t access_state);
 133  136  stmf_status_t stmf_proxy_scsi_cmd(scsi_task_t *, stmf_data_buf_t *dbuf);
 134  137  int stmf_is_standby_port(scsi_task_t *);
      138 +void stmf_lu_xfer_done(struct scsi_task *task, boolean_t read,
      139 +    hrtime_t elapsed_time);
      140 +boolean_t stmf_is_pgr_aptpl_always();
 135  141  
 136  142  #ifdef  __cplusplus
 137  143  }
 138  144  #endif
 139  145  
 140  146  #endif /* _LPIF_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX