*   0x2002 - Success.
  **/
 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_scsi_buf *lpfc_cmd;
        struct lpfc_iocbq *iocbq;
        struct lpfc_iocbq *iocbqrsp;
-       struct lpfc_nodelist *pnode = rdata->pnode;
+       struct lpfc_rport_data *rdata;
+       struct lpfc_nodelist *pnode;
        int ret;
        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;
+       pnode = rdata->pnode;
 
-       lpfc_cmd = lpfc_get_scsi_buf(phba, rdata->pnode);
+       lpfc_cmd = lpfc_get_scsi_buf(phba, pnode);
        if (lpfc_cmd == NULL)
                return FAILED;
        lpfc_cmd->timeout = phba->cfg_task_mgmt_tmo;
        lpfc_cmd->rdata = rdata;
+       lpfc_cmd->pCmd = cmnd;
 
        status = lpfc_scsi_prep_task_mgmt_cmd(vport, lpfc_cmd, lun_id,
                                           task_mgmt_cmd);
        fc_host_post_vendor_event(shost, fc_get_event_number(),
                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);
 
        lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
        fc_host_post_vendor_event(shost, fc_get_event_number(),
                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);
 
        lpfc_printf_vlog(vport, KERN_ERR, LOG_FCP,
                if (!match)
                        continue;
 
-               status = lpfc_send_taskmgmt(vport, ndlp->rport->dd_data,
+               status = lpfc_send_taskmgmt(vport, cmnd,
                                        i, 0, FCP_TARGET_RESET);
 
                if (status != SUCCESS) {