Lines Matching full:task
124 * @task: scsi command task
134 void iscsi_prep_data_out_pdu(struct iscsi_task *task, struct iscsi_r2t_info *r2t, in iscsi_prep_data_out_pdu() argument
137 struct iscsi_conn *conn = task->conn; in iscsi_prep_data_out_pdu()
140 task->hdr_len = sizeof(struct iscsi_data); in iscsi_prep_data_out_pdu()
147 hdr->lun = task->lun; in iscsi_prep_data_out_pdu()
148 hdr->itt = task->hdr_itt; in iscsi_prep_data_out_pdu()
164 static int iscsi_add_hdr(struct iscsi_task *task, unsigned len) in iscsi_add_hdr() argument
166 unsigned exp_len = task->hdr_len + len; in iscsi_add_hdr()
168 if (exp_len > task->hdr_max) { in iscsi_add_hdr()
174 task->hdr_len = exp_len; in iscsi_add_hdr()
181 static int iscsi_prep_ecdb_ahs(struct iscsi_task *task) in iscsi_prep_ecdb_ahs() argument
183 struct scsi_cmnd *cmd = task->sc; in iscsi_prep_ecdb_ahs()
189 ecdb_ahdr = iscsi_next_hdr(task); in iscsi_prep_ecdb_ahs()
197 rc = iscsi_add_hdr(task, sizeof(ecdb_ahdr->ahslength) + in iscsi_prep_ecdb_ahs()
210 ISCSI_DBG_SESSION(task->conn->session, in iscsi_prep_ecdb_ahs()
214 task->hdr_len); in iscsi_prep_ecdb_ahs()
219 * iscsi_check_tmf_restrictions - check if a task is affected by TMF
220 * @task: iscsi task
223 * During TMF a task has to be checked if it's affected.
231 static int iscsi_check_tmf_restrictions(struct iscsi_task *task, int opcode) in iscsi_check_tmf_restrictions() argument
233 struct iscsi_session *session = task->conn->session; in iscsi_check_tmf_restrictions()
249 if (hdr_lun != task->sc->device->lun) in iscsi_check_tmf_restrictions()
258 "task [op %x itt 0x%x/0x%x] rejected.\n", in iscsi_check_tmf_restrictions()
259 opcode, task->itt, task->hdr_itt); in iscsi_check_tmf_restrictions()
268 "task [op %x itt 0x%x/0x%x] fast abort.\n", in iscsi_check_tmf_restrictions()
269 opcode, task->itt, task->hdr_itt); in iscsi_check_tmf_restrictions()
275 * the caller has already checked if the task in iscsi_check_tmf_restrictions()
281 task->hdr_itt == tmf->rtt) { in iscsi_check_tmf_restrictions()
283 "Preventing task %x/%x from sending " in iscsi_check_tmf_restrictions()
284 "data-out due to abort task in " in iscsi_check_tmf_restrictions()
285 "progress\n", task->itt, in iscsi_check_tmf_restrictions()
286 task->hdr_itt); in iscsi_check_tmf_restrictions()
297 * @task: iscsi task
302 static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task) in iscsi_prep_scsi_cmd_pdu() argument
304 struct iscsi_conn *conn = task->conn; in iscsi_prep_scsi_cmd_pdu()
306 struct scsi_cmnd *sc = task->sc; in iscsi_prep_scsi_cmd_pdu()
312 rc = iscsi_check_tmf_restrictions(task, ISCSI_OP_SCSI_CMD); in iscsi_prep_scsi_cmd_pdu()
317 rc = conn->session->tt->alloc_pdu(task, ISCSI_OP_SCSI_CMD); in iscsi_prep_scsi_cmd_pdu()
321 hdr = (struct iscsi_scsi_req *)task->hdr; in iscsi_prep_scsi_cmd_pdu()
326 hdr->itt = task->hdr_itt = itt; in iscsi_prep_scsi_cmd_pdu()
328 hdr->itt = task->hdr_itt = build_itt(task->itt, in iscsi_prep_scsi_cmd_pdu()
329 task->conn->session->age); in iscsi_prep_scsi_cmd_pdu()
330 task->hdr_len = 0; in iscsi_prep_scsi_cmd_pdu()
331 rc = iscsi_add_hdr(task, sizeof(*hdr)); in iscsi_prep_scsi_cmd_pdu()
337 task->lun = hdr->lun; in iscsi_prep_scsi_cmd_pdu()
343 rc = iscsi_prep_ecdb_ahs(task); in iscsi_prep_scsi_cmd_pdu()
350 task->imm_count = 0; in iscsi_prep_scsi_cmd_pdu()
352 task->protected = true; in iscsi_prep_scsi_cmd_pdu()
357 struct iscsi_r2t_info *r2t = &task->unsol_r2t; in iscsi_prep_scsi_cmd_pdu()
378 task->imm_count = min(session->first_burst, in iscsi_prep_scsi_cmd_pdu()
381 task->imm_count = min(transfer_length, in iscsi_prep_scsi_cmd_pdu()
383 hton24(hdr->dlength, task->imm_count); in iscsi_prep_scsi_cmd_pdu()
390 task->imm_count; in iscsi_prep_scsi_cmd_pdu()
391 r2t->data_offset = task->imm_count; in iscsi_prep_scsi_cmd_pdu()
396 if (!task->unsol_r2t.data_length) in iscsi_prep_scsi_cmd_pdu()
408 hdrlength = task->hdr_len - sizeof(*hdr); in iscsi_prep_scsi_cmd_pdu()
415 hdr->cmdsn = task->cmdsn = cpu_to_be32(session->cmdsn); in iscsi_prep_scsi_cmd_pdu()
417 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_scsi_cmd_pdu()
420 task->state = ISCSI_TASK_RUNNING; in iscsi_prep_scsi_cmd_pdu()
428 task->itt, transfer_length, in iscsi_prep_scsi_cmd_pdu()
435 * iscsi_free_task - free a task
436 * @task: iscsi cmd task
440 * up mgmt tasks then returns the task to the pool.
442 static void iscsi_free_task(struct iscsi_task *task) in iscsi_free_task() argument
444 struct iscsi_conn *conn = task->conn; in iscsi_free_task()
446 struct scsi_cmnd *sc = task->sc; in iscsi_free_task()
447 int oldstate = task->state; in iscsi_free_task()
449 ISCSI_DBG_SESSION(session, "freeing task itt 0x%x state %d sc %p\n", in iscsi_free_task()
450 task->itt, task->state, task->sc); in iscsi_free_task()
452 session->tt->cleanup_task(task); in iscsi_free_task()
453 task->state = ISCSI_TASK_FREE; in iscsi_free_task()
454 task->sc = NULL; in iscsi_free_task()
456 * login task is preallocated so do not free in iscsi_free_task()
458 if (conn->login_task == task) in iscsi_free_task()
461 kfifo_in(&session->cmdpool.queue, (void*)&task, sizeof(void*)); in iscsi_free_task()
467 * queue command may call this to free the task, so in iscsi_free_task()
475 void __iscsi_get_task(struct iscsi_task *task) in __iscsi_get_task() argument
477 refcount_inc(&task->refcount); in __iscsi_get_task()
481 void __iscsi_put_task(struct iscsi_task *task) in __iscsi_put_task() argument
483 if (refcount_dec_and_test(&task->refcount)) in __iscsi_put_task()
484 iscsi_free_task(task); in __iscsi_put_task()
488 void iscsi_put_task(struct iscsi_task *task) in iscsi_put_task() argument
490 struct iscsi_session *session = task->conn->session; in iscsi_put_task()
494 __iscsi_put_task(task); in iscsi_put_task()
500 * iscsi_complete_task - finish a task
501 * @task: iscsi cmd task
502 * @state: state to complete task with
506 static void iscsi_complete_task(struct iscsi_task *task, int state) in iscsi_complete_task() argument
508 struct iscsi_conn *conn = task->conn; in iscsi_complete_task()
511 "complete task itt 0x%x state %d sc %p\n", in iscsi_complete_task()
512 task->itt, task->state, task->sc); in iscsi_complete_task()
513 if (task->state == ISCSI_TASK_COMPLETED || in iscsi_complete_task()
514 task->state == ISCSI_TASK_ABRT_TMF || in iscsi_complete_task()
515 task->state == ISCSI_TASK_ABRT_SESS_RECOV || in iscsi_complete_task()
516 task->state == ISCSI_TASK_REQUEUE_SCSIQ) in iscsi_complete_task()
518 WARN_ON_ONCE(task->state == ISCSI_TASK_FREE); in iscsi_complete_task()
519 task->state = state; in iscsi_complete_task()
521 if (READ_ONCE(conn->ping_task) == task) in iscsi_complete_task()
525 __iscsi_put_task(task); in iscsi_complete_task()
529 * iscsi_complete_scsi_task - finish scsi task normally
530 * @task: iscsi task for scsi cmd
539 void iscsi_complete_scsi_task(struct iscsi_task *task, in iscsi_complete_scsi_task() argument
542 struct iscsi_conn *conn = task->conn; in iscsi_complete_scsi_task()
544 ISCSI_DBG_SESSION(conn->session, "[itt 0x%x]\n", task->itt); in iscsi_complete_scsi_task()
548 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in iscsi_complete_scsi_task()
555 static bool cleanup_queued_task(struct iscsi_task *task) in cleanup_queued_task() argument
557 struct iscsi_conn *conn = task->conn; in cleanup_queued_task()
560 /* Bad target might have completed task while it was still running */ in cleanup_queued_task()
561 if (task->state == ISCSI_TASK_COMPLETED) in cleanup_queued_task()
564 if (!list_empty(&task->running)) { in cleanup_queued_task()
565 list_del_init(&task->running); in cleanup_queued_task()
571 if (task->state == ISCSI_TASK_RUNNING || in cleanup_queued_task()
572 task->state == ISCSI_TASK_COMPLETED) in cleanup_queued_task()
573 __iscsi_put_task(task); in cleanup_queued_task()
576 if (conn->session->running_aborted_task == task) { in cleanup_queued_task()
578 __iscsi_put_task(task); in cleanup_queued_task()
581 if (conn->task == task) { in cleanup_queued_task()
582 conn->task = NULL; in cleanup_queued_task()
583 __iscsi_put_task(task); in cleanup_queued_task()
590 * session frwd lock must be held and if not called for a task that is still
593 static void fail_scsi_task(struct iscsi_task *task, int err) in fail_scsi_task() argument
595 struct iscsi_conn *conn = task->conn; in fail_scsi_task()
600 if (cleanup_queued_task(task)) { in fail_scsi_task()
605 if (task->state == ISCSI_TASK_PENDING) { in fail_scsi_task()
618 sc = task->sc; in fail_scsi_task()
621 iscsi_complete_task(task, state); in fail_scsi_task()
626 struct iscsi_task *task) in iscsi_prep_mgmt_task() argument
629 struct iscsi_hdr *hdr = task->hdr; in iscsi_prep_mgmt_task()
658 if (session->tt->init_task && session->tt->init_task(task)) in iscsi_prep_mgmt_task()
664 task->state = ISCSI_TASK_RUNNING; in iscsi_prep_mgmt_task()
667 hdr->itt, task->data_count); in iscsi_prep_mgmt_task()
678 struct iscsi_task *task; in __iscsi_conn_send_pdu() local
688 * Same task can be used. Same ITT must be used. in __iscsi_conn_send_pdu()
693 "progress. Cannot start new task.\n"); in __iscsi_conn_send_pdu()
698 …iscsi_conn_printk(KERN_ERR, conn, "Invalid buffer len of %u for login task. Max len is %u\n", data… in __iscsi_conn_send_pdu()
702 task = conn->login_task; in __iscsi_conn_send_pdu()
716 (void*)&task, sizeof(void*))) in __iscsi_conn_send_pdu()
720 * released in complete pdu for task we expect a response for, and in __iscsi_conn_send_pdu()
721 * released by the lld when it has transmitted the task for in __iscsi_conn_send_pdu()
724 refcount_set(&task->refcount, 1); in __iscsi_conn_send_pdu()
725 task->conn = conn; in __iscsi_conn_send_pdu()
726 task->sc = NULL; in __iscsi_conn_send_pdu()
727 INIT_LIST_HEAD(&task->running); in __iscsi_conn_send_pdu()
728 task->state = ISCSI_TASK_PENDING; in __iscsi_conn_send_pdu()
731 memcpy(task->data, data, data_size); in __iscsi_conn_send_pdu()
732 task->data_count = data_size; in __iscsi_conn_send_pdu()
734 task->data_count = 0; in __iscsi_conn_send_pdu()
737 if (conn->session->tt->alloc_pdu(task, hdr->opcode)) { in __iscsi_conn_send_pdu()
739 "pdu for mgmt task.\n"); in __iscsi_conn_send_pdu()
744 itt = task->hdr->itt; in __iscsi_conn_send_pdu()
745 task->hdr_len = sizeof(struct iscsi_hdr); in __iscsi_conn_send_pdu()
746 memcpy(task->hdr, hdr, sizeof(struct iscsi_hdr)); in __iscsi_conn_send_pdu()
750 task->hdr->itt = itt; in __iscsi_conn_send_pdu()
752 task->hdr->itt = build_itt(task->itt, in __iscsi_conn_send_pdu()
753 task->conn->session->age); in __iscsi_conn_send_pdu()
757 WRITE_ONCE(conn->ping_task, task); in __iscsi_conn_send_pdu()
760 if (iscsi_prep_mgmt_task(conn, task)) in __iscsi_conn_send_pdu()
763 if (session->tt->xmit_task(task)) in __iscsi_conn_send_pdu()
766 list_add_tail(&task->running, &conn->mgmtqueue); in __iscsi_conn_send_pdu()
770 return task; in __iscsi_conn_send_pdu()
775 __iscsi_put_task(task); in __iscsi_conn_send_pdu()
799 * @task: scsi command task
804 * then completes the command and task. called under back_lock
807 struct iscsi_task *task, char *data, in iscsi_scsi_cmd_rsp() argument
812 struct scsi_cmnd *sc = task->sc; in iscsi_scsi_cmd_rsp()
819 if (task->protected) { in iscsi_scsi_cmd_rsp()
830 ascq = session->tt->check_protection(task, §or); in iscsi_scsi_cmd_rsp()
887 sc, sc->result, task->itt); in iscsi_scsi_cmd_rsp()
889 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in iscsi_scsi_cmd_rsp()
896 * @task: scsi command task
899 * then completes the command and task. called under back_lock
903 struct iscsi_task *task) in iscsi_data_in_rsp() argument
906 struct scsi_cmnd *sc = task->sc; in iscsi_data_in_rsp()
928 sc, sc->result, task->itt); in iscsi_data_in_rsp()
930 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in iscsi_data_in_rsp()
956 struct iscsi_task *task; in iscsi_send_nopout() local
975 task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0); in iscsi_send_nopout()
976 if (!task) { in iscsi_send_nopout()
991 * @task: scsi command task
999 static int iscsi_nop_out_rsp(struct iscsi_task *task, in iscsi_nop_out_rsp() argument
1002 struct iscsi_conn *conn = task->conn; in iscsi_nop_out_rsp()
1005 if (READ_ONCE(conn->ping_task) != task) { in iscsi_nop_out_rsp()
1015 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in iscsi_nop_out_rsp()
1075 struct iscsi_task *task; in iscsi_handle_reject() local
1080 task = iscsi_itt_to_task(conn, rejected_pdu.itt); in iscsi_handle_reject()
1081 if (!task) { in iscsi_handle_reject()
1084 "not lookup rejected task.\n"); in iscsi_handle_reject()
1087 rc = iscsi_nop_out_rsp(task, in iscsi_handle_reject()
1103 * iscsi_itt_to_task - look up task by itt
1147 struct iscsi_task *task; in __iscsi_complete_pdu() local
1201 task = iscsi_itt_to_ctask(conn, hdr->itt); in __iscsi_complete_pdu()
1202 if (!task) in __iscsi_complete_pdu()
1204 task->last_xfer = jiffies; in __iscsi_complete_pdu()
1216 task = iscsi_itt_to_task(conn, hdr->itt); in __iscsi_complete_pdu()
1217 if (!task) in __iscsi_complete_pdu()
1226 iscsi_scsi_cmd_rsp(conn, hdr, task, data, datalen); in __iscsi_complete_pdu()
1229 iscsi_data_in_rsp(conn, hdr, task); in __iscsi_complete_pdu()
1255 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in __iscsi_complete_pdu()
1265 rc = iscsi_nop_out_rsp(task, (struct iscsi_nopin*)hdr, in __iscsi_complete_pdu()
1278 iscsi_complete_task(task, ISCSI_TASK_COMPLETED); in __iscsi_complete_pdu()
1338 struct iscsi_task *task; in iscsi_itt_to_ctask() local
1343 task = iscsi_itt_to_task(conn, itt); in iscsi_itt_to_ctask()
1344 if (!task || !task->sc) in iscsi_itt_to_ctask()
1347 if (task->sc->SCp.phase != conn->session->age) { in iscsi_itt_to_ctask()
1349 "task's session age %d, expected %d\n", in iscsi_itt_to_ctask()
1350 task->sc->SCp.phase, conn->session->age); in iscsi_itt_to_ctask()
1354 return task; in iscsi_itt_to_ctask()
1431 static int iscsi_xmit_task(struct iscsi_conn *conn, struct iscsi_task *task, in iscsi_xmit_task() argument
1438 if (!conn->task) { in iscsi_xmit_task()
1440 __iscsi_get_task(task); in iscsi_xmit_task()
1443 conn->task = NULL; in iscsi_xmit_task()
1447 * If this was a requeue for a R2T we have an extra ref on the task in in iscsi_xmit_task()
1448 * case a bad target sends a cmd rsp before we have handled the task. in iscsi_xmit_task()
1451 __iscsi_put_task(task); in iscsi_xmit_task()
1459 * Save the task and ref in case we weren't cleaning up this in iscsi_xmit_task()
1460 * task and get woken up again. in iscsi_xmit_task()
1462 conn->task = task; in iscsi_xmit_task()
1469 rc = conn->session->tt->xmit_task(task); in iscsi_xmit_task()
1472 /* done with this task */ in iscsi_xmit_task()
1473 task->last_xfer = jiffies; in iscsi_xmit_task()
1477 if (rc && task->state == ISCSI_TASK_RUNNING) { in iscsi_xmit_task()
1480 * as conn->task above. in iscsi_xmit_task()
1482 __iscsi_get_task(task); in iscsi_xmit_task()
1483 conn->task = task; in iscsi_xmit_task()
1486 __iscsi_put_task(task); in iscsi_xmit_task()
1492 * iscsi_requeue_task - requeue task to run from session workqueue
1493 * @task: task to requeue
1495 * Callers must have taken a ref to the task that is going to be requeued.
1497 void iscsi_requeue_task(struct iscsi_task *task) in iscsi_requeue_task() argument
1499 struct iscsi_conn *conn = task->conn; in iscsi_requeue_task()
1506 if (list_empty(&task->running)) { in iscsi_requeue_task()
1507 list_add_tail(&task->running, &conn->requeue); in iscsi_requeue_task()
1513 iscsi_put_task(task); in iscsi_requeue_task()
1531 struct iscsi_task *task; in iscsi_data_xmit() local
1541 if (conn->task) { in iscsi_data_xmit()
1542 rc = iscsi_xmit_task(conn, conn->task, false); in iscsi_data_xmit()
1554 task = list_entry(conn->mgmtqueue.next, struct iscsi_task, in iscsi_data_xmit()
1556 list_del_init(&task->running); in iscsi_data_xmit()
1557 if (iscsi_prep_mgmt_task(conn, task)) { in iscsi_data_xmit()
1560 __iscsi_put_task(task); in iscsi_data_xmit()
1564 rc = iscsi_xmit_task(conn, task, false); in iscsi_data_xmit()
1571 task = list_entry(conn->cmdqueue.next, struct iscsi_task, in iscsi_data_xmit()
1573 list_del_init(&task->running); in iscsi_data_xmit()
1575 fail_scsi_task(task, DID_IMM_RETRY); in iscsi_data_xmit()
1578 rc = iscsi_prep_scsi_cmd_pdu(task); in iscsi_data_xmit()
1581 fail_scsi_task(task, DID_IMM_RETRY); in iscsi_data_xmit()
1583 fail_scsi_task(task, DID_ABORT); in iscsi_data_xmit()
1586 rc = iscsi_xmit_task(conn, task, false); in iscsi_data_xmit()
1590 * we could continuously get new task requests so in iscsi_data_xmit()
1605 task = list_entry(conn->requeue.next, struct iscsi_task, in iscsi_data_xmit()
1608 if (iscsi_check_tmf_restrictions(task, ISCSI_OP_SCSI_DATA_OUT)) in iscsi_data_xmit()
1611 list_del_init(&task->running); in iscsi_data_xmit()
1612 rc = iscsi_xmit_task(conn, task, true); in iscsi_data_xmit()
1642 struct iscsi_task *task; in iscsi_alloc_task() local
1645 (void *) &task, sizeof(void *))) in iscsi_alloc_task()
1649 sc->SCp.ptr = (char *) task; in iscsi_alloc_task()
1651 refcount_set(&task->refcount, 1); in iscsi_alloc_task()
1652 task->state = ISCSI_TASK_PENDING; in iscsi_alloc_task()
1653 task->conn = conn; in iscsi_alloc_task()
1654 task->sc = sc; in iscsi_alloc_task()
1655 task->have_checked_conn = false; in iscsi_alloc_task()
1656 task->last_timeout = jiffies; in iscsi_alloc_task()
1657 task->last_xfer = jiffies; in iscsi_alloc_task()
1658 task->protected = false; in iscsi_alloc_task()
1659 INIT_LIST_HEAD(&task->running); in iscsi_alloc_task()
1660 return task; in iscsi_alloc_task()
1683 struct iscsi_task *task = NULL; in iscsi_queuecommand() local
1760 task = iscsi_alloc_task(conn, sc); in iscsi_queuecommand()
1761 if (!task) { in iscsi_queuecommand()
1767 reason = iscsi_prep_scsi_cmd_pdu(task); in iscsi_queuecommand()
1777 if (session->tt->xmit_task(task)) { in iscsi_queuecommand()
1783 list_add_tail(&task->running, &conn->cmdqueue); in iscsi_queuecommand()
1793 iscsi_complete_task(task, ISCSI_TASK_REQUEUE_SCSIQ); in iscsi_queuecommand()
1803 iscsi_complete_task(task, ISCSI_TASK_REQUEUE_SCSIQ); in iscsi_queuecommand()
1845 struct iscsi_task *task; in iscsi_exec_task_mgmt_fn() local
1847 task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)hdr, in iscsi_exec_task_mgmt_fn()
1849 if (!task) { in iscsi_exec_task_mgmt_fn()
1881 /* if the session drops it will clean up the task */ in iscsi_exec_task_mgmt_fn()
1894 struct iscsi_task *task; in fail_scsi_tasks() local
1899 task = session->cmds[i]; in fail_scsi_tasks()
1900 if (!task->sc || task->state == ISCSI_TASK_FREE) in fail_scsi_tasks()
1903 if (lun != -1 && lun != task->sc->device->lun) in fail_scsi_tasks()
1906 __iscsi_get_task(task); in fail_scsi_tasks()
1911 task->sc, task->itt, task->state); in fail_scsi_tasks()
1912 fail_scsi_task(task, error); in fail_scsi_tasks()
1915 iscsi_put_task(task); in fail_scsi_tasks()
1987 struct iscsi_task *task = NULL, *running_task; in iscsi_eh_cmd_timed_out() local
2000 task = (struct iscsi_task *)sc->SCp.ptr; in iscsi_eh_cmd_timed_out()
2001 if (!task) { in iscsi_eh_cmd_timed_out()
2010 __iscsi_get_task(task); in iscsi_eh_cmd_timed_out()
2044 * recvd one for the task since the last timeout ask for in iscsi_eh_cmd_timed_out()
2046 * we can check if it is the task or connection when we send the in iscsi_eh_cmd_timed_out()
2049 if (time_after(task->last_xfer, task->last_timeout)) { in iscsi_eh_cmd_timed_out()
2053 "%lu\n.", task->last_xfer, task->last_timeout); in iscsi_eh_cmd_timed_out()
2054 task->have_checked_conn = false; in iscsi_eh_cmd_timed_out()
2073 if (!running_task->sc || running_task == task || in iscsi_eh_cmd_timed_out()
2082 task->sc->jiffies_at_alloc)) in iscsi_eh_cmd_timed_out()
2085 if (time_after(running_task->last_xfer, task->last_timeout)) { in iscsi_eh_cmd_timed_out()
2087 * This task has not made progress, but a task in iscsi_eh_cmd_timed_out()
2099 "complete. Our last xfer vs running task " in iscsi_eh_cmd_timed_out()
2101 task->last_xfer, running_task->last_xfer, in iscsi_eh_cmd_timed_out()
2102 task->last_timeout); in iscsi_eh_cmd_timed_out()
2111 if (task->have_checked_conn) in iscsi_eh_cmd_timed_out()
2119 task->have_checked_conn = true; in iscsi_eh_cmd_timed_out()
2126 task->have_checked_conn = true; in iscsi_eh_cmd_timed_out()
2132 if (task) { in iscsi_eh_cmd_timed_out()
2133 task->last_timeout = jiffies; in iscsi_eh_cmd_timed_out()
2134 iscsi_put_task(task); in iscsi_eh_cmd_timed_out()
2231 static void iscsi_prep_abort_task_pdu(struct iscsi_task *task, in iscsi_prep_abort_task_pdu() argument
2238 hdr->lun = task->lun; in iscsi_prep_abort_task_pdu()
2239 hdr->rtt = task->hdr_itt; in iscsi_prep_abort_task_pdu()
2240 hdr->refcmdsn = task->cmdsn; in iscsi_prep_abort_task_pdu()
2248 struct iscsi_task *task; in iscsi_eh_abort() local
2285 task = (struct iscsi_task *)sc->SCp.ptr; in iscsi_eh_abort()
2286 if (!task || !task->sc) { in iscsi_eh_abort()
2287 /* task completed before time out */ in iscsi_eh_abort()
2301 ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", sc, task->itt); in iscsi_eh_abort()
2302 __iscsi_get_task(task); in iscsi_eh_abort()
2305 if (task->state == ISCSI_TASK_PENDING) { in iscsi_eh_abort()
2306 fail_scsi_task(task, DID_ABORT); in iscsi_eh_abort()
2316 iscsi_prep_abort_task_pdu(task, hdr); in iscsi_eh_abort()
2335 fail_scsi_task(task, DID_ABORT); in iscsi_eh_abort()
2342 session->running_aborted_task = task; in iscsi_eh_abort()
2347 if (iscsi_task_is_completed(task)) { in iscsi_eh_abort()
2350 /* task completed before tmf abort response */ in iscsi_eh_abort()
2365 sc, task->itt); in iscsi_eh_abort()
2366 iscsi_put_task(task); in iscsi_eh_abort()
2375 task ? task->itt : 0); in iscsi_eh_abort()
2377 * The driver might be accessing the task so hold the ref. The conn in iscsi_eh_abort()
2379 * driver's no longer touching the task. in iscsi_eh_abort()
2382 iscsi_put_task(task); in iscsi_eh_abort()
2894 * @cmd_task_size: LLD task private data size
2965 struct iscsi_task *task = session->cmds[cmd_i]; in iscsi_session_setup() local
2968 task->dd_data = &task[1]; in iscsi_session_setup()
2969 task->itt = cmd_i; in iscsi_session_setup()
2970 task->state = ISCSI_TASK_FREE; in iscsi_session_setup()
2971 INIT_LIST_HEAD(&task->running); in iscsi_session_setup()
3212 struct iscsi_task *task; in fail_mgmt_tasks() local
3216 task = conn->session->cmds[i]; in fail_mgmt_tasks()
3217 if (task->sc) in fail_mgmt_tasks()
3220 if (task->state == ISCSI_TASK_FREE) in fail_mgmt_tasks()
3225 task->itt, task->state); in fail_mgmt_tasks()
3228 if (cleanup_queued_task(task)) { in fail_mgmt_tasks()
3234 if (task->state == ISCSI_TASK_PENDING) in fail_mgmt_tasks()
3236 iscsi_complete_task(task, state); in fail_mgmt_tasks()
3257 * up the login task and connection. We do not need to block and set in iscsi_conn_stop()