Lines Matching refs:sc
107 struct scsi_cmnd *sc) in fnic_io_lock_hash() argument
109 u32 hash = sc->request->tag & (FNIC_IO_LOCKS - 1); in fnic_io_lock_hash()
126 struct scsi_cmnd *sc) in fnic_release_ioreq_buf() argument
132 scsi_dma_unmap(sc); in fnic_release_ioreq_buf()
320 struct scsi_cmnd *sc, in fnic_queue_wq_copy_desc() argument
324 struct fc_rport *rport = starget_to_rport(scsi_target(sc->device)); in fnic_queue_wq_copy_desc()
337 for_each_sg(scsi_sglist(sc), sg, sg_count, i) { in fnic_queue_wq_copy_desc()
352 sc->sense_buffer, in fnic_queue_wq_copy_desc()
356 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_queue_wq_copy_desc()
373 if (sc->sc_data_direction == DMA_FROM_DEVICE) in fnic_queue_wq_copy_desc()
375 else if (sc->sc_data_direction == DMA_TO_DEVICE) in fnic_queue_wq_copy_desc()
383 fnic_queue_wq_copy_desc_icmnd_16(wq, sc->request->tag, in fnic_queue_wq_copy_desc()
392 sc->cmnd, sc->cmd_len, in fnic_queue_wq_copy_desc()
393 scsi_bufflen(sc), in fnic_queue_wq_copy_desc()
413 static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) in fnic_queuecommand_lck() argument
415 struct fc_lport *lp = shost_priv(sc->device->host); in fnic_queuecommand_lck()
433 rport = starget_to_rport(scsi_target(sc->device)); in fnic_queuecommand_lck()
437 sc->result = ret; in fnic_queuecommand_lck()
438 done(sc); in fnic_queuecommand_lck()
447 sc->result = DID_NO_CONNECT; in fnic_queuecommand_lck()
448 done(sc); in fnic_queuecommand_lck()
463 CMD_STATE(sc) = FNIC_IOREQ_NOT_INITED; in fnic_queuecommand_lck()
464 CMD_FLAGS(sc) = FNIC_NO_FLAGS; in fnic_queuecommand_lck()
476 sg_count = scsi_dma_map(sc); in fnic_queuecommand_lck()
478 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
479 sc->request->tag, sc, 0, sc->cmnd[0], in fnic_queuecommand_lck()
480 sg_count, CMD_STATE(sc)); in fnic_queuecommand_lck()
498 scsi_dma_unmap(sc); in fnic_queuecommand_lck()
518 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_queuecommand_lck()
525 CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING; in fnic_queuecommand_lck()
526 CMD_SP(sc) = (char *)io_req; in fnic_queuecommand_lck()
527 CMD_FLAGS(sc) |= FNIC_IO_INITIALIZED; in fnic_queuecommand_lck()
528 sc->scsi_done = done; in fnic_queuecommand_lck()
532 ret = fnic_queue_wq_copy_desc(fnic, wq, io_req, sc, sg_count); in fnic_queuecommand_lck()
538 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
539 sc->request->tag, sc, 0, 0, 0, in fnic_queuecommand_lck()
540 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_queuecommand_lck()
541 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_queuecommand_lck()
542 CMD_SP(sc) = NULL; in fnic_queuecommand_lck()
543 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_queuecommand_lck()
546 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_queuecommand_lck()
562 CMD_FLAGS(sc) |= FNIC_IO_ISSUED; in fnic_queuecommand_lck()
565 cmd_trace = ((u64)sc->cmnd[0] << 56 | (u64)sc->cmnd[7] << 40 | in fnic_queuecommand_lck()
566 (u64)sc->cmnd[8] << 32 | (u64)sc->cmnd[2] << 24 | in fnic_queuecommand_lck()
567 (u64)sc->cmnd[3] << 16 | (u64)sc->cmnd[4] << 8 | in fnic_queuecommand_lck()
568 sc->cmnd[5]); in fnic_queuecommand_lck()
570 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
571 sc->request->tag, sc, io_req, in fnic_queuecommand_lck()
573 (((u64)CMD_FLAGS(sc) >> 32) | CMD_STATE(sc))); in fnic_queuecommand_lck()
794 struct scsi_cmnd *sc; in fnic_fcpio_icmnd_cmpl_handler() local
813 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_fcpio_icmnd_cmpl_handler()
814 WARN_ON_ONCE(!sc); in fnic_fcpio_icmnd_cmpl_handler()
815 if (!sc) { in fnic_fcpio_icmnd_cmpl_handler()
832 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_icmnd_cmpl_handler()
834 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_fcpio_icmnd_cmpl_handler()
838 CMD_FLAGS(sc) |= FNIC_IO_REQ_NULL; in fnic_fcpio_icmnd_cmpl_handler()
843 fnic_fcpio_status_to_str(hdr_status), id, sc); in fnic_fcpio_icmnd_cmpl_handler()
855 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_icmnd_cmpl_handler()
857 CMD_FLAGS(sc) |= FNIC_IO_ABTS_PENDING; in fnic_fcpio_icmnd_cmpl_handler()
860 CMD_FLAGS(sc) |= FNIC_IO_DONE; in fnic_fcpio_icmnd_cmpl_handler()
864 fnic_fcpio_status_to_str(hdr_status), sc, in fnic_fcpio_icmnd_cmpl_handler()
869 CMD_FLAGS(sc) |= FNIC_IO_ABORTED; in fnic_fcpio_icmnd_cmpl_handler()
876 id, sc); in fnic_fcpio_icmnd_cmpl_handler()
883 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_fcpio_icmnd_cmpl_handler()
889 sc->result = (DID_OK << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
890 xfer_len = scsi_bufflen(sc); in fnic_fcpio_icmnd_cmpl_handler()
891 scsi_set_resid(sc, icmnd_cmpl->residual); in fnic_fcpio_icmnd_cmpl_handler()
902 sc->result = (DID_TIME_OUT << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
907 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
912 scsi_set_resid(sc, icmnd_cmpl->residual); in fnic_fcpio_icmnd_cmpl_handler()
913 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
918 sc->result = (DID_REQUEUE << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
923 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
928 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
933 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
938 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
947 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
957 CMD_SP(sc) = NULL; in fnic_fcpio_icmnd_cmpl_handler()
958 CMD_FLAGS(sc) |= FNIC_IO_DONE; in fnic_fcpio_icmnd_cmpl_handler()
962 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_icmnd_cmpl_handler()
968 (u64)icmnd_cmpl->flags << 40 | (u64)sc->cmnd[0] << 32 | in fnic_fcpio_icmnd_cmpl_handler()
969 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_fcpio_icmnd_cmpl_handler()
970 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]; in fnic_fcpio_icmnd_cmpl_handler()
973 sc->device->host->host_no, id, sc, in fnic_fcpio_icmnd_cmpl_handler()
978 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_icmnd_cmpl_handler()
980 if (sc->sc_data_direction == DMA_FROM_DEVICE) { in fnic_fcpio_icmnd_cmpl_handler()
983 } else if (sc->sc_data_direction == DMA_TO_DEVICE) { in fnic_fcpio_icmnd_cmpl_handler()
996 if (sc->scsi_done) in fnic_fcpio_icmnd_cmpl_handler()
997 sc->scsi_done(sc); in fnic_fcpio_icmnd_cmpl_handler()
1010 struct scsi_cmnd *sc; in fnic_fcpio_itmf_cmpl_handler() local
1030 sc = scsi_host_find_tag(fnic->lport->host, id & FNIC_TAG_MASK); in fnic_fcpio_itmf_cmpl_handler()
1031 WARN_ON_ONCE(!sc); in fnic_fcpio_itmf_cmpl_handler()
1032 if (!sc) { in fnic_fcpio_itmf_cmpl_handler()
1039 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_itmf_cmpl_handler()
1041 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_fcpio_itmf_cmpl_handler()
1046 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_fcpio_itmf_cmpl_handler()
1050 fnic_fcpio_status_to_str(hdr_status), id, sc); in fnic_fcpio_itmf_cmpl_handler()
1061 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_fcpio_itmf_cmpl_handler()
1062 CMD_ABTS_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1063 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_fcpio_itmf_cmpl_handler()
1073 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1080 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1087 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1094 if (CMD_STATE(sc) != FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_itmf_cmpl_handler()
1099 CMD_ABTS_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1100 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_DONE; in fnic_fcpio_itmf_cmpl_handler()
1108 if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE))) in fnic_fcpio_itmf_cmpl_handler()
1127 CMD_SP(sc) = NULL; in fnic_fcpio_itmf_cmpl_handler()
1128 sc->result = (DID_ERROR << 16); in fnic_fcpio_itmf_cmpl_handler()
1132 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_itmf_cmpl_handler()
1134 if (sc->scsi_done) { in fnic_fcpio_itmf_cmpl_handler()
1136 sc->device->host->host_no, id, in fnic_fcpio_itmf_cmpl_handler()
1137 sc, in fnic_fcpio_itmf_cmpl_handler()
1141 (u64)sc->cmnd[0] << 32 | in fnic_fcpio_itmf_cmpl_handler()
1142 (u64)sc->cmnd[2] << 24 | in fnic_fcpio_itmf_cmpl_handler()
1143 (u64)sc->cmnd[3] << 16 | in fnic_fcpio_itmf_cmpl_handler()
1144 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_fcpio_itmf_cmpl_handler()
1145 (((u64)CMD_FLAGS(sc) << 32) | in fnic_fcpio_itmf_cmpl_handler()
1146 CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1147 sc->scsi_done(sc); in fnic_fcpio_itmf_cmpl_handler()
1153 CMD_LR_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1154 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_itmf_cmpl_handler()
1156 CMD_FLAGS(sc) |= FNIC_DEV_RST_ABTS_PENDING; in fnic_fcpio_itmf_cmpl_handler()
1158 sc->device->host->host_no, id, sc, in fnic_fcpio_itmf_cmpl_handler()
1161 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1169 if (CMD_FLAGS(sc) & FNIC_DEV_RST_TIMED_OUT) { in fnic_fcpio_itmf_cmpl_handler()
1173 sc->device->host->host_no, id, sc, in fnic_fcpio_itmf_cmpl_handler()
1176 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1184 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_fcpio_itmf_cmpl_handler()
1185 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_fcpio_itmf_cmpl_handler()
1197 fnic_ioreq_state_to_str(CMD_STATE(sc)), id); in fnic_fcpio_itmf_cmpl_handler()
1282 struct scsi_cmnd *sc; in fnic_cleanup_io() local
1293 sc = scsi_host_find_tag(fnic->lport->host, i); in fnic_cleanup_io()
1294 if (!sc) { in fnic_cleanup_io()
1299 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_cleanup_io()
1300 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_cleanup_io()
1301 !(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) { in fnic_cleanup_io()
1306 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_cleanup_io()
1313 } else if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_cleanup_io()
1322 CMD_SP(sc) = NULL; in fnic_cleanup_io()
1331 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_cleanup_io()
1335 sc->result = DID_TRANSPORT_DISRUPTED << 16; in fnic_cleanup_io()
1346 if (sc->scsi_done) { in fnic_cleanup_io()
1348 sc->device->host->host_no, i, sc, in fnic_cleanup_io()
1350 0, ((u64)sc->cmnd[0] << 32 | in fnic_cleanup_io()
1351 (u64)sc->cmnd[2] << 24 | in fnic_cleanup_io()
1352 (u64)sc->cmnd[3] << 16 | in fnic_cleanup_io()
1353 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_cleanup_io()
1354 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_cleanup_io()
1356 sc->scsi_done(sc); in fnic_cleanup_io()
1367 struct scsi_cmnd *sc; in fnic_wq_copy_cleanup_handler() local
1379 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_wq_copy_cleanup_handler()
1380 if (!sc) in fnic_wq_copy_cleanup_handler()
1383 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_wq_copy_cleanup_handler()
1387 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_wq_copy_cleanup_handler()
1396 CMD_SP(sc) = NULL; in fnic_wq_copy_cleanup_handler()
1401 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_wq_copy_cleanup_handler()
1405 sc->result = DID_NO_CONNECT << 16; in fnic_wq_copy_cleanup_handler()
1409 if (sc->scsi_done) { in fnic_wq_copy_cleanup_handler()
1411 sc->device->host->host_no, id, sc, in fnic_wq_copy_cleanup_handler()
1413 0, ((u64)sc->cmnd[0] << 32 | in fnic_wq_copy_cleanup_handler()
1414 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_wq_copy_cleanup_handler()
1415 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_wq_copy_cleanup_handler()
1416 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_wq_copy_cleanup_handler()
1418 sc->scsi_done(sc); in fnic_wq_copy_cleanup_handler()
1477 struct scsi_cmnd *sc; in fnic_rport_exch_reset() local
1495 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_rport_exch_reset()
1496 if (!sc) { in fnic_rport_exch_reset()
1501 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_rport_exch_reset()
1508 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_rport_exch_reset()
1509 (!(CMD_FLAGS(sc) & FNIC_DEV_RST_ISSUED))) { in fnic_rport_exch_reset()
1512 sc); in fnic_rport_exch_reset()
1521 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_rport_exch_reset()
1529 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_rport_exch_reset()
1532 if (!(CMD_FLAGS(sc) & FNIC_IO_ISSUED)) { in fnic_rport_exch_reset()
1537 sc, tag, CMD_FLAGS(sc), CMD_STATE(sc)); in fnic_rport_exch_reset()
1539 old_ioreq_state = CMD_STATE(sc); in fnic_rport_exch_reset()
1540 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_rport_exch_reset()
1541 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_rport_exch_reset()
1542 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_rport_exch_reset()
1547 sc); in fnic_rport_exch_reset()
1558 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_rport_exch_reset()
1570 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_rport_exch_reset()
1571 CMD_STATE(sc) = old_ioreq_state; in fnic_rport_exch_reset()
1575 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) in fnic_rport_exch_reset()
1576 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_rport_exch_reset()
1578 CMD_FLAGS(sc) |= FNIC_IO_INTERNAL_TERM_ISSUED; in fnic_rport_exch_reset()
1597 struct scsi_cmnd *sc; in fnic_terminate_rport_io() local
1640 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_terminate_rport_io()
1641 if (!sc) { in fnic_terminate_rport_io()
1646 cmd_rport = starget_to_rport(scsi_target(sc->device)); in fnic_terminate_rport_io()
1652 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_terminate_rport_io()
1659 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_terminate_rport_io()
1660 (!(CMD_FLAGS(sc) & FNIC_DEV_RST_ISSUED))) { in fnic_terminate_rport_io()
1663 sc); in fnic_terminate_rport_io()
1671 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_terminate_rport_io()
1679 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_terminate_rport_io()
1681 if (!(CMD_FLAGS(sc) & FNIC_IO_ISSUED)) { in fnic_terminate_rport_io()
1686 sc, tag, CMD_FLAGS(sc), CMD_STATE(sc)); in fnic_terminate_rport_io()
1688 old_ioreq_state = CMD_STATE(sc); in fnic_terminate_rport_io()
1689 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_terminate_rport_io()
1690 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_terminate_rport_io()
1691 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_terminate_rport_io()
1695 "fnic_terminate_rport_io dev rst sc 0x%p\n", sc); in fnic_terminate_rport_io()
1707 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_terminate_rport_io()
1719 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_terminate_rport_io()
1720 CMD_STATE(sc) = old_ioreq_state; in fnic_terminate_rport_io()
1724 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) in fnic_terminate_rport_io()
1725 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_terminate_rport_io()
1727 CMD_FLAGS(sc) |= FNIC_IO_INTERNAL_TERM_ISSUED; in fnic_terminate_rport_io()
1743 int fnic_abort_cmd(struct scsi_cmnd *sc) in fnic_abort_cmd() argument
1763 fc_block_scsi_eh(sc); in fnic_abort_cmd()
1766 lp = shost_priv(sc->device->host); in fnic_abort_cmd()
1773 rport = starget_to_rport(scsi_target(sc->device)); in fnic_abort_cmd()
1774 tag = sc->request->tag; in fnic_abort_cmd()
1778 rport->port_id, sc->device->lun, tag, CMD_FLAGS(sc)); in fnic_abort_cmd()
1780 CMD_FLAGS(sc) = FNIC_NO_FLAGS; in fnic_abort_cmd()
1799 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_abort_cmd()
1801 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1809 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_abort_cmd()
1819 old_ioreq_state = CMD_STATE(sc); in fnic_abort_cmd()
1820 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_abort_cmd()
1821 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_abort_cmd()
1838 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_abort_cmd()
1840 if (fnic_queue_abort_io_req(fnic, sc->request->tag, task_req, in fnic_abort_cmd()
1843 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_abort_cmd()
1844 CMD_STATE(sc) = old_ioreq_state; in fnic_abort_cmd()
1845 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1853 CMD_FLAGS(sc) |= FNIC_IO_ABTS_ISSUED; in fnic_abort_cmd()
1856 CMD_FLAGS(sc) |= FNIC_IO_TERM_ISSUED; in fnic_abort_cmd()
1874 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1878 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_abort_cmd()
1885 if (CMD_ABTS_STATUS(sc) == FCPIO_INVALID_CODE) { in fnic_abort_cmd()
1892 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_TIMED_OUT; in fnic_abort_cmd()
1899 if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE))) { in fnic_abort_cmd()
1904 if (fnic_host_reset(sc) == FAILED) { in fnic_abort_cmd()
1912 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_abort_cmd()
1918 if (CMD_ABTS_STATUS(sc) != FCPIO_SUCCESS) in fnic_abort_cmd()
1921 CMD_SP(sc) = NULL; in fnic_abort_cmd()
1926 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_abort_cmd()
1930 FNIC_TRACE(fnic_abort_cmd, sc->device->host->host_no, in fnic_abort_cmd()
1931 sc->request->tag, sc, in fnic_abort_cmd()
1933 0, ((u64)sc->cmnd[0] << 32 | in fnic_abort_cmd()
1934 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_abort_cmd()
1935 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_abort_cmd()
1936 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_abort_cmd()
1946 struct scsi_cmnd *sc, in fnic_queue_dr_io_req() argument
1979 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_queue_dr_io_req()
1981 fnic_queue_wq_copy_desc_itmf(wq, sc->request->tag | FNIC_TAG_DEV_RST, in fnic_queue_dr_io_req()
2013 struct scsi_cmnd *sc; in fnic_clean_pending_aborts() local
2022 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_clean_pending_aborts()
2027 if (!sc || sc == lr_sc || sc->device != lun_dev) { in fnic_clean_pending_aborts()
2032 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_clean_pending_aborts()
2034 if (!io_req || sc->device != lun_dev) { in fnic_clean_pending_aborts()
2045 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_clean_pending_aborts()
2047 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_clean_pending_aborts()
2051 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_clean_pending_aborts()
2052 (!(CMD_FLAGS(sc) & FNIC_DEV_RST_ISSUED))) { in fnic_clean_pending_aborts()
2055 sc); in fnic_clean_pending_aborts()
2063 __func__, fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_clean_pending_aborts()
2064 old_ioreq_state = CMD_STATE(sc); in fnic_clean_pending_aborts()
2072 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_clean_pending_aborts()
2077 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_clean_pending_aborts()
2080 "%s: dev rst sc 0x%p\n", __func__, sc); in fnic_clean_pending_aborts()
2083 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_clean_pending_aborts()
2088 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_clean_pending_aborts()
2094 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_clean_pending_aborts()
2097 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_clean_pending_aborts()
2098 CMD_STATE(sc) = old_ioreq_state; in fnic_clean_pending_aborts()
2104 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) in fnic_clean_pending_aborts()
2105 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_clean_pending_aborts()
2108 CMD_FLAGS(sc) |= FNIC_IO_INTERNAL_TERM_ISSUED; in fnic_clean_pending_aborts()
2116 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_clean_pending_aborts()
2119 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_clean_pending_aborts()
2126 if (CMD_ABTS_STATUS(sc) == FCPIO_INVALID_CODE) { in fnic_clean_pending_aborts()
2128 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_DONE; in fnic_clean_pending_aborts()
2132 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_clean_pending_aborts()
2133 CMD_SP(sc) = NULL; in fnic_clean_pending_aborts()
2136 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_clean_pending_aborts()
2155 fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_start_tag() argument
2174 bqt->tag_index[tag] = sc->request; in fnic_scsi_host_start_tag()
2175 sc->request->tag = tag; in fnic_scsi_host_start_tag()
2176 sc->tag = tag; in fnic_scsi_host_start_tag()
2177 if (!sc->request->special) in fnic_scsi_host_start_tag()
2178 sc->request->special = sc; in fnic_scsi_host_start_tag()
2191 fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_end_tag() argument
2194 int tag = sc->request->tag; in fnic_scsi_host_end_tag()
2214 int fnic_device_reset(struct scsi_cmnd *sc) in fnic_device_reset() argument
2233 fc_block_scsi_eh(sc); in fnic_device_reset()
2236 lp = shost_priv(sc->device->host); in fnic_device_reset()
2244 rport = starget_to_rport(scsi_target(sc->device)); in fnic_device_reset()
2247 rport->port_id, sc->device->lun, sc); in fnic_device_reset()
2258 CMD_FLAGS(sc) = FNIC_DEVICE_RESET; in fnic_device_reset()
2261 tag = sc->request->tag; in fnic_device_reset()
2276 if (shost_use_blk_mq(sc->device->host)) in fnic_device_reset()
2279 tag = fnic_scsi_host_start_tag(fnic, sc); in fnic_device_reset()
2284 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_device_reset()
2286 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2300 CMD_SP(sc) = (char *)io_req; in fnic_device_reset()
2303 CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING; in fnic_device_reset()
2304 CMD_LR_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_device_reset()
2313 if (fnic_queue_dr_io_req(fnic, sc, io_req)) { in fnic_device_reset()
2315 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2321 CMD_FLAGS(sc) |= FNIC_DEV_RST_ISSUED; in fnic_device_reset()
2332 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2336 "io_req is null tag 0x%x sc 0x%p\n", tag, sc); in fnic_device_reset()
2341 status = CMD_LR_STATUS(sc); in fnic_device_reset()
2351 CMD_FLAGS(sc) |= FNIC_DEV_RST_TIMED_OUT; in fnic_device_reset()
2353 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_device_reset()
2360 if (CMD_FLAGS(sc) & FNIC_DEV_RST_TERM_ISSUED) { in fnic_device_reset()
2373 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_device_reset()
2374 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_device_reset()
2379 "tag 0x%x sc 0x%p\n", tag, sc); in fnic_device_reset()
2385 if (!(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) { in fnic_device_reset()
2391 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2406 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2417 if (fnic_clean_pending_aborts(fnic, sc)) { in fnic_device_reset()
2419 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2428 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2435 CMD_SP(sc) = NULL; in fnic_device_reset()
2441 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_device_reset()
2446 FNIC_TRACE(fnic_device_reset, sc->device->host->host_no, in fnic_device_reset()
2447 sc->request->tag, sc, in fnic_device_reset()
2449 0, ((u64)sc->cmnd[0] << 32 | in fnic_device_reset()
2450 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_device_reset()
2451 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_device_reset()
2452 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_device_reset()
2456 fnic_scsi_host_end_tag(fnic, sc); in fnic_device_reset()
2514 int fnic_host_reset(struct scsi_cmnd *sc) in fnic_host_reset() argument
2518 struct Scsi_Host *shost = sc->device->host; in fnic_host_reset()
2672 struct scsi_cmnd *sc; in fnic_is_abts_pending() local
2680 sc = scsi_host_find_tag(fnic->lport->host, tag); in fnic_is_abts_pending()
2685 if (!sc || (lr_sc && (sc->device != lun_dev || sc == lr_sc))) in fnic_is_abts_pending()
2688 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_is_abts_pending()
2691 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_is_abts_pending()
2693 if (!io_req || sc->device != lun_dev) { in fnic_is_abts_pending()
2704 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_is_abts_pending()
2706 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_is_abts_pending()