|
@@ -4948,26 +4948,30 @@ lpfc_check_fcp_rsp(struct lpfc_vport *vport, struct lpfc_scsi_buf *lpfc_cmd)
|
|
* 0x2002 - Success.
|
|
* 0x2002 - Success.
|
|
**/
|
|
**/
|
|
static int
|
|
static int
|
|
-lpfc_send_taskmgmt(struct lpfc_vport *vport, struct lpfc_rport_data *rdata,
|
|
|
|
- unsigned tgt_id, uint64_t lun_id,
|
|
|
|
- uint8_t task_mgmt_cmd)
|
|
|
|
|
|
+lpfc_send_taskmgmt(struct lpfc_vport *vport, struct scsi_cmnd *cmnd,
|
|
|
|
+ unsigned int tgt_id, uint64_t lun_id,
|
|
|
|
+ uint8_t task_mgmt_cmd)
|
|
{
|
|
{
|
|
struct lpfc_hba *phba = vport->phba;
|
|
struct lpfc_hba *phba = vport->phba;
|
|
struct lpfc_scsi_buf *lpfc_cmd;
|
|
struct lpfc_scsi_buf *lpfc_cmd;
|
|
struct lpfc_iocbq *iocbq;
|
|
struct lpfc_iocbq *iocbq;
|
|
struct lpfc_iocbq *iocbqrsp;
|
|
struct lpfc_iocbq *iocbqrsp;
|
|
- struct lpfc_nodelist *pnode = rdata->pnode;
|
|
|
|
|
|
+ struct lpfc_rport_data *rdata;
|
|
|
|
+ struct lpfc_nodelist *pnode;
|
|
int ret;
|
|
int ret;
|
|
int status;
|
|
int status;
|
|
|
|
|
|
- if (!pnode || !NLP_CHK_NODE_ACT(pnode))
|
|
|
|
|
|
+ rdata = lpfc_rport_data_from_scsi_device(cmnd->device);
|
|
|
|
+ if (!rdata || !rdata->pnode || !NLP_CHK_NODE_ACT(rdata->pnode))
|
|
return FAILED;
|
|
return FAILED;
|
|
|
|
+ pnode = rdata->pnode;
|
|
|
|
|
|
- lpfc_cmd = lpfc_get_scsi_buf(phba, rdata->pnode);
|
|
|
|
|
|
+ lpfc_cmd = lpfc_get_scsi_buf(phba, pnode);
|
|
if (lpfc_cmd == NULL)
|
|
if (lpfc_cmd == NULL)
|
|
return FAILED;
|
|
return FAILED;
|
|
lpfc_cmd->timeout = phba->cfg_task_mgmt_tmo;
|
|
lpfc_cmd->timeout = phba->cfg_task_mgmt_tmo;
|
|
lpfc_cmd->rdata = rdata;
|
|
lpfc_cmd->rdata = rdata;
|
|
|
|
+ lpfc_cmd->pCmd = cmnd;
|
|
|
|
|
|
status = lpfc_scsi_prep_task_mgmt_cmd(vport, lpfc_cmd, lun_id,
|
|
status = lpfc_scsi_prep_task_mgmt_cmd(vport, lpfc_cmd, lun_id,
|
|
task_mgmt_cmd);
|
|
task_mgmt_cmd);
|
|
@@ -5174,7 +5178,7 @@ lpfc_device_reset_handler(struct scsi_cmnd *cmnd)
|
|
fc_host_post_vendor_event(shost, fc_get_event_number(),
|
|
fc_host_post_vendor_event(shost, fc_get_event_number(),
|
|
sizeof(scsi_event), (char *)&scsi_event, LPFC_NL_VENDOR_ID);
|
|
sizeof(scsi_event), (char *)&scsi_event, LPFC_NL_VENDOR_ID);
|
|
|
|
|
|
- status = lpfc_send_taskmgmt(vport, rdata, tgt_id, lun_id,
|
|
|
|
|
|
+ status = lpfc_send_taskmgmt(vport, cmnd, tgt_id, lun_id,
|
|
FCP_LUN_RESET);
|
|
FCP_LUN_RESET);
|
|
|
|
|
|
lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
|
|
lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
|
|
@@ -5252,7 +5256,7 @@ lpfc_target_reset_handler(struct scsi_cmnd *cmnd)
|
|
fc_host_post_vendor_event(shost, fc_get_event_number(),
|
|
fc_host_post_vendor_event(shost, fc_get_event_number(),
|
|
sizeof(scsi_event), (char *)&scsi_event, LPFC_NL_VENDOR_ID);
|
|
sizeof(scsi_event), (char *)&scsi_event, LPFC_NL_VENDOR_ID);
|
|
|
|
|
|
- status = lpfc_send_taskmgmt(vport, rdata, tgt_id, lun_id,
|
|
|
|
|
|
+ status = lpfc_send_taskmgmt(vport, cmnd, tgt_id, lun_id,
|
|
FCP_TARGET_RESET);
|
|
FCP_TARGET_RESET);
|
|
|
|
|
|
lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
|
|
lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
|
|
@@ -5331,7 +5335,7 @@ lpfc_bus_reset_handler(struct scsi_cmnd *cmnd)
|
|
if (!match)
|
|
if (!match)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- status = lpfc_send_taskmgmt(vport, ndlp->rport->dd_data,
|
|
|
|
|
|
+ status = lpfc_send_taskmgmt(vport, cmnd,
|
|
i, 0, FCP_TARGET_RESET);
|
|
i, 0, FCP_TARGET_RESET);
|
|
|
|
|
|
if (status != SUCCESS) {
|
|
if (status != SUCCESS) {
|