Lines Matching refs:task

92 static void stmf_abort_task_offline(scsi_task_t *task, int offline_lu,
111 void stmf_abort_target_reset(scsi_task_t *task);
112 stmf_status_t stmf_lun_reset_poll(stmf_lu_t *lu, struct scsi_task *task,
114 void stmf_target_reset_poll(struct scsi_task *task);
115 void stmf_handle_lun_reset(scsi_task_t *task);
116 void stmf_handle_target_reset(scsi_task_t *task);
129 static void stmf_task_lu_free(scsi_task_t *task, stmf_i_scsi_session_t *iss);
1762 scsi_task_t *task; in stmf_ic_rx_scsi_status() local
1769 task = find_task_from_msgid(msg->icss_lun_id, msg->icss_task_msgid); in stmf_ic_rx_scsi_status()
1771 if (task == NULL) { in stmf_ic_rx_scsi_status()
1775 task->task_scsi_status = msg->icss_status; in stmf_ic_rx_scsi_status()
1776 task->task_sense_data = msg->icss_sense; in stmf_ic_rx_scsi_status()
1777 task->task_sense_length = msg->icss_sense_len; in stmf_ic_rx_scsi_status()
1778 (void) stmf_send_scsi_status(task, STMF_IOF_LU_DONE); in stmf_ic_rx_scsi_status()
1790 scsi_task_t *task; in stmf_ic_rx_scsi_data() local
1800 task = find_task_from_msgid(msg->icsd_lun_id, msg->icsd_task_msgid); in stmf_ic_rx_scsi_data()
1801 if (task == NULL) { in stmf_ic_rx_scsi_data()
1824 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_ic_rx_scsi_data()
1827 task->task_cmd_xfer_length += msg->icsd_data_len; in stmf_ic_rx_scsi_data()
1829 if (task->task_additional_flags & in stmf_ic_rx_scsi_data()
1831 task->task_expected_xfer_length = in stmf_ic_rx_scsi_data()
1832 task->task_cmd_xfer_length; in stmf_ic_rx_scsi_data()
1835 sz = min(task->task_expected_xfer_length, in stmf_ic_rx_scsi_data()
1836 task->task_cmd_xfer_length); in stmf_ic_rx_scsi_data()
1843 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_ic_rx_scsi_data()
1857 dbuf = stmf_alloc_dbuf(task, sz, &minsz, 0); in stmf_ic_rx_scsi_data()
1860 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_ic_rx_scsi_data()
1865 dbuf->db_relative_offset = task->task_nbytes_transferred; in stmf_ic_rx_scsi_data()
1869 (void) stmf_xfer_data(task, dbuf, 0); in stmf_ic_rx_scsi_data()
1874 stmf_proxy_scsi_cmd(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_proxy_scsi_cmd() argument
1877 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_proxy_scsi_cmd()
1879 (stmf_i_local_port_t *)task->task_lport->lport_stmf_private; in stmf_proxy_scsi_cmd()
1908 if (task->task_mgmt_function) { in stmf_proxy_scsi_cmd()
1919 task, dbuf->db_data_size, dbuf->db_sglist[0].seg_addr, in stmf_proxy_scsi_cmd()
1923 task, 0, NULL, itask->itask_proxy_msg_id); in stmf_proxy_scsi_cmd()
2737 stmf_update_kstat_lu_q(scsi_task_t *task, void func()) in stmf_update_kstat_lu_q() argument
2742 if (task->task_lu == dlun0) in stmf_update_kstat_lu_q()
2744 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_update_kstat_lu_q()
2757 stmf_update_kstat_lport_q(scsi_task_t *task, void func()) in stmf_update_kstat_lport_q() argument
2762 ilp = (stmf_i_local_port_t *)task->task_lport->lport_stmf_private; in stmf_update_kstat_lport_q()
2774 stmf_update_kstat_lport_io(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_update_kstat_lport_io() argument
2779 ilp = (stmf_i_local_port_t *)task->task_lport->lport_stmf_private; in stmf_update_kstat_lport_io()
2791 stmf_update_kstat_rport_io(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_update_kstat_rport_io() argument
2797 iss = task->task_session->ss_stmf_private; in stmf_update_kstat_rport_io()
2808 stmf_update_kstat_rport_estat(scsi_task_t *task) in stmf_update_kstat_rport_estat() argument
2817 itask = task->task_stmf_private; in stmf_update_kstat_rport_estat()
2818 iss = task->task_session->ss_stmf_private; in stmf_update_kstat_rport_estat()
2829 if (task->task_flags & TF_READ_DATA) in stmf_update_kstat_rport_estat()
2831 else if (task->task_flags & TF_WRITE_DATA) in stmf_update_kstat_rport_estat()
2842 (task->task_flags & TF_INITIAL_BURST)) { in stmf_update_kstat_rport_estat()
2852 if (task->task_flags & TF_READ_DATA) { in stmf_update_kstat_rport_estat()
2855 } else if (task->task_flags & TF_WRITE_DATA) { in stmf_update_kstat_rport_estat()
2881 stmf_update_kstat_lu_io(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_update_kstat_lu_io() argument
2886 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_update_kstat_lu_io()
4223 stmf_alloc_dbuf(scsi_task_t *task, uint32_t size, uint32_t *pminsize, in stmf_alloc_dbuf() argument
4227 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_alloc_dbuf()
4228 stmf_local_port_t *lport = task->task_lport; in stmf_alloc_dbuf()
4236 task, size, pminsize, flags); in stmf_alloc_dbuf()
4238 task->task_cur_nbufs++; in stmf_alloc_dbuf()
4249 stmf_setup_dbuf(scsi_task_t *task, stmf_data_buf_t *dbuf, uint32_t flags) in stmf_setup_dbuf() argument
4252 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_setup_dbuf()
4253 stmf_local_port_t *lport = task->task_lport; in stmf_setup_dbuf()
4257 ASSERT(task->task_additional_flags & TASK_AF_ACCEPT_LU_DBUF); in stmf_setup_dbuf()
4261 if ((task->task_additional_flags & TASK_AF_ACCEPT_LU_DBUF) == 0) in stmf_setup_dbuf()
4269 ret = lport->lport_ds->ds_setup_dbuf(task, dbuf, flags); in stmf_setup_dbuf()
4273 task->task_cur_nbufs++; in stmf_setup_dbuf()
4281 stmf_teardown_dbuf(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_teardown_dbuf() argument
4284 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_teardown_dbuf()
4285 stmf_local_port_t *lport = task->task_lport; in stmf_teardown_dbuf()
4287 ASSERT(task->task_additional_flags & TASK_AF_ACCEPT_LU_DBUF); in stmf_teardown_dbuf()
4292 task->task_cur_nbufs--; in stmf_teardown_dbuf()
4297 stmf_free_dbuf(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_free_dbuf() argument
4300 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_free_dbuf()
4301 stmf_local_port_t *lport = task->task_lport; in stmf_free_dbuf()
4304 task->task_cur_nbufs--; in stmf_free_dbuf()
4309 stmf_handle_to_buf(scsi_task_t *task, uint8_t h) in stmf_handle_to_buf() argument
4313 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_handle_to_buf()
4329 scsi_task_t *task; in stmf_task_alloc() local
4410 task = itask->itask_task; in stmf_task_alloc()
4411 save_cdb = task->task_cdb; /* save */ in stmf_task_alloc()
4412 t_start = (uintptr_t)&task->task_flags; in stmf_task_alloc()
4413 t_end = (uintptr_t)&task->task_extended_cmd; in stmf_task_alloc()
4415 task->task_cdb = save_cdb; /* restore */ in stmf_task_alloc()
4418 task = (scsi_task_t *)stmf_alloc(STMF_STRUCT_SCSI_TASK, in stmf_task_alloc()
4420 if (task == NULL) { in stmf_task_alloc()
4424 task->task_lu = lu; in stmf_task_alloc()
4425 task->task_cdb = (uint8_t *)task->task_port_private; in stmf_task_alloc()
4426 if ((ulong_t)(task->task_cdb) & 7ul) { in stmf_task_alloc()
4427 task->task_cdb = (uint8_t *)(((ulong_t) in stmf_task_alloc()
4428 (task->task_cdb) + 7ul) & ~(7ul)); in stmf_task_alloc()
4430 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_task_alloc()
4441 l = task->task_lun_no; in stmf_task_alloc()
4452 task->task_session = ss; in stmf_task_alloc()
4453 task->task_lport = lport; in stmf_task_alloc()
4454 task->task_cdb_length = cdb_length_in; in stmf_task_alloc()
4466 if (lu->lu_task_alloc(task) != STMF_SUCCESS) { in stmf_task_alloc()
4468 stmf_free(task); in stmf_task_alloc()
4475 stmf_free(task); in stmf_task_alloc()
4494 task->task_lu_itl_handle = itask->itask_itl_datap->itl_handle; in stmf_task_alloc()
4497 task->task_lu_itl_handle = NULL; in stmf_task_alloc()
4501 return (task); in stmf_task_alloc()
4506 stmf_task_lu_free(scsi_task_t *task, stmf_i_scsi_session_t *iss) in stmf_task_lu_free() argument
4509 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_task_lu_free()
4510 stmf_i_lu_t *ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_task_lu_free()
4648 scsi_task_t *task; in stmf_do_ilu_timeouts() local
4668 task = itask->itask_task; in stmf_do_ilu_timeouts()
4669 if (task->task_timeout == 0) in stmf_do_ilu_timeouts()
4672 to = task->task_timeout; in stmf_do_ilu_timeouts()
4679 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_do_ilu_timeouts()
4770 scsi_task_t *task = itask->itask_task; in stmf_free_task_bufs() local
4771 stmf_lu_t *lu = task->task_lu; in stmf_free_task_bufs()
4773 lu->lu_dbuf_free(task, dbuf); in stmf_free_task_bufs()
4789 stmf_task_free(scsi_task_t *task) in stmf_task_free() argument
4791 stmf_local_port_t *lport = task->task_lport; in stmf_task_free()
4793 task->task_stmf_private; in stmf_task_free()
4795 task->task_session->ss_stmf_private; in stmf_task_free()
4796 stmf_lu_t *lu = task->task_lu; in stmf_task_free()
4801 lu->lu_task_done(task); in stmf_task_free()
4804 DTRACE_PROBE2(stmf__task__end, scsi_task_t *, task, in stmf_task_free()
4810 stmf_release_itl_handle(task->task_lu, in stmf_task_free()
4823 lport->lport_task_free(task); in stmf_task_free()
4832 stmf_task_lu_free(task, iss); in stmf_task_free()
4837 stmf_post_task(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_post_task() argument
4840 task->task_stmf_private; in stmf_post_task()
4841 stmf_i_lu_t *ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_post_task()
4848 if (task->task_max_nbufs > 4) in stmf_post_task()
4849 task->task_max_nbufs = 4; in stmf_post_task()
4850 task->task_cur_nbufs = 0; in stmf_post_task()
4888 if (task->task_mgmt_function) { in stmf_post_task()
4889 tm = task->task_mgmt_function; in stmf_post_task()
4895 } else if (task->task_cdb[0] == SCMD_REPORT_LUNS) { in stmf_post_task()
4906 if ((task->task_flags & TF_INITIAL_BURST) && in stmf_post_task()
4908 stmf_update_kstat_lu_io(task, dbuf); in stmf_post_task()
4909 stmf_update_kstat_lport_io(task, dbuf); in stmf_post_task()
4910 stmf_update_kstat_rport_io(task, dbuf); in stmf_post_task()
4934 stmf_abort(STMF_QUEUE_TASK_ABORT, task, STMF_ABORTED, NULL); in stmf_post_task()
4973 stmf_xfer_data(scsi_task_t *task, stmf_data_buf_t *dbuf, uint32_t ioflags) in stmf_xfer_data() argument
4978 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_xfer_data()
5003 stmf_update_kstat_lu_io(task, dbuf); in stmf_xfer_data()
5004 stmf_update_kstat_lport_io(task, dbuf); in stmf_xfer_data()
5005 stmf_update_kstat_rport_io(task, dbuf); in stmf_xfer_data()
5013 ret = task->task_lport->lport_xfer_data(task, dbuf, ioflags); in stmf_xfer_data()
5029 stmf_data_xfer_done(scsi_task_t *task, stmf_data_buf_t *dbuf, uint32_t iof) in stmf_data_xfer_done() argument
5032 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_data_xfer_done()
5049 ilport = task->task_lport->lport_stmf_private; in stmf_data_xfer_done()
5052 (void *)task, (void *)dbuf); in stmf_data_xfer_done()
5067 task->task_completion_status = dbuf->db_xfer_status; in stmf_data_xfer_done()
5112 stmf_task_free(task); in stmf_data_xfer_done()
5120 stmf_send_scsi_status(scsi_task_t *task, uint32_t ioflags) in stmf_send_scsi_status() argument
5122 DTRACE_PROBE1(scsi__send__status, scsi_task_t *, task); in stmf_send_scsi_status()
5125 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_send_scsi_status()
5149 if (task->task_additional_flags & TASK_AF_NO_EXPECTED_XFER_LENGTH) { in stmf_send_scsi_status()
5150 task->task_status_ctrl = 0; in stmf_send_scsi_status()
5151 task->task_resid = 0; in stmf_send_scsi_status()
5152 } else if (task->task_cmd_xfer_length > in stmf_send_scsi_status()
5153 task->task_expected_xfer_length) { in stmf_send_scsi_status()
5154 task->task_status_ctrl = TASK_SCTRL_OVER; in stmf_send_scsi_status()
5155 task->task_resid = task->task_cmd_xfer_length - in stmf_send_scsi_status()
5156 task->task_expected_xfer_length; in stmf_send_scsi_status()
5157 } else if (task->task_nbytes_transferred < in stmf_send_scsi_status()
5158 task->task_expected_xfer_length) { in stmf_send_scsi_status()
5159 task->task_status_ctrl = TASK_SCTRL_UNDER; in stmf_send_scsi_status()
5160 task->task_resid = task->task_expected_xfer_length - in stmf_send_scsi_status()
5161 task->task_nbytes_transferred; in stmf_send_scsi_status()
5163 task->task_status_ctrl = 0; in stmf_send_scsi_status()
5164 task->task_resid = 0; in stmf_send_scsi_status()
5166 return (task->task_lport->lport_send_status(task, ioflags)); in stmf_send_scsi_status()
5170 stmf_send_status_done(scsi_task_t *task, stmf_status_t s, uint32_t iof) in stmf_send_status_done() argument
5173 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_send_status_done()
5207 " task = %p", (void *)task); in stmf_send_status_done()
5213 task->task_completion_status = s; in stmf_send_status_done()
5232 stmf_task_free(task); in stmf_send_status_done()
5244 stmf_task_lu_done(scsi_task_t *task) in stmf_task_lu_done() argument
5247 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_task_lu_done()
5260 " task = %p", (void *)task); in stmf_task_lu_done()
5268 stmf_task_free(task); in stmf_task_lu_done()
5272 " the task is still not done, task = %p", (void *)task); in stmf_task_lu_done()
5278 stmf_queue_task_for_abort(scsi_task_t *task, stmf_status_t s) in stmf_queue_task_for_abort() argument
5281 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_queue_task_for_abort()
5294 task->task_completion_status = s; in stmf_queue_task_for_abort()
5314 stmf_abort(int abort_cmd, scsi_task_t *task, stmf_status_t s, void *arg) in stmf_abort() argument
5319 DTRACE_PROBE2(scsi__task__abort, scsi_task_t *, task, in stmf_abort()
5324 stmf_task_lu_killall((stmf_lu_t *)arg, task, s); in stmf_abort()
5327 stmf_queue_task_for_abort(task, s); in stmf_abort()
5341 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_abort()
5359 stmf_task_lu_aborted(scsi_task_t *task, stmf_status_t s, uint32_t iof) in stmf_task_lu_aborted() argument
5362 stmf_i_scsi_task_t *itask = TASK_TO_ITASK(task); in stmf_task_lu_aborted()
5370 "task %p, lu failed to abort ret=%llx", (void *)task, st); in stmf_task_lu_aborted()
5374 "%p, s=%llx, iof=%x", (void *)task, st, iof); in stmf_task_lu_aborted()
5383 stmf_abort_task_offline(task, 1, info); in stmf_task_lu_aborted()
5391 stmf_task_lport_aborted(scsi_task_t *task, stmf_status_t s, uint32_t iof) in stmf_task_lport_aborted() argument
5394 stmf_i_scsi_task_t *itask = TASK_TO_ITASK(task); in stmf_task_lport_aborted()
5402 "task %p, tgt port failed to abort ret=%llx", (void *)task, in stmf_task_lport_aborted()
5407 "task=%p, s=%llx, iof=%x", (void *)task, st, iof); in stmf_task_lport_aborted()
5416 stmf_abort_task_offline(task, 0, info); in stmf_task_lport_aborted()
5420 stmf_task_lport_aborted_unlocked(scsi_task_t *task, stmf_status_t s, in stmf_task_lport_aborted_unlocked() argument
5423 stmf_i_scsi_task_t *itask = TASK_TO_ITASK(task); in stmf_task_lport_aborted_unlocked()
5426 stmf_task_lport_aborted(task, s, iof); in stmf_task_lport_aborted_unlocked()
5431 stmf_task_poll_lu(scsi_task_t *task, uint32_t timeout) in stmf_task_poll_lu() argument
5434 task->task_stmf_private; in stmf_task_poll_lu()
5471 stmf_task_poll_lport(scsi_task_t *task, uint32_t timeout) in stmf_task_poll_lport() argument
5474 task->task_stmf_private; in stmf_task_poll_lport()
5511 stmf_do_task_abort(scsi_task_t *task) in stmf_do_task_abort() argument
5513 stmf_i_scsi_task_t *itask = TASK_TO_ITASK(task); in stmf_do_task_abort()
5521 lu = task->task_lu; in stmf_do_task_abort()
5522 lport = task->task_lport; in stmf_do_task_abort()
5536 ret = lu->lu_abort(lu, STMF_LU_ABORT_TASK, task, 0); in stmf_do_task_abort()
5538 ret = dlun0->lu_abort(lu, STMF_LU_ABORT_TASK, task, 0); in stmf_do_task_abort()
5541 stmf_task_lu_aborted(task, ret, STMF_IOF_LU_DONE); in stmf_do_task_abort()
5548 stmf_abort_task_offline(task, 1, info); in stmf_do_task_abort()
5577 ret = lport->lport_abort(lport, STMF_LPORT_ABORT_TASK, task, 0); in stmf_do_task_abort()
5579 stmf_task_lport_aborted(task, ret, STMF_IOF_LPORT_DONE); in stmf_do_task_abort()
5587 stmf_abort_task_offline(task, 0, info); in stmf_do_task_abort()
6138 stmf_scsilib_send_status(scsi_task_t *task, uint8_t st, uint32_t saa) in stmf_scsilib_send_status() argument
6141 task->task_scsi_status = st; in stmf_scsilib_send_status()
6149 task->task_sense_data = sd; in stmf_scsilib_send_status()
6150 task->task_sense_length = 18; in stmf_scsilib_send_status()
6152 task->task_sense_data = NULL; in stmf_scsilib_send_status()
6153 task->task_sense_length = 0; in stmf_scsilib_send_status()
6155 (void) stmf_send_scsi_status(task, STMF_IOF_LU_DONE); in stmf_scsilib_send_status()
6159 stmf_scsilib_prepare_vpd_page83(scsi_task_t *task, uint8_t *page, in stmf_scsilib_prepare_vpd_page83() argument
6192 sz = task->task_lu->lu_id->ident_length + 4; in stmf_scsilib_prepare_vpd_page83()
6193 p = (uint8_t *)task->task_lu->lu_id; in stmf_scsilib_prepare_vpd_page83()
6197 sz = task->task_lport->lport_id->ident_length + 4; in stmf_scsilib_prepare_vpd_page83()
6198 p = (uint8_t *)task->task_lport->lport_id; in stmf_scsilib_prepare_vpd_page83()
6209 task->task_lport->lport_stmf_private; in stmf_scsilib_prepare_vpd_page83()
6236 task->task_lport->lport_stmf_private; in stmf_scsilib_prepare_vpd_page83()
6254 stmf_scsilib_handle_report_tpgs(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_scsilib_handle_report_tpgs() argument
6257 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_scsilib_handle_report_tpgs()
6259 (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_scsilib_handle_report_tpgs()
6266 task->task_cmd_xfer_length = in stmf_scsilib_handle_report_tpgs()
6267 ((((uint32_t)task->task_cdb[6]) << 24) | in stmf_scsilib_handle_report_tpgs()
6268 (((uint32_t)task->task_cdb[7]) << 16) | in stmf_scsilib_handle_report_tpgs()
6269 (((uint32_t)task->task_cdb[8]) << 8) | in stmf_scsilib_handle_report_tpgs()
6270 ((uint32_t)task->task_cdb[9])); in stmf_scsilib_handle_report_tpgs()
6272 if (task->task_additional_flags & in stmf_scsilib_handle_report_tpgs()
6274 task->task_expected_xfer_length = in stmf_scsilib_handle_report_tpgs()
6275 task->task_cmd_xfer_length; in stmf_scsilib_handle_report_tpgs()
6279 if (task->task_cmd_xfer_length == 0) { in stmf_scsilib_handle_report_tpgs()
6280 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_scsilib_handle_report_tpgs()
6283 if (task->task_cmd_xfer_length < 4) { in stmf_scsilib_handle_report_tpgs()
6284 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_scsilib_handle_report_tpgs()
6289 sz = min(task->task_expected_xfer_length, in stmf_scsilib_handle_report_tpgs()
6290 task->task_cmd_xfer_length); in stmf_scsilib_handle_report_tpgs()
6295 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_scsilib_handle_report_tpgs()
6305 dbuf = stmf_alloc_dbuf(task, sz, &minsz, 0); in stmf_scsilib_handle_report_tpgs()
6308 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_scsilib_handle_report_tpgs()
6316 (void) stmf_xfer_data(task, dbuf, 0); in stmf_scsilib_handle_report_tpgs()
6321 stmf_scsilib_handle_task_mgmt(scsi_task_t *task) in stmf_scsilib_handle_task_mgmt() argument
6324 switch (task->task_mgmt_function) { in stmf_scsilib_handle_task_mgmt()
6335 stmf_handle_lun_reset(task); in stmf_scsilib_handle_task_mgmt()
6338 (void) stmf_proxy_scsi_cmd(task, NULL); in stmf_scsilib_handle_task_mgmt()
6344 stmf_handle_target_reset(task); in stmf_scsilib_handle_task_mgmt()
6348 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_scsilib_handle_task_mgmt()
6355 stmf_handle_lun_reset(scsi_task_t *task) in stmf_handle_lun_reset() argument
6360 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_handle_lun_reset()
6361 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_handle_lun_reset()
6371 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_handle_lun_reset()
6388 stmf_abort(STMF_QUEUE_ABORT_LU, task, STMF_ABORTED, task->task_lu); in stmf_handle_lun_reset()
6391 if (stmf_task_poll_lu(task, ITASK_DEFAULT_POLL_TIMEOUT) in stmf_handle_lun_reset()
6393 stmf_abort(STMF_QUEUE_TASK_ABORT, task, STMF_ALLOC_FAILURE, in stmf_handle_lun_reset()
6400 stmf_handle_target_reset(scsi_task_t *task) in stmf_handle_target_reset() argument
6409 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_handle_target_reset()
6410 iss = (stmf_i_scsi_session_t *)task->task_session->ss_stmf_private; in stmf_handle_target_reset()
6411 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_handle_target_reset()
6425 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_handle_target_reset()
6446 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_handle_target_reset()
6456 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_handle_target_reset()
6477 stmf_abort(STMF_QUEUE_ABORT_LU, task, STMF_ABORTED, in stmf_handle_target_reset()
6485 if (stmf_task_poll_lu(task, ITASK_DEFAULT_POLL_TIMEOUT) in stmf_handle_target_reset()
6487 stmf_abort(STMF_QUEUE_TASK_ABORT, task, STMF_ALLOC_FAILURE, in stmf_handle_target_reset()
6496 scsi_task_t *task = itask->itask_task; in stmf_handle_cmd_during_ic() local
6498 task->task_session->ss_stmf_private; in stmf_handle_cmd_during_ic()
6502 (task->task_cdb[0] == SCMD_INQUIRY)) { in stmf_handle_cmd_during_ic()
6510 if (task->task_cdb[0] == SCMD_REPORT_LUNS) { in stmf_handle_cmd_during_ic()
6513 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_handle_cmd_during_ic()
6601 scsi_task_t *task; in stmf_worker_task() local
6658 task = itask->itask_task; in stmf_worker_task()
6660 scsi_task_t *, task); in stmf_worker_task()
6742 lu = task->task_lu; in stmf_worker_task()
6755 task->task_session->ss_stmf_private; in stmf_worker_task()
6770 DTRACE_PROBE1(scsi__task__start, scsi_task_t *, task); in stmf_worker_task()
6771 lu->lu_new_task(task, dbuf); in stmf_worker_task()
6774 lu->lu_dbuf_xfer_done(task, dbuf); in stmf_worker_task()
6777 lu->lu_send_status_done(task); in stmf_worker_task()
6782 stmf_task_free(task); in stmf_worker_task()
6784 stmf_do_task_abort(task); in stmf_worker_task()
6789 lu->lu_task_poll(task); in stmf_worker_task()
6794 task->task_lport->lport_task_poll(task); in stmf_worker_task()
6862 stmf_dlun0_task_alloc(scsi_task_t *task) in stmf_dlun0_task_alloc() argument
6868 stmf_dlun0_new_task(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_dlun0_new_task() argument
6870 uint8_t *cdbp = (uint8_t *)&task->task_cdb[0]; in stmf_dlun0_new_task()
6877 if (task->task_mgmt_function) { in stmf_dlun0_new_task()
6878 stmf_scsilib_handle_task_mgmt(task); in stmf_dlun0_new_task()
6891 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_dlun0_new_task()
6896 task->task_cmd_xfer_length = in stmf_dlun0_new_task()
6899 if (task->task_additional_flags & in stmf_dlun0_new_task()
6901 task->task_expected_xfer_length = in stmf_dlun0_new_task()
6902 task->task_cmd_xfer_length; in stmf_dlun0_new_task()
6905 sz = min(task->task_expected_xfer_length, in stmf_dlun0_new_task()
6906 min(36, task->task_cmd_xfer_length)); in stmf_dlun0_new_task()
6910 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_dlun0_new_task()
6922 dbuf = stmf_alloc_dbuf(task, minsz, &minsz, 0); in stmf_dlun0_new_task()
6924 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_dlun0_new_task()
6951 (void) stmf_xfer_data(task, dbuf, 0); in stmf_dlun0_new_task()
6956 task->task_cmd_xfer_length = in stmf_dlun0_new_task()
6957 ((((uint32_t)task->task_cdb[6]) << 24) | in stmf_dlun0_new_task()
6958 (((uint32_t)task->task_cdb[7]) << 16) | in stmf_dlun0_new_task()
6959 (((uint32_t)task->task_cdb[8]) << 8) | in stmf_dlun0_new_task()
6960 ((uint32_t)task->task_cdb[9])); in stmf_dlun0_new_task()
6962 if (task->task_additional_flags & in stmf_dlun0_new_task()
6964 task->task_expected_xfer_length = in stmf_dlun0_new_task()
6965 task->task_cmd_xfer_length; in stmf_dlun0_new_task()
6968 sz = min(task->task_expected_xfer_length, in stmf_dlun0_new_task()
6969 task->task_cmd_xfer_length); in stmf_dlun0_new_task()
6972 stmf_scsilib_send_status(task, STATUS_CHECK, in stmf_dlun0_new_task()
6978 task->task_session->ss_stmf_private; in stmf_dlun0_new_task()
6984 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_dlun0_new_task()
6994 dbuf = stmf_alloc_dbuf(task, sz, &minsz, 0); in stmf_dlun0_new_task()
6997 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_dlun0_new_task()
7007 (void) stmf_xfer_data(task, dbuf, 0); in stmf_dlun0_new_task()
7011 stmf_scsilib_send_status(task, STATUS_CHECK, STMF_SAA_INVALID_OPCODE); in stmf_dlun0_new_task()
7015 stmf_dlun0_dbuf_done(scsi_task_t *task, stmf_data_buf_t *dbuf) in stmf_dlun0_dbuf_done() argument
7018 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_dlun0_dbuf_done()
7021 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_dlun0_dbuf_done()
7025 task->task_nbytes_transferred += dbuf->db_data_size; in stmf_dlun0_dbuf_done()
7029 (void) stmf_xfer_data(task, dbuf, 0); in stmf_dlun0_dbuf_done()
7033 stmf_free_dbuf(task, dbuf); in stmf_dlun0_dbuf_done()
7050 task->task_session->ss_session_id, in stmf_dlun0_dbuf_done()
7061 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_dlun0_dbuf_done()
7066 stmf_dlun0_status_done(scsi_task_t *task) in stmf_dlun0_status_done() argument
7072 stmf_dlun0_task_free(scsi_task_t *task) in stmf_dlun0_task_free() argument
7080 scsi_task_t *task = (scsi_task_t *)arg; in stmf_dlun0_abort() local
7082 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_dlun0_abort()
7083 stmf_i_lu_t *ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_dlun0_abort()
7087 if ((task->task_mgmt_function) && (itask->itask_flags & in stmf_dlun0_abort()
7089 switch (task->task_mgmt_function) { in stmf_dlun0_abort()
7099 stmf_abort_target_reset(task); in stmf_dlun0_abort()
7128 stmf_dlun0_task_poll(struct scsi_task *task) in stmf_dlun0_task_poll() argument
7131 ASSERT(task->task_mgmt_function); in stmf_dlun0_task_poll()
7133 switch (task->task_mgmt_function) { in stmf_dlun0_task_poll()
7138 (void) stmf_lun_reset_poll(task->task_lu, task, 0); in stmf_dlun0_task_poll()
7143 stmf_target_reset_poll(task); in stmf_dlun0_task_poll()
7158 stmf_dlun0_task_done(struct scsi_task *task) in stmf_dlun0_task_done() argument
7207 stmf_abort_target_reset(scsi_task_t *task) in stmf_abort_target_reset() argument
7210 task->task_session->ss_stmf_private; in stmf_abort_target_reset()
7235 stmf_lun_reset_poll(stmf_lu_t *lu, struct scsi_task *task, int target_reset) in stmf_lun_reset_poll() argument
7248 if ((ntasks_pending == 0) || ((task->task_lu == lu) && in stmf_lun_reset_poll()
7252 if ((task->task_mgmt_function == TM_LUN_RESET) || in stmf_lun_reset_poll()
7253 (task->task_mgmt_function == TM_TARGET_RESET) || in stmf_lun_reset_poll()
7254 (task->task_mgmt_function == TM_TARGET_WARM_RESET) || in stmf_lun_reset_poll()
7255 (task->task_mgmt_function == TM_TARGET_COLD_RESET)) { in stmf_lun_reset_poll()
7256 ret = lu->lu_abort(lu, STMF_LU_RESET_STATE, task, 0); in stmf_lun_reset_poll()
7267 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_lun_reset_poll()
7271 stmf_abort(STMF_QUEUE_TASK_ABORT, task, ret, NULL); in stmf_lun_reset_poll()
7281 if (stmf_task_poll_lu(task, ITASK_DEFAULT_POLL_TIMEOUT) in stmf_lun_reset_poll()
7283 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_lun_reset_poll()
7292 stmf_target_reset_poll(struct scsi_task *task) in stmf_target_reset_poll() argument
7295 task->task_session->ss_stmf_private; in stmf_target_reset_poll()
7314 ret = stmf_lun_reset_poll(lm_ent->ent_lu, task, 1); in stmf_target_reset_poll()
7321 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_target_reset_poll()
7330 if (stmf_task_poll_lu(task, ITASK_DEFAULT_POLL_TIMEOUT) in stmf_target_reset_poll()
7332 stmf_abort(STMF_QUEUE_TASK_ABORT, task, in stmf_target_reset_poll()
7341 stmf_scsilib_send_status(task, STATUS_GOOD, 0); in stmf_target_reset_poll()
7438 scsi_task_t *task = itask->itask_task; in stmf_itl_task_start() local
7444 if (itl == NULL || task->task_lu == dlun0) in stmf_itl_task_start()
7446 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_itl_task_start()
7456 if (task->task_flags & TF_READ_DATA) in stmf_itl_task_start()
7458 else if (task->task_flags & TF_WRITE_DATA) in stmf_itl_task_start()
7469 scsi_task_t *task = itask->itask_task; in stmf_itl_lu_new_task() local
7472 if (itl == NULL || task->task_lu == dlun0) in stmf_itl_lu_new_task()
7474 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_itl_lu_new_task()
7488 scsi_task_t *task = itask->itask_task; in stmf_itl_task_done() local
7493 if (itl == NULL || task->task_lu == dlun0) in stmf_itl_task_done()
7495 ilu = (stmf_i_lu_t *)task->task_lu->lu_stmf_private; in stmf_itl_task_done()
7500 stmf_update_kstat_rport_estat(task); in stmf_itl_task_done()
7505 stmf_update_kstat_lu_q(task, kstat_runq_exit); in stmf_itl_task_done()
7507 stmf_update_kstat_lport_q(task, kstat_runq_exit); in stmf_itl_task_done()
7509 stmf_update_kstat_lu_q(task, kstat_waitq_exit); in stmf_itl_task_done()
7511 stmf_update_kstat_lport_q(task, kstat_waitq_exit); in stmf_itl_task_done()
7516 stmf_lu_xfer_done(scsi_task_t *task, boolean_t read, hrtime_t elapsed_time) in stmf_lu_xfer_done() argument
7518 stmf_i_scsi_task_t *itask = task->task_stmf_private; in stmf_lu_xfer_done()
7520 if (task->task_lu == dlun0) in stmf_lu_xfer_done()
7956 stmf_abort_task_offline(scsi_task_t *task, int offline_lu, char *info) in stmf_abort_task_offline() argument
7963 (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_abort_task_offline()
7973 ctl_private = task->task_lu; in stmf_abort_task_offline()
7975 task->task_lu->lu_stmf_private)->ilu_state == in stmf_abort_task_offline()
7983 ctl_private = task->task_lport; in stmf_abort_task_offline()
7985 task->task_lport->lport_stmf_private)->ilport_state == in stmf_abort_task_offline()
8309 stmf_check_and_hold_lu(scsi_task_t *task, uint8_t *guid) in stmf_check_and_hold_lu() argument
8318 iss = (stmf_i_scsi_session_t *)task->task_session->ss_stmf_private; in stmf_check_and_hold_lu()
8360 stmf_is_task_being_aborted(scsi_task_t *task) in stmf_is_task_being_aborted() argument
8364 itask = (stmf_i_scsi_task_t *)task->task_stmf_private; in stmf_is_task_being_aborted()