• Home
  • Raw
  • Download

Lines Matching refs:sc

108 					    struct scsi_cmnd *sc)  in fnic_io_lock_hash()  argument
110 u32 hash = scsi_cmd_to_rq(sc)->tag & (FNIC_IO_LOCKS - 1); in fnic_io_lock_hash()
127 struct scsi_cmnd *sc) in fnic_release_ioreq_buf() argument
133 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()
355 sc->sense_buffer, in fnic_queue_wq_copy_desc()
366 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_queue_wq_copy_desc()
383 if (sc->sc_data_direction == DMA_FROM_DEVICE) in fnic_queue_wq_copy_desc()
385 else if (sc->sc_data_direction == DMA_TO_DEVICE) in fnic_queue_wq_copy_desc()
393 fnic_queue_wq_copy_desc_icmnd_16(wq, scsi_cmd_to_rq(sc)->tag, in fnic_queue_wq_copy_desc()
402 sc->cmnd, sc->cmd_len, in fnic_queue_wq_copy_desc()
403 scsi_bufflen(sc), in fnic_queue_wq_copy_desc()
423 static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) in fnic_queuecommand_lck() argument
425 const int tag = scsi_cmd_to_rq(sc)->tag; in fnic_queuecommand_lck()
426 struct fc_lport *lp = shost_priv(sc->device->host); in fnic_queuecommand_lck()
447 rport = starget_to_rport(scsi_target(sc->device)); in fnic_queuecommand_lck()
451 sc->result = DID_NO_CONNECT << 16; in fnic_queuecommand_lck()
452 done(sc); in fnic_queuecommand_lck()
461 sc->result = ret; in fnic_queuecommand_lck()
462 done(sc); in fnic_queuecommand_lck()
473 sc->result = DID_NO_CONNECT<<16; in fnic_queuecommand_lck()
474 done(sc); in fnic_queuecommand_lck()
483 sc->result = DID_IMM_RETRY << 16; in fnic_queuecommand_lck()
484 done(sc); in fnic_queuecommand_lck()
499 CMD_STATE(sc) = FNIC_IOREQ_NOT_INITED; in fnic_queuecommand_lck()
500 CMD_FLAGS(sc) = FNIC_NO_FLAGS; in fnic_queuecommand_lck()
512 sg_count = scsi_dma_map(sc); in fnic_queuecommand_lck()
514 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
515 tag, sc, 0, sc->cmnd[0], sg_count, CMD_STATE(sc)); in fnic_queuecommand_lck()
533 scsi_dma_unmap(sc); in fnic_queuecommand_lck()
553 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_queuecommand_lck()
560 CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING; in fnic_queuecommand_lck()
561 CMD_SP(sc) = (char *)io_req; in fnic_queuecommand_lck()
562 CMD_FLAGS(sc) |= FNIC_IO_INITIALIZED; in fnic_queuecommand_lck()
563 sc->scsi_done = done; in fnic_queuecommand_lck()
567 ret = fnic_queue_wq_copy_desc(fnic, wq, io_req, sc, sg_count); in fnic_queuecommand_lck()
573 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
574 tag, sc, 0, 0, 0, in fnic_queuecommand_lck()
575 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_queuecommand_lck()
576 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_queuecommand_lck()
577 CMD_SP(sc) = NULL; in fnic_queuecommand_lck()
578 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_queuecommand_lck()
581 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_queuecommand_lck()
597 CMD_FLAGS(sc) |= FNIC_IO_ISSUED; in fnic_queuecommand_lck()
600 cmd_trace = ((u64)sc->cmnd[0] << 56 | (u64)sc->cmnd[7] << 40 | in fnic_queuecommand_lck()
601 (u64)sc->cmnd[8] << 32 | (u64)sc->cmnd[2] << 24 | in fnic_queuecommand_lck()
602 (u64)sc->cmnd[3] << 16 | (u64)sc->cmnd[4] << 8 | in fnic_queuecommand_lck()
603 sc->cmnd[5]); in fnic_queuecommand_lck()
605 FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no, in fnic_queuecommand_lck()
606 tag, sc, io_req, sg_count, cmd_trace, in fnic_queuecommand_lck()
607 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_queuecommand_lck()
829 struct scsi_cmnd *sc; in fnic_fcpio_icmnd_cmpl_handler() local
849 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_fcpio_icmnd_cmpl_handler()
850 WARN_ON_ONCE(!sc); in fnic_fcpio_icmnd_cmpl_handler()
851 if (!sc) { in fnic_fcpio_icmnd_cmpl_handler()
868 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_icmnd_cmpl_handler()
870 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_fcpio_icmnd_cmpl_handler()
874 CMD_FLAGS(sc) |= FNIC_IO_REQ_NULL; in fnic_fcpio_icmnd_cmpl_handler()
879 fnic_fcpio_status_to_str(hdr_status), id, sc); in fnic_fcpio_icmnd_cmpl_handler()
891 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_icmnd_cmpl_handler()
897 CMD_FLAGS(sc) |= FNIC_IO_DONE; in fnic_fcpio_icmnd_cmpl_handler()
898 CMD_FLAGS(sc) |= FNIC_IO_ABTS_PENDING; in fnic_fcpio_icmnd_cmpl_handler()
901 CMD_FLAGS(sc) |= FNIC_IO_ABORTED; in fnic_fcpio_icmnd_cmpl_handler()
908 id, sc, in fnic_fcpio_icmnd_cmpl_handler()
915 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_fcpio_icmnd_cmpl_handler()
921 sc->result = (DID_OK << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
922 xfer_len = scsi_bufflen(sc); in fnic_fcpio_icmnd_cmpl_handler()
926 scsi_set_resid(sc, icmnd_cmpl->residual); in fnic_fcpio_icmnd_cmpl_handler()
938 sc->result = (DID_TIME_OUT << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
943 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
948 scsi_set_resid(sc, icmnd_cmpl->residual); in fnic_fcpio_icmnd_cmpl_handler()
949 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
954 sc->result = (DID_REQUEUE << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
959 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
964 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
969 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
974 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
981 sc->result = (DID_ERROR << 16) | icmnd_cmpl->scsi_status; in fnic_fcpio_icmnd_cmpl_handler()
986 CMD_SP(sc) = NULL; in fnic_fcpio_icmnd_cmpl_handler()
987 CMD_FLAGS(sc) |= FNIC_IO_DONE; in fnic_fcpio_icmnd_cmpl_handler()
997 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_icmnd_cmpl_handler()
1003 (u64)icmnd_cmpl->flags << 40 | (u64)sc->cmnd[0] << 32 | in fnic_fcpio_icmnd_cmpl_handler()
1004 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_fcpio_icmnd_cmpl_handler()
1005 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]; in fnic_fcpio_icmnd_cmpl_handler()
1008 sc->device->host->host_no, id, sc, in fnic_fcpio_icmnd_cmpl_handler()
1013 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_icmnd_cmpl_handler()
1015 if (sc->sc_data_direction == DMA_FROM_DEVICE) { in fnic_fcpio_icmnd_cmpl_handler()
1018 } else if (sc->sc_data_direction == DMA_TO_DEVICE) { in fnic_fcpio_icmnd_cmpl_handler()
1054 if (sc->scsi_done) in fnic_fcpio_icmnd_cmpl_handler()
1055 sc->scsi_done(sc); in fnic_fcpio_icmnd_cmpl_handler()
1068 struct scsi_cmnd *sc; in fnic_fcpio_itmf_cmpl_handler() local
1088 sc = scsi_host_find_tag(fnic->lport->host, id & FNIC_TAG_MASK); in fnic_fcpio_itmf_cmpl_handler()
1089 WARN_ON_ONCE(!sc); in fnic_fcpio_itmf_cmpl_handler()
1090 if (!sc) { in fnic_fcpio_itmf_cmpl_handler()
1097 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_fcpio_itmf_cmpl_handler()
1099 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_fcpio_itmf_cmpl_handler()
1104 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_fcpio_itmf_cmpl_handler()
1108 fnic_fcpio_status_to_str(hdr_status), id, sc); in fnic_fcpio_itmf_cmpl_handler()
1119 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_fcpio_itmf_cmpl_handler()
1120 CMD_ABTS_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1121 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_fcpio_itmf_cmpl_handler()
1131 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1143 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1150 if (CMD_FLAGS(sc) & FNIC_IO_ABTS_ISSUED) in fnic_fcpio_itmf_cmpl_handler()
1157 if (CMD_STATE(sc) != FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_itmf_cmpl_handler()
1163 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_DONE; in fnic_fcpio_itmf_cmpl_handler()
1164 CMD_ABTS_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1168 CMD_ABTS_STATUS(sc) = FCPIO_SUCCESS; in fnic_fcpio_itmf_cmpl_handler()
1170 if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE))) in fnic_fcpio_itmf_cmpl_handler()
1189 CMD_SP(sc) = NULL; in fnic_fcpio_itmf_cmpl_handler()
1190 sc->result = (DID_ERROR << 16); in fnic_fcpio_itmf_cmpl_handler()
1194 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_fcpio_itmf_cmpl_handler()
1196 if (sc->scsi_done) { in fnic_fcpio_itmf_cmpl_handler()
1198 sc->device->host->host_no, id, in fnic_fcpio_itmf_cmpl_handler()
1199 sc, in fnic_fcpio_itmf_cmpl_handler()
1203 (u64)sc->cmnd[0] << 32 | in fnic_fcpio_itmf_cmpl_handler()
1204 (u64)sc->cmnd[2] << 24 | in fnic_fcpio_itmf_cmpl_handler()
1205 (u64)sc->cmnd[3] << 16 | in fnic_fcpio_itmf_cmpl_handler()
1206 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_fcpio_itmf_cmpl_handler()
1207 (((u64)CMD_FLAGS(sc) << 32) | in fnic_fcpio_itmf_cmpl_handler()
1208 CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1209 sc->scsi_done(sc); in fnic_fcpio_itmf_cmpl_handler()
1220 CMD_LR_STATUS(sc) = hdr_status; in fnic_fcpio_itmf_cmpl_handler()
1221 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_fcpio_itmf_cmpl_handler()
1223 CMD_FLAGS(sc) |= FNIC_DEV_RST_ABTS_PENDING; in fnic_fcpio_itmf_cmpl_handler()
1225 sc->device->host->host_no, id, sc, in fnic_fcpio_itmf_cmpl_handler()
1228 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1236 if (CMD_FLAGS(sc) & FNIC_DEV_RST_TIMED_OUT) { in fnic_fcpio_itmf_cmpl_handler()
1240 sc->device->host->host_no, id, sc, in fnic_fcpio_itmf_cmpl_handler()
1243 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_fcpio_itmf_cmpl_handler()
1251 CMD_STATE(sc) = FNIC_IOREQ_CMD_COMPLETE; in fnic_fcpio_itmf_cmpl_handler()
1252 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_fcpio_itmf_cmpl_handler()
1264 fnic_ioreq_state_to_str(CMD_STATE(sc)), id); in fnic_fcpio_itmf_cmpl_handler()
1363 static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data, in fnic_cleanup_io_iter() argument
1366 const int tag = scsi_cmd_to_rq(sc)->tag; in fnic_cleanup_io_iter()
1377 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_cleanup_io_iter()
1378 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_cleanup_io_iter()
1379 !(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) { in fnic_cleanup_io_iter()
1384 CMD_FLAGS(sc) |= FNIC_DEV_RST_DONE; in fnic_cleanup_io_iter()
1391 } else if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_cleanup_io_iter()
1400 CMD_SP(sc) = NULL; in fnic_cleanup_io_iter()
1409 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_cleanup_io_iter()
1413 sc->result = DID_TRANSPORT_DISRUPTED << 16; in fnic_cleanup_io_iter()
1416 tag, sc, jiffies - start_time); in fnic_cleanup_io_iter()
1424 if (sc->scsi_done) { in fnic_cleanup_io_iter()
1425 if (!(CMD_FLAGS(sc) & FNIC_IO_ISSUED)) in fnic_cleanup_io_iter()
1428 tag, sc); in fnic_cleanup_io_iter()
1431 sc->device->host->host_no, tag, sc, in fnic_cleanup_io_iter()
1433 0, ((u64)sc->cmnd[0] << 32 | in fnic_cleanup_io_iter()
1434 (u64)sc->cmnd[2] << 24 | in fnic_cleanup_io_iter()
1435 (u64)sc->cmnd[3] << 16 | in fnic_cleanup_io_iter()
1436 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_cleanup_io_iter()
1437 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_cleanup_io_iter()
1439 sc->scsi_done(sc); in fnic_cleanup_io_iter()
1456 struct scsi_cmnd *sc; in fnic_wq_copy_cleanup_handler() local
1468 sc = scsi_host_find_tag(fnic->lport->host, id); in fnic_wq_copy_cleanup_handler()
1469 if (!sc) in fnic_wq_copy_cleanup_handler()
1472 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_wq_copy_cleanup_handler()
1476 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_wq_copy_cleanup_handler()
1485 CMD_SP(sc) = NULL; in fnic_wq_copy_cleanup_handler()
1490 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_wq_copy_cleanup_handler()
1494 sc->result = DID_NO_CONNECT << 16; in fnic_wq_copy_cleanup_handler()
1498 if (sc->scsi_done) { in fnic_wq_copy_cleanup_handler()
1500 sc->device->host->host_no, id, sc, in fnic_wq_copy_cleanup_handler()
1502 0, ((u64)sc->cmnd[0] << 32 | in fnic_wq_copy_cleanup_handler()
1503 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_wq_copy_cleanup_handler()
1504 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_wq_copy_cleanup_handler()
1505 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_wq_copy_cleanup_handler()
1507 sc->scsi_done(sc); in fnic_wq_copy_cleanup_handler()
1564 static bool fnic_rport_abort_io_iter(struct scsi_cmnd *sc, void *data, in fnic_rport_abort_io_iter() argument
1569 int abt_tag = scsi_cmd_to_rq(sc)->tag; in fnic_rport_abort_io_iter()
1581 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_rport_abort_io_iter()
1588 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_rport_abort_io_iter()
1589 (!(CMD_FLAGS(sc) & FNIC_DEV_RST_ISSUED))) { in fnic_rport_abort_io_iter()
1592 sc); in fnic_rport_abort_io_iter()
1601 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_rport_abort_io_iter()
1609 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_rport_abort_io_iter()
1612 if (!(CMD_FLAGS(sc) & FNIC_IO_ISSUED)) { in fnic_rport_abort_io_iter()
1617 sc, abt_tag, CMD_FLAGS(sc), CMD_STATE(sc)); in fnic_rport_abort_io_iter()
1619 old_ioreq_state = CMD_STATE(sc); in fnic_rport_abort_io_iter()
1620 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_rport_abort_io_iter()
1621 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_rport_abort_io_iter()
1622 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_rport_abort_io_iter()
1627 "fnic_rport_exch_reset dev rst sc 0x%p\n", sc); in fnic_rport_abort_io_iter()
1636 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_rport_abort_io_iter()
1648 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_rport_abort_io_iter()
1649 CMD_STATE(sc) = old_ioreq_state; in fnic_rport_abort_io_iter()
1653 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) in fnic_rport_abort_io_iter()
1654 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_rport_abort_io_iter()
1656 CMD_FLAGS(sc) |= FNIC_IO_INTERNAL_TERM_ISSUED; in fnic_rport_abort_io_iter()
1728 int fnic_abort_cmd(struct scsi_cmnd *sc) in fnic_abort_cmd() argument
1730 struct request *const rq = scsi_cmd_to_rq(sc); in fnic_abort_cmd()
1750 fc_block_scsi_eh(sc); in fnic_abort_cmd()
1753 lp = shost_priv(sc->device->host); in fnic_abort_cmd()
1760 rport = starget_to_rport(scsi_target(sc->device)); in fnic_abort_cmd()
1764 rport->port_id, sc->device->lun, tag, CMD_FLAGS(sc)); in fnic_abort_cmd()
1766 CMD_FLAGS(sc) = FNIC_NO_FLAGS; in fnic_abort_cmd()
1785 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_abort_cmd()
1787 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1795 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_abort_cmd()
1817 "CBD Opcode: %02x Abort issued time: %lu msec\n", sc->cmnd[0], abt_issued_time); in fnic_abort_cmd()
1824 old_ioreq_state = CMD_STATE(sc); in fnic_abort_cmd()
1825 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_abort_cmd()
1826 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_abort_cmd()
1843 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_abort_cmd()
1848 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_abort_cmd()
1849 CMD_STATE(sc) = old_ioreq_state; in fnic_abort_cmd()
1850 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1858 CMD_FLAGS(sc) |= FNIC_IO_ABTS_ISSUED; in fnic_abort_cmd()
1861 CMD_FLAGS(sc) |= FNIC_IO_TERM_ISSUED; in fnic_abort_cmd()
1879 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abort_cmd()
1883 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_abort_cmd()
1890 if (CMD_ABTS_STATUS(sc) == FCPIO_INVALID_CODE) { in fnic_abort_cmd()
1897 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_TIMED_OUT; in fnic_abort_cmd()
1904 if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE))) { in fnic_abort_cmd()
1913 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_abort_cmd()
1921 if (CMD_ABTS_STATUS(sc) == FCPIO_SUCCESS) in fnic_abort_cmd()
1922 CMD_SP(sc) = NULL; in fnic_abort_cmd()
1931 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_abort_cmd()
1934 if (sc->scsi_done) { in fnic_abort_cmd()
1936 sc->result = (DID_ABORT << 16); in fnic_abort_cmd()
1937 sc->scsi_done(sc); in fnic_abort_cmd()
1946 FNIC_TRACE(fnic_abort_cmd, sc->device->host->host_no, tag, sc, in fnic_abort_cmd()
1948 0, ((u64)sc->cmnd[0] << 32 | in fnic_abort_cmd()
1949 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_abort_cmd()
1950 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_abort_cmd()
1951 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_abort_cmd()
1961 struct scsi_cmnd *sc, in fnic_queue_dr_io_req() argument
1994 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_queue_dr_io_req()
1996 fnic_queue_wq_copy_desc_itmf(wq, scsi_cmd_to_rq(sc)->tag | FNIC_TAG_DEV_RST, in fnic_queue_dr_io_req()
2021 static bool fnic_pending_aborts_iter(struct scsi_cmnd *sc, in fnic_pending_aborts_iter() argument
2027 int abt_tag = scsi_cmd_to_rq(sc)->tag; in fnic_pending_aborts_iter()
2035 if (sc == iter_data->lr_sc || sc->device != lun_dev) in fnic_pending_aborts_iter()
2042 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_pending_aborts_iter()
2054 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_pending_aborts_iter()
2056 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) { in fnic_pending_aborts_iter()
2060 if ((CMD_FLAGS(sc) & FNIC_DEVICE_RESET) && in fnic_pending_aborts_iter()
2061 (!(CMD_FLAGS(sc) & FNIC_DEV_RST_ISSUED))) { in fnic_pending_aborts_iter()
2064 sc); in fnic_pending_aborts_iter()
2072 __func__, fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_pending_aborts_iter()
2073 old_ioreq_state = CMD_STATE(sc); in fnic_pending_aborts_iter()
2081 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_pending_aborts_iter()
2085 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) { in fnic_pending_aborts_iter()
2088 "%s: dev rst sc 0x%p\n", __func__, sc); in fnic_pending_aborts_iter()
2091 CMD_ABTS_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_pending_aborts_iter()
2096 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_pending_aborts_iter()
2102 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_pending_aborts_iter()
2105 if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING) in fnic_pending_aborts_iter()
2106 CMD_STATE(sc) = old_ioreq_state; in fnic_pending_aborts_iter()
2112 if (CMD_FLAGS(sc) & FNIC_DEVICE_RESET) in fnic_pending_aborts_iter()
2113 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_pending_aborts_iter()
2116 CMD_FLAGS(sc) |= FNIC_IO_INTERNAL_TERM_ISSUED; in fnic_pending_aborts_iter()
2123 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_pending_aborts_iter()
2126 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_REQ_NULL; in fnic_pending_aborts_iter()
2133 if (CMD_ABTS_STATUS(sc) == FCPIO_INVALID_CODE) { in fnic_pending_aborts_iter()
2135 CMD_FLAGS(sc) |= FNIC_IO_ABT_TERM_DONE; in fnic_pending_aborts_iter()
2139 CMD_STATE(sc) = FNIC_IOREQ_ABTS_COMPLETE; in fnic_pending_aborts_iter()
2142 if (sc != iter_data->lr_sc) in fnic_pending_aborts_iter()
2143 CMD_SP(sc) = NULL; in fnic_pending_aborts_iter()
2147 if (sc != iter_data->lr_sc) { in fnic_pending_aborts_iter()
2148 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_pending_aborts_iter()
2156 if (sc->scsi_done) { in fnic_pending_aborts_iter()
2158 sc->result = DID_RESET << 16; in fnic_pending_aborts_iter()
2159 sc->scsi_done(sc); in fnic_pending_aborts_iter()
2208 fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_start_tag() argument
2210 struct request *rq = scsi_cmd_to_rq(sc); in fnic_scsi_host_start_tag()
2219 sc->host_scribble = (unsigned char *)dummy; in fnic_scsi_host_start_tag()
2229 fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc) in fnic_scsi_host_end_tag() argument
2231 struct request *dummy = (struct request *)sc->host_scribble; in fnic_scsi_host_end_tag()
2241 int fnic_device_reset(struct scsi_cmnd *sc) in fnic_device_reset() argument
2243 struct request *rq = scsi_cmd_to_rq(sc); in fnic_device_reset()
2262 fc_block_scsi_eh(sc); in fnic_device_reset()
2265 lp = shost_priv(sc->device->host); in fnic_device_reset()
2273 rport = starget_to_rport(scsi_target(sc->device)); in fnic_device_reset()
2276 rport->port_id, sc->device->lun, sc); in fnic_device_reset()
2287 CMD_FLAGS(sc) = FNIC_DEVICE_RESET; in fnic_device_reset()
2295 tag = fnic_scsi_host_start_tag(fnic, sc); in fnic_device_reset()
2301 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_device_reset()
2303 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2317 CMD_SP(sc) = (char *)io_req; in fnic_device_reset()
2320 CMD_STATE(sc) = FNIC_IOREQ_CMD_PENDING; in fnic_device_reset()
2321 CMD_LR_STATUS(sc) = FCPIO_INVALID_CODE; in fnic_device_reset()
2330 if (fnic_queue_dr_io_req(fnic, sc, io_req)) { in fnic_device_reset()
2332 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2338 CMD_FLAGS(sc) |= FNIC_DEV_RST_ISSUED; in fnic_device_reset()
2349 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2353 "io_req is null tag 0x%x sc 0x%p\n", tag, sc); in fnic_device_reset()
2358 status = CMD_LR_STATUS(sc); in fnic_device_reset()
2368 CMD_FLAGS(sc) |= FNIC_DEV_RST_TIMED_OUT; in fnic_device_reset()
2370 int_to_scsilun(sc->device->lun, &fc_lun); in fnic_device_reset()
2377 if (CMD_FLAGS(sc) & FNIC_DEV_RST_TERM_ISSUED) { in fnic_device_reset()
2390 CMD_FLAGS(sc) |= FNIC_DEV_RST_TERM_ISSUED; in fnic_device_reset()
2391 CMD_STATE(sc) = FNIC_IOREQ_ABTS_PENDING; in fnic_device_reset()
2396 "tag 0x%x sc 0x%p\n", tag, sc); in fnic_device_reset()
2402 if (!(CMD_FLAGS(sc) & FNIC_DEV_RST_DONE)) { in fnic_device_reset()
2408 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2423 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2434 if (fnic_clean_pending_aborts(fnic, sc, new_sc)) { in fnic_device_reset()
2436 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2445 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_device_reset()
2452 CMD_SP(sc) = NULL; in fnic_device_reset()
2458 fnic_release_ioreq_buf(fnic, io_req, sc); in fnic_device_reset()
2463 FNIC_TRACE(fnic_device_reset, sc->device->host->host_no, rq->tag, sc, in fnic_device_reset()
2465 0, ((u64)sc->cmnd[0] << 32 | in fnic_device_reset()
2466 (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 | in fnic_device_reset()
2467 (u64)sc->cmnd[4] << 8 | sc->cmnd[5]), in fnic_device_reset()
2468 (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc))); in fnic_device_reset()
2472 fnic_scsi_host_end_tag(fnic, sc); in fnic_device_reset()
2530 int fnic_host_reset(struct scsi_cmnd *sc) in fnic_host_reset() argument
2534 struct Scsi_Host *shost = sc->device->host; in fnic_host_reset()
2691 static bool fnic_abts_pending_iter(struct scsi_cmnd *sc, void *data, in fnic_abts_pending_iter() argument
2705 if (iter_data->lr_sc && sc == iter_data->lr_sc) in fnic_abts_pending_iter()
2707 if (iter_data->lun_dev && sc->device != iter_data->lun_dev) in fnic_abts_pending_iter()
2710 io_lock = fnic_io_lock_hash(fnic, sc); in fnic_abts_pending_iter()
2713 io_req = (struct fnic_io_req *)CMD_SP(sc); in fnic_abts_pending_iter()
2725 fnic_ioreq_state_to_str(CMD_STATE(sc))); in fnic_abts_pending_iter()
2726 cmd_state = CMD_STATE(sc); in fnic_abts_pending_iter()