Print this page
NEX-3856 panic is occurred in module "fct" due to a NULL pointer dereference
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>
NEX-3277 Panic of both nodes in failover time (FC clients)
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
NEX-2787 Multiple comstar / fibre channel / qlt threads stuck waiting on locks with a spinning interrupt thread
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Approved by: Jean McCormack <jean.mccormack@nexenta.com>
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _FCT_IMPL_H
#define _FCT_IMPL_H
*** 70,80 ****
fct_cmd_t *icmd_cmd;
uint32_t icmd_alloc_size;
fct_struct_id_t icmd_struct_id;
uint32_t icmd_flags;
clock_t icmd_start_time;
! struct fct_i_cmd *icmd_next; /* iport_abort_queue and irp */
struct fct_i_cmd *icmd_solcmd_next; /* iport_solcmd_queue */
fct_icmd_cb_t icmd_cb;
void *icmd_cb_private;
} fct_i_cmd_t;
--- 71,81 ----
fct_cmd_t *icmd_cmd;
uint32_t icmd_alloc_size;
fct_struct_id_t icmd_struct_id;
uint32_t icmd_flags;
clock_t icmd_start_time;
! list_node_t icmd_node; /* iport_abort_queue and irp */
struct fct_i_cmd *icmd_solcmd_next; /* iport_solcmd_queue */
fct_icmd_cb_t icmd_cb;
void *icmd_cb_private;
} fct_i_cmd_t;
*** 114,124 ****
struct fct_i_remote_port *irp_next;
/* For queueing to handle elses */
struct fct_i_remote_port *irp_discovery_next;
! fct_i_cmd_t *irp_els_list;
/*
* sa stands for session affecting, nsa is non session affecting.
* The els counts only represent elses under progress not the ones
* that are terminated. active_xchg_count covers everything including
--- 115,125 ----
struct fct_i_remote_port *irp_next;
/* For queueing to handle elses */
struct fct_i_remote_port *irp_discovery_next;
! list_t irp_els_list;
/*
* sa stands for session affecting, nsa is non session affecting.
* The els counts only represent elses under progress not the ones
* that are terminated. active_xchg_count covers everything including
*** 142,155 ****
--- 143,158 ----
* Most HBAs will only register symbolic node name instead of port name,
* so we use SNN as session alias.
*/
stmf_scsi_session_t *irp_session;
char *irp_snn;
+ uint16_t irp_snn_len;
/* items will be filled in ns cmd */
uint8_t irp_fc4types[32]; /* FC-4 types */
char *irp_spn; /* port symbolic name */
+ uint16_t irp_spn_len;
uint32_t irp_cos; /* class of service */
uint32_t irp_rscn_counter;
} fct_i_remote_port_t;
*** 230,240 ****
/*
* # of free cmds sitting on the iport_cached_cmdlist
*/
uint32_t iport_cached_ncmds;
! struct fct_i_cmd *iport_cached_cmdlist;
kmutex_t iport_cached_cmd_lock;
/*
* To release free cmds periodically
*/
--- 233,243 ----
/*
* # of free cmds sitting on the iport_cached_cmdlist
*/
uint32_t iport_cached_ncmds;
! list_t iport_cached_cmdlist;
kmutex_t iport_cached_cmd_lock;
/*
* To release free cmds periodically
*/
*** 259,270 ****
ddi_taskq_t *iport_worker_taskq;
kmutex_t iport_worker_lock;
kcondvar_t iport_worker_cv;
struct fct_i_event *iport_event_head;
struct fct_i_event *iport_event_tail;
! struct fct_i_cmd *iport_abort_queue;
! struct fct_i_cmd **iport_ppicmd_term;
/* link initialization */
fct_status_t iport_li_comp_status;
enum fct_li_state iport_li_state;
--- 262,273 ----
ddi_taskq_t *iport_worker_taskq;
kmutex_t iport_worker_lock;
kcondvar_t iport_worker_cv;
struct fct_i_event *iport_event_head;
struct fct_i_event *iport_event_tail;
! list_t iport_abort_queue;
! struct fct_i_cmd *iport_ppicmd_term;
/* link initialization */
fct_status_t iport_li_comp_status;
enum fct_li_state iport_li_state;
*** 433,442 ****
--- 436,446 ----
void fct_gcs_cb(fct_i_cmd_t *icmd);
void fct_gft_cb(fct_i_cmd_t *icmd);
void fct_gspn_cb(fct_i_cmd_t *icmd);
void fct_rls_cb(fct_i_cmd_t *icmd);
disc_action_t fct_process_link_init(fct_i_local_port_t *iport);
+ void fct_cmd_unlink_els(fct_i_remote_port_t *irp, fct_i_cmd_t *icmd);
#ifdef __cplusplus
}
#endif