Print this page
NEX-3177 enums and string arrays required to be in sync.
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
re #8564, rb4224 "mutex_enter: bad mutex" panic when under heavy load
        
*** 16,28 ****
   * fields enclosed by brackets "[]" replaced with your own identifying
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
  /*
   * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
!  * Copyright 2013, Nexenta Systems, Inc. All rights reserved.
   */
  #ifndef _PPPT_H
  #define _PPPT_H
  
  #include <sys/pppt_ic_if.h>
--- 16,29 ----
   * fields enclosed by brackets "[]" replaced with your own identifying
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
+ 
  /*
   * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
!  * Copyright 2013, 2015 Nexenta Systems, Inc. All rights reserved.
   */
  #ifndef _PPPT_H
  #define _PPPT_H
  
  #include <sys/pppt_ic_if.h>
*** 47,124 ****
          PPPT_STATUS_DONE
  } pppt_status_t;
  
  #define PPPT_MODNAME "pppt"
  
  /* Target states and events, update pppt_ts_name table whenever modified */
  typedef enum {
!         TS_UNDEFINED = 0,
!         TS_CREATED,
!         TS_ONLINING,
!         TS_ONLINE,
!         TS_STMF_ONLINE,
!         TS_DELETING_NEED_OFFLINE,
!         TS_OFFLINING,
!         TS_OFFLINE,
!         TS_STMF_OFFLINE,
!         TS_DELETING_STMF_DEREG,
!         TS_DELETING_STMF_DEREG_FAIL,
!         TS_DELETING,
!         TS_MAX_STATE
  } pppt_tgt_state_t;
  
  #ifdef PPPT_TGT_SM_STRINGS
! static const char *pppt_ts_name[TS_MAX_STATE+1] = {
!         "TS_UNDEFINED",
!         "TS_CREATED",
!         "TS_ONLINING",
!         "TS_ONLINE",
!         "TS_STMF_ONLINE",
!         "TS_DELETING_NEED_OFFLINE",
!         "TS_OFFLINING",
!         "TS_OFFLINE",
!         "TS_STMF_OFFLINE",
!         "TS_DELETING_STMF_DEREG",
!         "TS_DELETING_STMF_DEREG_FAIL",
!         "TS_DELETING",
!         "TS_MAX_STATE"
  };
  #endif
  
  typedef enum {
!         TE_UNDEFINED = 0,
!         TE_STMF_ONLINE_REQ,
!         TE_ONLINE_SUCCESS,
!         TE_ONLINE_FAIL,
!         TE_STMF_ONLINE_COMPLETE_ACK,
!         TE_STMF_OFFLINE_REQ,
!         TE_OFFLINE_COMPLETE,
!         TE_STMF_OFFLINE_COMPLETE_ACK,
!         TE_DELETE,
!         TE_STMF_DEREG_SUCCESS,
!         TE_STMF_DEREG_FAIL,
!         TE_STMF_DEREG_RETRY,
!         TE_WAIT_REF_COMPLETE, /* XXX */
!         TE_MAX_EVENT
  } pppt_tgt_event_t;
  
  #ifdef PPPT_TGT_SM_STRINGS
! static const char *pppt_te_name[TE_MAX_EVENT+1] = {
!         "TE_UNDEFINED",
!         "TE_STMF_ONLINE_REQ",
!         "TE_ONLINE_SUCCESS",
!         "TE_ONLINE_FAIL",
!         "TE_STMF_ONLINE_COMPLETE_ACK",
!         "TE_STMF_OFFLINE_REQ",
!         "TE_OFFLINE_COMPLETE",
!         "TE_STMF_OFFLINE_COMPLETE_ACK",
!         "TE_DELETE",
!         "TE_STMF_DEREG_SUCCESS",
!         "TE_STMF_DEREG_FAIL",
!         "TE_STMF_DEREG_RETRY",
!         "TE_WAIT_REF_COMPLETE",
!         "TE_MAX_EVENT"
  };
  #endif
  
  typedef struct pppt_tgt_s {
          kmutex_t                target_mutex;
--- 48,114 ----
          PPPT_STATUS_DONE
  } pppt_status_t;
  
  #define PPPT_MODNAME "pppt"
  
+ #define TGT_STATE_LIST() \
+         item(TS_UNDEFINED) \
+         item(TS_CREATED) \
+         item(TS_ONLINING) \
+         item(TS_ONLINE) \
+         item(TS_STMF_ONLINE) \
+         item(TS_DELETING_NEED_OFFLINE) \
+         item(TS_OFFLINING) \
+         item(TS_OFFLINE) \
+         item(TS_STMF_OFFLINE) \
+         item(TS_DELETING_STMF_DEREG) \
+         item(TS_DELETING_STMF_DEREG_FAIL) \
+         item(TS_DELETING) \
+         item(TS_MAX_STATE)
+ 
  /* Target states and events, update pppt_ts_name table whenever modified */
  typedef enum {
! #define item(a) a,
!         TGT_STATE_LIST()
! #undef  item
  } pppt_tgt_state_t;
  
  #ifdef PPPT_TGT_SM_STRINGS
! static const char *pppt_ts_name[TS_MAX_STATE + 1] = {
! #define item(a) #a,
!         TGT_STATE_LIST()
! #undef  item
  };
  #endif
  
+ #define TGT_EVENT_LIST() \
+         item(TE_UNDEFINED) \
+         item(TE_STMF_ONLINE_REQ) \
+         item(TE_ONLINE_SUCCESS) \
+         item(TE_ONLINE_FAIL) \
+         item(TE_STMF_ONLINE_COMPLETE_ACK) \
+         item(TE_STMF_OFFLINE_REQ) \
+         item(TE_OFFLINE_COMPLETE) \
+         item(TE_STMF_OFFLINE_COMPLETE_ACK) \
+         item(TE_DELETE) \
+         item(TE_STMF_DEREG_SUCCESS) \
+         item(TE_STMF_DEREG_FAIL) \
+         item(TE_STMF_DEREG_RETRY) \
+         item(TE_WAIT_REF_COMPLETE) /* XXX */ \
+         item(TE_MAX_EVENT)
+ 
  typedef enum {
! #define item(a) a,
!         TGT_EVENT_LIST()
! #undef  item
  } pppt_tgt_event_t;
  
  #ifdef PPPT_TGT_SM_STRINGS
! static const char *pppt_te_name[TE_MAX_EVENT + 1] = {
! #define item(a) #a,
!         TGT_EVENT_LIST()
! #undef  item
  };
  #endif
  
  typedef struct pppt_tgt_s {
          kmutex_t                target_mutex;