Print this page
NEX-9981 Deadman timer panic from idm_refcnt_wait_ref thread while offlining iSCSI targets
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
*** 20,29 ****
--- 20,30 ----
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
+ * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
* iSCSI command interfaces
*/
#include "iscsi.h"
*** 794,805 ****
* calls us back. Set the status to use
* when we complete the command.
*/
ISCSI_CMD_SET_REASON_STAT(
t_icmdp, CMD_TIMEOUT, STAT_ABORTED);
! idm_task_abort(icp->conn_ic, t_icmdp->cmd_itp,
! AT_TASK_MGMT_ABORT);
} else {
cv_broadcast(&t_icmdp->cmd_completion);
}
mutex_exit(&t_icmdp->cmd_mutex);
icmdp->cmd_un.abort.icmdp = NULL;
--- 795,806 ----
* calls us back. Set the status to use
* when we complete the command.
*/
ISCSI_CMD_SET_REASON_STAT(
t_icmdp, CMD_TIMEOUT, STAT_ABORTED);
! (void) idm_task_abort(icp->conn_ic,
! t_icmdp->cmd_itp, AT_TASK_MGMT_ABORT);
} else {
cv_broadcast(&t_icmdp->cmd_completion);
}
mutex_exit(&t_icmdp->cmd_mutex);
icmdp->cmd_un.abort.icmdp = NULL;
*** 940,950 ****
* calls us back. Set the status to use
* when we complete the command.
*/
ISCSI_CMD_SET_REASON_STAT(t_icmdp,
CMD_TIMEOUT, STAT_TIMEOUT);
! idm_task_abort(icp->conn_ic,
t_icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
} else {
cv_broadcast(&t_icmdp->cmd_completion);
}
--- 941,951 ----
* calls us back. Set the status to use
* when we complete the command.
*/
ISCSI_CMD_SET_REASON_STAT(t_icmdp,
CMD_TIMEOUT, STAT_TIMEOUT);
! (void) idm_task_abort(icp->conn_ic,
t_icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
} else {
cv_broadcast(&t_icmdp->cmd_completion);
}
*** 1025,1035 ****
mutex_enter(&icp->conn_queue_idm_aborting.mutex);
iscsi_enqueue_idm_aborting_cmd(icmdp->cmd_conn, icmdp);
mutex_exit(&icp->conn_queue_idm_aborting.mutex);
ISCSI_CMD_SET_REASON_STAT(icmdp,
CMD_TRAN_ERR, icmdp->cmd_un.scsi.pkt_stat);
! idm_task_abort(icp->conn_ic, icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
break;
case ISCSI_CMD_TYPE_NOP:
icmdp->cmd_state = ISCSI_CMD_STATE_FREE;
--- 1026,1036 ----
mutex_enter(&icp->conn_queue_idm_aborting.mutex);
iscsi_enqueue_idm_aborting_cmd(icmdp->cmd_conn, icmdp);
mutex_exit(&icp->conn_queue_idm_aborting.mutex);
ISCSI_CMD_SET_REASON_STAT(icmdp,
CMD_TRAN_ERR, icmdp->cmd_un.scsi.pkt_stat);
! (void) idm_task_abort(icp->conn_ic, icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
break;
case ISCSI_CMD_TYPE_NOP:
icmdp->cmd_state = ISCSI_CMD_STATE_FREE;
*** 1206,1216 ****
}
ISCSI_CMD_SET_REASON_STAT(icmdp,
CMD_TRAN_ERR, icmdp->cmd_un.scsi.pkt_stat);
! idm_task_abort(icmdp->cmd_conn->conn_ic, icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
break;
/* -E9: IDM is no longer processing this command */
case ISCSI_CMD_EVENT_E9:
--- 1207,1217 ----
}
ISCSI_CMD_SET_REASON_STAT(icmdp,
CMD_TRAN_ERR, icmdp->cmd_un.scsi.pkt_stat);
! (void) idm_task_abort(icmdp->cmd_conn->conn_ic, icmdp->cmd_itp,
AT_TASK_MGMT_ABORT);
break;
/* -E9: IDM is no longer processing this command */
case ISCSI_CMD_EVENT_E9: